Proximity System Architecture
Overview
Proximity is a full-stack application deployment platform that simplifies container management across multiple Proxmox hosts. It provides a web-based interface and REST API for deploying, managing, and monitoring containerized applications.
┌─────────────────────────────────────────────────────────────┐
│ Web Browser / Client │
└──────────────────────────┬──────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────┐
│ Frontend (SvelteKit) │
│ - Modern Web UI │
│ - Real-time updates │
│ - Responsive design │
└──────────────────────────┬──────────────────────────────────┘
│ HTTP/REST
┌──────────────────────────▼──────────────────────────────────┐
│ Backend API (Django Ninja) │
│ - REST Endpoints │
│ - Authentication (JWT) │
│ - Business Logic │
│ - Database ORM │
└──────────────────────────┬──────────────────────────────────┘
┌────────────────┼────────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌──▼──────┐
│PostgreSQL│ │ Redis │ │ Celery │
│ Database │ │ Cache │ │ Queue │
└──────────┘ └─────────┘ └──┬──────┘
│
┌─────────────────────────────────┘
│
┌────▼──────────────────────────────────┐
│ Proxmox Integration (API) │
│ - Node management │
│ - Container deployment │
│ - Resource allocation │
│ - Backup management │
└────┬──────────────────────────────────┘
│
┌────▼──────────────────────────────────┐
│ Proxmox Infrastructure │
│ - pve (Host 1) │
│ - opti2 (Host 2) │
│ - Additional nodes │
└────────────────────────────────────────┘Technology Stack
Frontend
- Framework: SvelteKit
- Build Tool: Vite
- Styling: Tailwind CSS
- UI Components: Custom SvelteKit components
- State Management: Svelte stores
- HTTP Client: Fetch API
Backend
- Framework: Django 5.1
- API: Django Ninja (REST)
- ORM: Django ORM
- Task Queue: Celery
- Database: PostgreSQL
- Cache: Redis
- Auth: JWT via djangorestframework-simplejwt
Infrastructure
- Deployment: Docker / Docker Compose
- Containerization: LXC (via Proxmox)
- Proxmox API: Version 2.0+
- Monitoring: Sentry
- Logging: Django logging
Core Components
1. Frontend Application (SvelteKit)
Located: /frontend
Responsibilities:
- User interface for application management
- Real-time status updates
- Application deployment interface
- Backup and restore management
- System monitoring dashboard
Key Routes:
/ → Dashboard
/apps → Application listing
/apps/[id] → Application details
/deploy → Deployment wizard
/backups → Backup management
/settings → System settings2. Backend API (Django)
Located: /backend
Core Apps:
proximity/
├── apps/
│ ├── applications/ # App deployment & management
│ ├── backups/ # Backup operations
│ ├── catalog/ # Application catalog
│ ├── proxmox/ # Proxmox integration
│ ├── core/ # Authentication & user management
│ └── [other apps]/
└── proximity/
├── settings.py # Django configuration
└── urls.py # URL routing3. Database Schema
Located: /backend/apps/*/migrations
Key Models:
python
User
├─ Applications (1:N)
│ ├─ Backups (1:N)
│ └─ DeploymentLogs (1:N)
└─ Tokens (1:N)
ProxmoxHost
├─ ProxmoxNodes (1:N)
└─ Applications (1:N)
Application
├─ Backups (1:N)
├─ DeploymentLogs (1:N)
└─ ProxmoxHost (N:1)
Backup
├─ Application (N:1)
└─ [Snapshots/Files]4. Proxmox Integration
Located: /backend/apps/proxmox
Service Architecture:
ProxmoxService
├─ get_host()
├─ get_nodes()
├─ deploy_container()
├─ create_backup()
├─ restore_backup()
└─ delete_backup()Integration Pattern:
API Request
↓
Authentication & Authorization
↓
Business Logic (Django)
↓
ProxmoxService Call
↓
Proxmox API HTTP Request
↓
Container Operation
↓
Database Update
↓
Response to Client5. Task Queue (Celery)
Located: /backend/apps/*/tasks.py
Async Operations:
- Container deployment
- Backup creation
- Backup restoration
- Cleanup operations
Data Flow
Application Deployment
1. User submits deployment form
↓
2. Frontend calls POST /api/apps/
↓
3. Backend validates request
↓
4. Backend creates Application record (status: "deploying")
↓
5. Celery task triggered: create_deployment_task
↓
6. ProxmoxService connects to Proxmox host
↓
7. Container created via Proxmox API
↓
8. Application status updated to "running"
↓
9. Frontend polls status and updates UIBackup Operation
1. User requests backup
↓
2. POST /api/apps/{id}/backups/
↓
3. Backup record created (status: "creating")
↓
4. Celery task: create_backup_task
↓
5. ProxmoxService.create_backup_file()
↓
6. Backup stored in Proxmox storage
↓
7. Backup record updated (status: "completed")
↓
8. User can restore from this backupAuthentication Flow
1. User logs in with credentials
↓
2. POST /api/auth/login/
↓
3. Backend validates credentials
↓
4. JWT token generated
↓
5. Token stored in HTTP-only cookie
↓
6. Subsequent requests include JWT in Authorization header
↓
7. Middleware validates JWT
↓
8. Request processed with user contextDatabase Relationships
User & Applications
User (1) ──── (*) Application
- Each user can own multiple applications
- User authentication verified per request
- Applications filtered by ownerApplication & Proxmox
Application ──→ ProxmoxHost
Application ──→ ProxmoxNode
- Application deployed to specific node
- Resources allocated from host
- Status synchronized with ProxmoxApplication & Backups
Application (1) ──── (*) Backup
- Each application can have multiple backups
- Backups linked to specific application
- Restore operation creates new application stateAPI Architecture
REST Endpoints
Authentication
POST /api/auth/login/
POST /api/auth/logout/
GET /api/auth/user/
Applications
GET /api/apps/ # List
POST /api/apps/ # Create
GET /api/apps/{id}/ # Detail
PATCH /api/apps/{id}/ # Update
DELETE /api/apps/{id}/ # Delete
Backups
GET /api/apps/{app_id}/backups/
POST /api/apps/{app_id}/backups/
GET /api/apps/{app_id}/backups/{id}/
POST /api/apps/{app_id}/backups/{id}/restore/
DELETE /api/apps/{app_id}/backups/{id}/
Catalog
GET /api/catalog/
GET /api/catalog/{id}/
GET /api/catalog/categories/
GET /api/catalog/search/Response Format
json
{
"data": { /* ... */ },
"status": "success|error",
"message": "Human-readable message",
"timestamp": "2025-10-31T10:00:00Z"
}Deployment Patterns
Single Host
Frontend (SvelteKit)
↓
Backend API (Django)
↓
PostgreSQL
↓
Proxmox Host (Single)Multi-Host
Frontend (SvelteKit)
↓
Backend API (Django)
↓
PostgreSQL
↓
┌─────────────────────┬──────────────────┐
│ Proxmox Host 1 │ Proxmox Host 2 │
│ (pve) │ (opti2) │
└─────────────────────┴──────────────────┘Scalability Considerations
Horizontal Scaling
- Stateless API: Multiple backend instances via load balancer
- Shared Database: PostgreSQL for persistence
- Celery Workers: Multiple workers for task processing
- Redis: Distributed cache and broker
Vertical Scaling
- Increase resources on single host
- Database optimization (indexing, query optimization)
- Caching strategies (Redis)
- Connection pooling
Error Handling
Request
↓
Validation Error? → 400 Bad Request
↓
Authentication Error? → 401 Unauthorized
↓
Permission Error? → 403 Forbidden
↓
Resource Not Found? → 404 Not Found
↓
Proxmox Error? → 502 Bad Gateway
↓
Internal Error? → 500 Internal Server ErrorMonitoring & Observability
Sentry Integration
- Error tracking and alerting
- Performance monitoring
- Release tracking
Logging
- Request/response logging
- Task execution logging
- Error stack traces
Metrics
- Application deployment success rate
- Task queue depth
- Response times
- Database connection pool usage
Security Architecture
Authentication
- JWT tokens with expiration
- HTTP-only cookies for token storage
- CSRF protection
- Token refresh mechanism
Authorization
- Permission-based access control
- User ownership verification
- Admin-only operations
Data Protection
- Database passwords encrypted in config
- API request/response validation
- SQL injection prevention (ORM)
- XSS protection (Frontend framework)
Development Considerations
State Management
- Frontend: Svelte stores for local state
- Backend: Django models as source of truth
- Cache: Redis for session and temporary data
Testing
- Unit Tests: Model and service tests
- Integration Tests: API endpoint tests
- E2E Tests: Full workflow tests
- Test Coverage: 102/102 backend tests passing (see STATUS.md)
Version Control
- Git for source control
- Feature branches for development
- Pull requests for code review