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: