Skip to main content

Deployment

SPN uses Docker Compose with Caddy for production deployment.

Architecture

┌────────────────────────────────────────┐
│              Caddy (Reverse Proxy)     │
│         Routes /api/* → Backend         │
│         Routes /*  → Frontend           │
└───────────────┬────────────────────────┘

       ┌────────┴────────┐
       ▼                 ▼
┌─────────────┐   ┌─────────────┐
│   Backend   │   │  Frontend   │
│  (FastAPI)  │   │  (Static)   │
└─────────────┘   └─────────────┘


┌─────────────┐
│ PostgreSQL  │
└─────────────┘

Prerequisites

  • Docker & Docker Compose
  • Domain name (for SSL)
  • Server with 2GB+ RAM

Quick Deploy

cd ~/spn
git pull
bash deploy.sh

Manual Deployment

1. Build and Start

docker-compose up -d --build

2. Run Migrations

docker-compose exec api alembic upgrade head

3. Verify

curl https://your-domain.com/api/v1/system/health

Environment Variables

Configure in .env:
# Production values
POSTGRES_SERVER=db
POSTGRES_PASSWORD=secure-password
SESSION_SECRET=production-secret

# Production URLs
FRONTEND_URL=https://your-domain.com
CORS_ORIGINS=https://your-domain.com

Services

ServicePortDescription
API8000FastAPI backend
PostgreSQL5432Database

SSL

Caddy automatically provisions Let’s Encrypt SSL.

Troubleshooting

View logs

docker-compose logs -f api
docker-compose logs -f frontend

Restart services

docker-compose restart api

Database issues

docker-compose exec db psql -U postgres -d spn_db