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
267 lines
4.8 KiB
Markdown
267 lines
4.8 KiB
Markdown
# Docker Deployment Guide
|
|
|
|
## Overview
|
|
|
|
Headquarter is deployed as a multi-container Docker application using Docker Compose. The stack includes:
|
|
|
|
- **API** (FastAPI/Python)
|
|
- **Web** (React/Vite)
|
|
- **PostgreSQL** (Database)
|
|
- **Redis** (Cache)
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Docker Engine 20.10+
|
|
- Docker Compose 2.0+
|
|
- 2GB RAM minimum
|
|
- 10GB disk space
|
|
|
|
### Development Deployment
|
|
|
|
```bash
|
|
# Clone repository
|
|
git clone https://github.com/your-org/headquarter.git
|
|
cd headquarter
|
|
|
|
# Copy environment file
|
|
cp .env.example .env
|
|
# Edit .env with your settings
|
|
|
|
# Start all services
|
|
docker compose up -d
|
|
|
|
# Run database migrations
|
|
docker compose exec api alembic upgrade head
|
|
|
|
# Access the app
|
|
# Frontend: http://localhost:5173
|
|
# API: http://localhost:8000
|
|
```
|
|
|
|
### Production Deployment
|
|
|
|
```bash
|
|
# Use production compose file
|
|
cp .env.example .env
|
|
# Configure production values in .env
|
|
|
|
docker compose -f docker-compose.traefik.yml up -d
|
|
|
|
# Run migrations
|
|
docker compose -f docker-compose.traefik.yml exec api alembic upgrade head
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Environment Variables
|
|
|
|
Required variables:
|
|
|
|
```bash
|
|
# Domains
|
|
API_DOMAIN=api.yourdomain.com
|
|
WEB_DOMAIN=app.yourdomain.com
|
|
|
|
# Database
|
|
POSTGRES_USER=headquarter
|
|
POSTGRES_PASSWORD=secure-password
|
|
POSTGRES_DB=headquarter
|
|
|
|
# Authentik OAuth
|
|
AUTHENTIK_DOMAIN=auth.yourdomain.com
|
|
AUTHENTIK_CLIENT_ID=your-client-id
|
|
AUTHENTIK_CLIENT_SECRET=your-client-secret
|
|
AUTHENTIK_APPLICATION_SLUG=headquarter
|
|
|
|
# Session
|
|
SESSION_SECRET=your-session-secret-min-32-chars
|
|
|
|
# Storage
|
|
REPO_BASE_PATH=/data/repos
|
|
```
|
|
|
|
### Volume Mounts
|
|
|
|
| Volume | Container Path | Purpose |
|
|
|--------|---------------|---------|
|
|
| postgres_data | /var/lib/postgresql/data | Database persistence |
|
|
| repo_data | /data/repos | Git repositories |
|
|
| avatar_uploads | /app/uploads | User avatars |
|
|
|
|
## Docker Compose Files
|
|
|
|
### docker-compose.yml (Development)
|
|
|
|
Standard development setup with:
|
|
- Hot reload for API
|
|
- Vite dev server for frontend
|
|
- Direct port access
|
|
- Local PostgreSQL
|
|
|
|
### docker-compose.traefik.yml (Production)
|
|
|
|
Production setup with:
|
|
- Traefik reverse proxy
|
|
- Let's Encrypt SSL
|
|
- External Traefik network
|
|
- Optimized builds
|
|
|
|
## SSL/TLS
|
|
|
|
### Development
|
|
Self-signed certificates or HTTP only.
|
|
|
|
### Production
|
|
Automatic Let's Encrypt certificates via Traefik.
|
|
|
|
```bash
|
|
# Traefik labels for SSL
|
|
traefik.http.routers.api.tls=true
|
|
traefik.http.routers.api.tls.certresolver=letsencrypt
|
|
```
|
|
|
|
## Health Checks
|
|
|
|
All services include health checks:
|
|
|
|
```yaml
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
```
|
|
|
|
## Backup and Restore
|
|
|
|
### Database Backup
|
|
|
|
```bash
|
|
# Automated daily backup
|
|
docker compose exec postgres pg_dump -U headquarter headquarter > backup.sql
|
|
|
|
# Restore
|
|
docker compose exec -T postgres psql -U headquarter < backup.sql
|
|
```
|
|
|
|
### Repository Backup
|
|
|
|
```bash
|
|
# Backup repos volume
|
|
docker run --rm -v headquarter_repo_data:/data -v $(pwd):/backup alpine tar czf /backup/repos.tar.gz /data
|
|
|
|
# Restore
|
|
docker run --rm -v headquarter_repo_data:/data -v $(pwd):/backup alpine tar xzf /backup/repos.tar.gz -C /
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# All services
|
|
docker compose logs -f
|
|
|
|
# Specific service
|
|
docker compose logs -f api
|
|
|
|
# Last 100 lines
|
|
docker compose logs --tail=100 api
|
|
```
|
|
|
|
### Resource Usage
|
|
|
|
```bash
|
|
# Container stats
|
|
docker stats
|
|
|
|
# Disk usage
|
|
docker system df -v
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Database connection failed**
|
|
```bash
|
|
# Check PostgreSQL is running
|
|
docker compose ps
|
|
|
|
# Check logs
|
|
docker compose logs postgres
|
|
|
|
# Verify credentials in .env match
|
|
```
|
|
|
|
**Migrations failing**
|
|
```bash
|
|
# Check current migration version
|
|
docker compose exec api alembic current
|
|
|
|
# Manual upgrade
|
|
docker compose exec api alembic upgrade head
|
|
```
|
|
|
|
**Permission denied on repos**
|
|
```bash
|
|
# Fix permissions
|
|
docker compose exec api chown -R appuser:appuser /data/repos
|
|
```
|
|
|
|
## Updates
|
|
|
|
### Rolling Update
|
|
|
|
```bash
|
|
# Pull latest images
|
|
docker compose pull
|
|
|
|
# Restart with new images
|
|
docker compose up -d
|
|
|
|
# Run migrations if needed
|
|
docker compose exec api alembic upgrade head
|
|
```
|
|
|
|
### Zero-Downtime Update
|
|
|
|
```bash
|
|
# Scale API to 2 instances
|
|
docker compose up -d --scale api=2
|
|
|
|
# Update one instance at a time
|
|
# (Requires load balancer configuration)
|
|
```
|
|
|
|
## Security Best Practices
|
|
|
|
1. **Use strong passwords** for database and session secret
|
|
2. **Enable HTTPS** in production
|
|
3. **Keep images updated** with security patches
|
|
4. **Use read-only volumes** where possible
|
|
5. **Limit container capabilities**
|
|
6. **Use secrets management** for sensitive data
|
|
|
|
```yaml
|
|
# Example security hardening
|
|
api:
|
|
read_only: true
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
cap_drop:
|
|
- ALL
|
|
cap_add:
|
|
- CHOWN
|
|
- SETGID
|
|
- SETUID
|
|
```
|
|
|
|
## Resources
|
|
|
|
- [Docker Documentation](https://docs.docker.com/)
|
|
- [Docker Compose Reference](https://docs.docker.com/compose/)
|
|
- [Traefik Documentation](https://doc.traefik.io/traefik/)
|