flask-base/docker-compose.yml

87 lines
2.0 KiB
YAML

version: "3.8"
services:
db:
image: "postgres:15"
env_file:
- .env
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: flaskuser
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: flaskdb
healthcheck:
test: ["CMD-SHELL", "pg_isready -U flaskuser -d flaskdb"]
interval: 5s
timeout: 5s
retries: 5
start_period: 10s
ports:
- "5432:5432"
networks:
- app-network
web:
build: .
env_file:
- .env
depends_on:
db:
condition: service_healthy
ports:
- "5001:5001"
environment:
- FLASK_ENV=production
- FLASK_SECRET_KEY=${FLASK_SECRET_KEY}
- DB_PASSWORD=${DB_PASSWORD}
volumes:
- ./instance:/app/instance
- ./static/floor_maps:/app/static/floor_maps
command: sh -c "sleep 2 && flask init-db && gunicorn --bind 0.0.0.0:5001 --workers 4 app:app"
networks:
- app-network
nginx-proxy-manager:
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
- "81:81" # Admin Web UI
- "80:80" # HTTP proxy
- "443:443" # HTTPS proxy
environment:
- DB_MYSQL_HOST=nginx-proxy-manager-db
- DB_MYSQL_PORT=3306
- DB_MYSQL_USER=nginxproxyadmin
- DB_MYSQL_PASSWORD=nginxproxyadminpassword
- DB_MYSQL_NAME=nginxproxyadmin
volumes:
- npm_data:/data
- /etc/ssl/certs:/etc/ssl/certs:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
labels:
- "com.github.jcmall.nginx-proxy-manager=true"
networks:
- app-network
nginx-proxy-manager-db:
image: "mysql:8.0"
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=nginxproxyadmin
- MYSQL_USER=nginxproxyadmin
- MYSQL_PASSWORD=nginxproxyadminpassword
volumes:
- npm_db_data:/var/lib/mysql
networks:
- app-network
networks:
app-network:
driver: bridge
volumes:
postgres_data:
npm_data:
npm_db_data: