- Created architecture overview in development/architecture.md - Added installation guide in getting-started/installation.md - Developed user guide with detailed instructions in user-guide/overview.md, user-guide/teams.md, user-guide/qr-codes.md - Implemented social login setup documentation in social_login_setup.md - Updated index.md to include links to new documentation sections - Configured mkdocs.yml for site structure and theme - Added requirements.txt for documentation dependencies
7.1 KiB
Docker Deployment
This guide covers deploying LeagueLedger using Docker and Docker Compose, which is the recommended approach for both development and production environments.
Prerequisites
Before deploying LeagueLedger with Docker, ensure you have:
- Docker: Version 20.10.0 or higher
- Docker Compose: Version 2.0.0 or higher
- Git: For cloning the repository (optional)
- Basic Docker knowledge: Understanding of containers and Docker Compose
Quick Deployment
For a quick deployment using default settings:
# Clone the repository
git clone https://github.com/yourusername/leagueledger.git
cd leagueledger
# Create and configure the environment file
cp .env.example .env
# Edit the .env file with your preferred text editor
# Start the containers
docker-compose up -d
Docker Compose Configuration
LeagueLedger's Docker setup includes multiple services defined in docker-compose.yml:
Services Overview
- app: The main LeagueLedger application
- db: MySQL database for persistent storage
- phpmyadmin: Web interface for database management
- mailpit: Email testing service that captures all outgoing emails
Important Configuration Parameters
Application Service
app:
build: .
container_name: pubquiz_app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
# Database configuration
DB_HOST: "db"
DB_PORT: "3306"
DB_NAME: "pubquiz_db"
DB_USER: "pubquiz_user"
DB_PASS: "pubquiz_pass"
# ... other environment variables
ports:
- "8000:8000"
volumes:
- ./:/app:delegated
Database Service
db:
image: mysql:8.0
container_name: pubquiz_mysql
restart: always
environment:
MYSQL_DATABASE: "pubquiz_db"
MYSQL_USER: "pubquiz_user"
MYSQL_PASSWORD: "pubquiz_pass"
MYSQL_ROOT_PASSWORD: "root_pass"
ports:
- "3306:3306"
# ... other settings
Environment Configuration
The .env file contains important configuration options:
# Database Configuration
DATABASE_URL=mysql+pymysql://pubquiz_user:pubquiz_pass@db:3306/pubquiz_db
# Security
SECRET_KEY=your-secure-secret-key
# Email Configuration
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-email-password
MAIL_FROM=noreply@example.com
MAIL_PORT=587
MAIL_SERVER=smtp.example.com
MAIL_TLS=True
MAIL_SSL=False
MAIL_FROM_NAME=LeagueLedger
# OAuth Configuration
# ... provider-specific settings
Production Deployment Considerations
For production deployments, make the following adjustments:
1. Secure Database Configuration
Update the MySQL environment variables in docker-compose.yml:
db:
environment:
MYSQL_DATABASE: "your_production_db"
MYSQL_USER: "your_production_user"
MYSQL_PASSWORD: "your_strong_password"
MYSQL_ROOT_PASSWORD: "your_very_strong_root_password"
2. Persistent Storage
Add volumes for persistent data storage:
db:
volumes:
- leagueledger_db_data:/var/lib/mysql
volumes:
leagueledger_db_data:
3. Email Configuration
For production, replace Mailpit with a real SMTP server in your .env file:
MAIL_USERNAME=your-production-email@yourdomain.com
MAIL_PASSWORD=your-email-password
MAIL_FROM=noreply@yourdomain.com
MAIL_PORT=587
MAIL_SERVER=smtp.yourdomain.com
MAIL_TLS=True
MAIL_SSL=False
MAIL_FROM_NAME=LeagueLedger
4. HTTPS Setup
For secure access, you should add an HTTPS proxy such as Traefik or Nginx:
services:
app:
# ... existing configuration
labels:
- "traefik.enable=true"
- "traefik.http.routers.leagueledger.rule=Host(`leagueledger.yourdomain.com`)"
- "traefik.http.routers.leagueledger.entrypoints=websecure"
- "traefik.http.routers.leagueledger.tls.certresolver=myresolver"
traefik:
image: traefik:v2.9
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik/config:/etc/traefik"
- "./traefik/letsencrypt:/letsencrypt"
# ... additional Traefik configuration
5. OAuth Callback URLs
Update the OAuth provider configuration in your .env file to use your production domain:
# OAuth Callback URLs
LEAGUELEDGER_BASE_URL=https://leagueledger.yourdomain.com
Container Management
Starting Services
# Start all services in the background
docker-compose up -d
# Start a specific service
docker-compose up -d app
Stopping Services
# Stop all services
docker-compose down
# Stop services without removing containers
docker-compose stop
Viewing Logs
# View logs for all services
docker-compose logs
# Follow logs for a specific service
docker-compose logs -f app
# See the last 100 lines of logs
docker-compose logs --tail=100 app
Restarting Services
# Restart all services
docker-compose restart
# Restart a specific service
docker-compose restart app
Database Management
Accessing the Database
You can access the database using phpMyAdmin at:
http://localhost:8001
Or connect directly to MySQL:
docker-compose exec db mysql -upubquiz_user -ppubquiz_pass pubquiz_db
Database Backups
Create a backup:
docker-compose exec db mysqldump -uroot -proot_pass pubquiz_db > backup_$(date +%Y-%m-%d_%H-%M-%S).sql
Restore a backup:
cat backup_file.sql | docker-compose exec -T db mysql -uroot -proot_pass pubquiz_db
Troubleshooting
Common Issues
Container Fails to Start
Check the logs:
docker-compose logs app
Database Connection Issues
Verify the database is running and healthy:
docker-compose ps db
Ensure environment variables are correct:
docker-compose exec app env | grep DB_
Email Not Working
Check Mailpit interface at http://localhost:8025 to see if emails are being captured.
If using a real SMTP server, verify credentials and connectivity:
docker-compose exec app python -c "from app.utils.mail import test_mail_connection; test_mail_connection()"
Updating LeagueLedger
To update to a newer version:
# Pull the latest changes
git pull
# Rebuild and restart containers
docker-compose up -d --build
Scaling for Production
For high-traffic production environments, consider:
- Horizontal Scaling: Run multiple instances behind a load balancer
- Database Scaling: Move the database to a managed service
- Redis Cache: Add a Redis container for improved performance
- CDN Integration: Use a CDN for static assets
A more advanced docker-compose.prod.yml might include:
version: "3.9"
services:
app:
deploy:
replicas: 3
environment:
REDIS_URL: "redis://redis:6379/0"
redis:
image: redis:7.0
volumes:
- redis_data:/data
db:
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
redis_data:
Next Steps
- Production Setup: Additional production environment considerations
- Scaling: Detailed guidance on scaling LeagueLedger
- Backup & Recovery: Comprehensive backup strategies