version: '3.8'
services:
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
restart: unless-stopped
network_mode: host
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
network_mode: host
app:
network_mode: host
build:
context: .
dockerfile: Dockerfile
command: /usr/local/bin/gunicorn mywebdav.main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000
volumes:
- app_data:/app/data # For uploaded files
environment:
DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
REDIS_URL: redis://redis:6379/0
SECRET_KEY: ${SECRET_KEY}
DOMAIN_NAME: ${DOMAIN_NAME}
# Add other environment variables as needed
depends_on:
- db
- redis
restart: unless-stopped
nginx:
image: nginx:stable-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- certbot_certs:/etc/letsencrypt
- app_data:/app/data # Serve static files from here
depends_on:
- app
restart: unless-stopped
certbot:
image: certbot/certbot
volumes:
- certbot_certs:/etc/letsencrypt
- ./certbot/conf:/etc/nginx/conf.d
command: certonly --webroot --webroot-path=/var/www/certbot --email ${CERTBOT_EMAIL} --agree-tos --no-eff-email -d ${DOMAIN_NAME}
depends_on:
- nginx
environment:
DOMAIN_NAME: ${DOMAIN_NAME}
CERTBOT_EMAIL: ${CERTBOT_EMAIL}
volumes:
postgres_data:
redis_data:
app_data:
certbot_certs: