services: db: image: postgres:15 container_name: cemetery_db restart: always environment: POSTGRES_DB: cemeterymap POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} volumes: - postgres_data:/var/lib/postgresql/data networks: - web backend: build: context: ../backend image: ${BACKEND_IMAGE:-cemetery/backend:latest} container_name: cemetery_backend depends_on: - db environment: ENVIRONMENT: production DATABASE_URL: postgresql+psycopg2://postgres:${POSTGRES_PASSWORD:-postgres}@db:5432/cemeterymap JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me} ADMIN_ORIGIN: ${ADMIN_ORIGIN:-https://cemeterymap.ru} MOBILE_ORIGIN: ${MOBILE_ORIGIN:-http://localhost} UPLOADS_GRAVES_DIR: /data/uploads/graves UPLOADS_TEMP_DIR: /data/uploads/tmp FCM_SERVER_KEY: ${FCM_SERVER_KEY:-} volumes: - uploads:/data/uploads networks: - web ports: - "127.0.0.1:8000:8000" admin: build: context: ../admin image: ${ADMIN_IMAGE:-cemetery/admin:latest} container_name: cemetery_admin networks: - web ports: - "127.0.0.1:8081:80" prometheus: image: prom/prometheus:v2.54.1 container_name: cemetery_prometheus volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro ports: - "9090:9090" networks: - web grafana: image: grafana/grafana:10.4.5 container_name: cemetery_grafana environment: - GF_SECURITY_ADMIN_USER=${GRAFANA_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} ports: - "3001:3000" networks: - web depends_on: - prometheus volumes: postgres_data: uploads: networks: web: driver: bridge