Files
triviathang/DEPLOY.md
2026-01-12 21:37:39 -05:00

2.9 KiB

Quick Deploy Guide

Minimal steps to deploy the trivia app to production with Caddy.

Prerequisites

  • Linux server with Docker and Docker Compose installed
  • Domain name pointing to your server (e.g., trivia.torrtle.co → your server IP)
  • Port 80 and 443 open in firewall

5-Minute Deploy

1. Clone and Configure

# Clone repository
git clone <your-repo-url>
cd trivia-thang

# Configure environment
cp .env.production.example .env.production
nano .env.production  # Update with your values

Required settings in .env.production:

CORS_ORIGINS=https://trivia.torrtle.co
OIDC_ISSUER=https://auth.torrtle.co
OIDC_CLIENT_SECRET=your_secret_here
OIDC_REDIRECT_URI=https://trivia.torrtle.co/api/auth/callback
FRONTEND_URL=https://trivia.torrtle.co
SESSION_COOKIE_SECURE=true

2. Start Application

# Build and start
docker compose -f docker-compose.production.yml up -d

# Initialize database
docker compose -f docker-compose.production.yml exec backend uv run flask --app backend.app:create_app db upgrade

3. Setup Caddy (Automatic HTTPS)

# Install Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy

# Create minimal Caddyfile
sudo tee /etc/caddy/Caddyfile << 'EOF'
trivia.torrtle.co {
    reverse_proxy localhost:5001
}
EOF

# Start Caddy
sudo systemctl restart caddy

4. Done!

Visit https://trivia.torrtle.co - Caddy automatically handles HTTPS!

Verify Deployment

# Check if app is running
curl http://localhost:5001/api/health

# Check Docker containers
docker compose -f docker-compose.production.yml ps

# View logs
docker compose -f docker-compose.production.yml logs -f backend

Common Commands

# Restart application
docker compose -f docker-compose.production.yml restart

# Update application
git pull
docker compose -f docker-compose.production.yml up -d --build

# View logs
docker compose -f docker-compose.production.yml logs -f

# Stop application
docker compose -f docker-compose.production.yml down

Troubleshooting

Can't connect to HTTPS

Check Caddy logs:

sudo journalctl -u caddy -f

Caddy needs ports 80 and 443 open for Let's Encrypt challenge.

WebSocket issues

Ensure your domain's DNS is properly configured and Caddy is running. Caddy handles WebSocket upgrades automatically.

Database errors

Run migrations:

docker compose -f docker-compose.production.yml exec backend uv run flask --app backend.app:create_app db upgrade

For detailed documentation, see:

  • README.production.md - Full deployment guide
  • Caddyfile.example - Advanced Caddy configuration
  • nginx.conf.example - Alternative Nginx configuration