services: postgres-db: image: kartoza/postgis:12.0 ports: - 5432:5432 volumes: - postgres_data:/var/lib/postgresql - ./custom-postgresql.conf:/etc/postgresql/12/main/postgresql.conf - ./custom-pg_hba.conf:/etc/postgresql/12/main/pg_hba.conf - ./rogaining.sql:/sql/rogaining.sql - ./sqls:/sqls - ./create_location2025_table.sql:/sql/create_location2025_table.sql environment: - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASS=${POSTGRES_PASS} - POSTGRES_DBNAME=${POSTGRES_DBNAME} - POSTGRES_MAX_CONNECTIONS=600 deploy: resources: limits: memory: 2G reservations: memory: 1G healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DBNAME}"] interval: 30s timeout: 10s retries: 5 start_period: 30s restart: "on-failure" networks: - rog-api app: build: context: . dockerfile: Dockerfile.gdal command: bash -c "./wait-for-postgres.sh postgres-db && gunicorn config.wsgi:application --bind 0.0.0.0:8000" volumes: - .:/app - static_volume:/app/static - media_volume:/app/media env_file: - .env environment: - MPLBACKEND=Agg - MATPLOTLIB_BACKEND=Agg - PYTHONWARNINGS=ignore - GDAL_DISABLE_READDIR_ON_OPEN=YES healthcheck: test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8000')\" || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 60s restart: "on-failure" depends_on: postgres-db: condition: service_healthy networks: - rog-api nginx: image: nginx:1.19 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - static_volume:/app/static - media_volume:/app/media - ./supervisor/html:/usr/share/nginx/html ports: - 8100:80 depends_on: - app networks: - rog-api networks: rog-api: driver: bridge volumes: postgres_data: static_volume: media_volume: