diff --git a/README-Docker.md b/README-Docker.md index 7519355..252c723 100644 --- a/README-Docker.md +++ b/README-Docker.md @@ -174,3 +174,208 @@ services: - .:/app command: ["flask", "run", "--host", "0.0.0.0", "--port", "8000"] ``` + +## Coolify Deployment + +This application can be deployed on [Coolify](https://coolify.io) using Docker Compose. Coolify provides additional features and management capabilities for containerized applications. + +### Coolify Prerequisites + +- Coolify instance (self-hosted or cloud) +- Git repository accessible to Coolify + +### Coolify-Specific Configuration + +#### 1. Environment Variables + +Coolify automatically detects environment variables in your `docker-compose.yml` and provides a UI to manage them. Use the following syntax for better integration: + +```yaml +services: + jobs-app: + environment: + # Required variables (will show red border if empty) + - FLASK_SECRET=${FLASK_SECRET:?} + + # Required with default (prefilled but editable) + - FLASK_ENV=${FLASK_ENV:?production} + + # Optional with default + - GUNICORN_WORKERS=${GUNICORN_WORKERS:-4} +``` + +#### 2. Coolify Magic Environment Variables + +Leverage Coolify's dynamic environment variables: + +```yaml +services: + jobs-app: + environment: + # Generate FQDN for the application + - SERVICE_FQDN_JOBS_APP + + # Generate secure password for admin user + - ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN:?M11ffpgm.} + + # Generate database credentials + - DB_USER=${SERVICE_USER_DB:?jobs} + - DB_PASSWORD=${SERVICE_PASSWORD_DB:?jobdb} +``` + +#### 3. Storage Configuration + +Coolify supports advanced storage options: + +```yaml +services: + jobs-app: + volumes: + # Create empty directories + - type: bind + source: ./cache + target: /app/cache + is_directory: true + + - type: bind + source: ./logs + target: /app/logs + is_directory: true + + mysql: + volumes: + # Persistent database storage + - mysql_data:/var/lib/mysql +``` + +#### 4. Health Checks and Service Management + +```yaml +services: + jobs-app: + # Exclude from health checks if needed + exclude_from_hc: false + + # Labels for Coolify management + labels: + - coolify.managed=true + - traefik.enable=true + - "traefik.http.routers.jobs-app.rule=Host(`${SERVICE_FQDN_JOBS_APP:-localhost}`)" + - traefik.http.routers.jobs-app.entryPoints=http +``` + +#### 5. Database Configuration for Coolify + +Update your `config/settings.json` to use Coolify environment variables: + +```json +{ + "database": { + "mysql": { + "host": "mysql", + "user": "${DB_USER:-jobs}", + "password": "${DB_PASSWORD:-jobdb}", + "database": "jobs", + "port": 3306 + } + } +} +``` + +### Complete Coolify docker-compose.yml + +Here's a complete `docker-compose.yml` optimized for Coolify: + +```yaml +version: "3.8" + +services: + jobs-app: + build: . + ports: + - "8000:8000" + environment: + # Required environment variables + - FLASK_SECRET=${FLASK_SECRET:?} + - FLASK_ENV=${FLASK_ENV:?production} + + # Coolify magic variables + - SERVICE_FQDN_JOBS_APP + - ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN:?M11ffpgm.} + - DB_USER=${SERVICE_USER_DB:?jobs} + - DB_PASSWORD=${SERVICE_PASSWORD_DB:?jobdb} + + # Optional configuration + - GUNICORN_WORKERS=${GUNICORN_WORKERS:-4} + volumes: + - type: bind + source: ./cache + target: /app/cache + is_directory: true + - type: bind + source: ./logs + target: /app/logs + is_directory: true + depends_on: + - mysql + labels: + - coolify.managed=true + - traefik.enable=true + - "traefik.http.routers.jobs-app.rule=Host(`${SERVICE_FQDN_JOBS_APP:-localhost}`)" + - traefik.http.routers.jobs-app.entryPoints=http + networks: + - jobs-network + restart: unless-stopped + + mysql: + image: mysql:8.0 + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:?rootpassword} + - MYSQL_DATABASE=jobs + - MYSQL_USER=${DB_USER:-jobs} + - MYSQL_PASSWORD=${DB_PASSWORD:-jobdb} + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + - ./mysql-init:/docker-entrypoint-initdb.d + networks: + - jobs-network + +volumes: + mysql_data: + +networks: + jobs-network: + driver: bridge +``` + +### Coolify Deployment Steps + +1. **Connect Repository**: Link your Git repository to Coolify +2. **Create Service Stack**: Choose "Docker Compose" as the build pack +3. **Configure Environment Variables**: Set required variables in Coolify's UI: + - `FLASK_SECRET`: Generate a secure random string + - `FLASK_ENV`: Set to "production" + - `MYSQL_ROOT_PASSWORD`: Set a secure password +4. **Deploy**: Coolify will automatically build and deploy your application +5. **Access**: Use the generated FQDN to access your application + +### Coolify Benefits + +- **Automatic SSL**: HTTPS certificates are automatically managed +- **Environment Management**: Easy variable management through UI +- **Monitoring**: Built-in logging and health monitoring +- **Scaling**: Easy horizontal scaling +- **Backups**: Automated backup capabilities +- **Security**: Isolated networks and secure defaults + +### Troubleshooting Coolify Deployments + +1. **Environment Variables**: Check that all required variables are set in Coolify's UI +2. **Build Logs**: Review build logs for any compilation errors +3. **Network Issues**: Ensure services can communicate within the stack +4. **Storage Permissions**: Verify volume permissions are correct +5. **FQDN Configuration**: Check that the generated FQDN is accessible + +For more information, visit the [Coolify Docker Compose documentation](https://coolify.io/docs/knowledge-base/docker/compose).