chore: initial project setup with backend, frontend, CI/CD, and documentation
CI / backend (push) Failing after 15s
CI / frontend (push) Failing after 39s

Add complete NexaFabric project structure including:
- FastAPI backend with SQLAlchemy models, JWT auth, RBAC, audit logging, and provider interfaces
- React + TypeScript frontend with Vite, Tailwind CSS, TanStack Query, and Zustand
- Docker Compose configuration for PostgreSQL, Redis, API, worker, frontend, and nginx
- GitHub Actions and GitLab CI workflows for testing, linting, building, and security scanning
- Environment
This commit is contained in:
2026-07-09 12:10:35 +02:00
commit 14e7710120
83 changed files with 2887 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
# NexaFabric Node Agent
The node agent is optional. NexaFabric works through the Proxmox API without it.
Planned agent responsibilities:
- Read nftables status.
- Report node network health.
- Apply explicitly approved rule bundles.
- Authenticate with token or mTLS.
- Expose a health check.
The current repository includes the service file and install script skeleton so packaging can be added without changing the control-plane architecture.
+28
View File
@@ -0,0 +1,28 @@
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
import os
class HealthHandler(BaseHTTPRequestHandler):
def do_GET(self) -> None:
if self.path != "/healthz":
self.send_response(404)
self.end_headers()
return
body = json.dumps({"status": "ok", "agent": "nexafabric"}).encode()
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(body)))
self.end_headers()
self.wfile.write(body)
def main() -> None:
host = os.getenv("NEXAFABRIC_AGENT_HOST", "0.0.0.0")
port = int(os.getenv("NEXAFABRIC_AGENT_PORT", "9844"))
HTTPServer((host, port), HealthHandler).serve_forever()
if __name__ == "__main__":
main()