2.8 KiB
2.8 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 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 db upgrade
For detailed documentation, see:
README.production.md- Full deployment guideCaddyfile.example- Advanced Caddy configurationnginx.conf.example- Alternative Nginx configuration