83f94b1f09
Add complete documentation structure: - Frontend architecture documentation - Database schema documentation - Deployment guides (Docker, Traefik, Authentik, Environment) - Development guides (Setup, Testing, Contributing, Quality Gates) - Deployment architecture documentation - Updated docs README with complete navigation All new features and APIs are now documented. Quality gates: docs only, no code changes
11 KiB
11 KiB
Deployment Architecture
Overview
Headquarter is designed for containerized deployment using Docker, with support for both development and production environments.
System Architecture
┌─────────────────────────────────────────────────────────────┐
│ Internet │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Traefik (Reverse Proxy) │
│ SSL/TLS termination, routing │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ app.domain │ │ api.domain │ │ auth.domain │ │
│ │ (Frontend) │ │ (Backend) │ │ (Authentik) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
└─────────┼─────────────────┼─────────────────┼──────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Docker Host / Server │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Frontend │ │ API │ │ Authentik │ │
│ │ (nginx) │ │ (FastAPI) │ │ (OAuth2) │ │
│ │ Port 80 │ │ Port 8000 │ │ Port 9443 │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └─────────────────┼─────────────────┘ │
│ │ │
│ ┌────────┴────────┐ │
│ │ │ │
│ ┌───────▼───────┐ ┌──────▼───────┐ │
│ │ PostgreSQL │ │ Redis │ │
│ │ Port 5432 │ │ Port 6379 │ │
│ └───────────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Volumes │ │
│ │ postgres_data │ repo_data │ avatar_uploads │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Components
Frontend (Web)
- Technology: React + Vite + nginx
- Port: 80 (internal)
- Role: User interface
- Scaling: Static files, easily scaled horizontally
Backend (API)
- Technology: FastAPI + Python 3.11
- Port: 8000 (internal)
- Role: Business logic, API endpoints
- Scaling: Stateless, can scale horizontally
Database (PostgreSQL)
- Technology: PostgreSQL 15
- Port: 5432 (internal)
- Role: Persistent data storage
- Scaling: Vertical or read replicas
Cache (Redis)
- Technology: Redis 7
- Port: 6379 (internal)
- Role: Session storage, caching
- Scaling: Redis Cluster for high availability
Identity Provider (Authentik)
- Technology: Authentik (self-hosted)
- Port: 9443 (external), 9000 (internal)
- Role: OAuth2/OIDC authentication
- Note: Can be external service
Network Architecture
┌─────────────────────────────────────────────────────────────┐
│ Networks │
├─────────────────────────────────────────────────────────────┤
│ │
│ External Network (traefik) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Traefik │ │ Frontend │ │ API │ │
│ │ (proxy) │ │ (web) │ │ (api) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ Internal Network (backend) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ API │ │ PostgreSQL │ │ Redis │ │
│ │ (api) │ │ (postgres) │ │ (redis) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Network Security:
- External network: Exposes services to Traefik
- Internal network: Database and cache only accessible by API
- No direct database access from external network
Data Flow
Authentication Flow
User → Frontend → API → Authentik
↓
OAuth2
↓
User ← Frontend ← API ← Authentik
↓
Session Cookie
API Request Flow
User → Frontend → Traefik → API → Database
↓
Redis (cache)
Git Operations Flow
User → Frontend → API → Git Repository (filesystem)
↓
Git History/Files
Deployment Patterns
Single Server
All services on one host:
- Simple to manage
- Suitable for small teams
- Single point of failure
Multi-Server (HA)
Separate services across hosts:
- Database server
- Application servers (API + Frontend)
- Load balancer (Traefik)
- Higher availability
Kubernetes (Future)
Container orchestration:
- Auto-scaling
- Self-healing
- Rolling updates
- Resource management
Scaling Strategy
Horizontal Scaling
Stateless Services (easy to scale):
- Frontend: Multiple nginx instances
- API: Multiple FastAPI instances
Stateful Services (require care):
- Database: Read replicas, connection pooling
- Redis: Cluster mode
Vertical Scaling
Increase resources for:
- Database server (CPU, RAM, I/O)
- API server (CPU for git operations)
Backup Strategy
Automated Backups
Daily at 2 AM
├── PostgreSQL dump
├── Repository filesystem
├── User uploads (avatars)
└── Configuration files
Backup Retention
- Daily: 7 days
- Weekly: 4 weeks
- Monthly: 12 months
- Yearly: 3 years
Disaster Recovery
- Restore database from backup
- Restore repositories from backup
- Verify application functionality
- Update DNS if needed
Security Considerations
Network Security
- Internal services not exposed externally
- Database only accessible from API
- Redis only accessible from API
- SSL/TLS for all external traffic
Data Security
- Encrypted database connections
- Encrypted backups
- SSH keys encrypted at rest
- Session cookies httpOnly + Secure
Access Control
- OAuth2 authentication
- Role-based access (future)
- API rate limiting
- Audit logging (future)
Monitoring
Health Checks
API: GET /health
Database: pg_isready
Redis: redis-cli ping
Metrics
- Request rate and latency
- Error rate
- Database connections
- Disk usage
- Memory usage
Logging
- Application logs (structured JSON)
- Access logs (Traefik)
- Error logs (centralized)
- Audit logs (future)
Performance Optimization
Database
- Connection pooling (PgBouncer)
- Query optimization
- Proper indexing
- Regular VACUUM
API
- Async operations
- Caching (Redis)
- Git operation optimization
- File streaming
Frontend
- Code splitting
- Lazy loading
- Asset optimization
- CDN (future)
Troubleshooting
Common Issues
High Memory Usage:
# Check container stats
docker stats
# Restart API if needed
docker compose restart api
Database Connection Issues:
# Check PostgreSQL logs
docker compose logs postgres
# Verify connection
docker compose exec api pg_isready -h postgres
Git Operations Slow:
# Check disk I/O
iostat -x 1
# Check repository size
du -sh /data/repos/*
Migration Strategy
Version Updates
- Backup data
- Update images
- Run migrations
- Verify functionality
- Rollback if needed
Database Migrations
# Check current version
alembic current
# Upgrade
alembic upgrade head
# Downgrade if needed
alembic downgrade -1
Future Architecture
Planned Improvements
- Kubernetes deployment
- Microservices split
- Event-driven architecture
- Real-time WebSocket updates
- Multi-region deployment
- CDN integration
- Advanced monitoring (Prometheus/Grafana)
Scalability Roadmap
- Phase 1: Single server (current)
- Phase 2: Separate database server
- Phase 3: Load balanced API servers
- Phase 4: Kubernetes cluster
- Phase 5: Multi-region