services: db: image: postgres:15-alpine container_name: metatron_erp_db_prod restart: always environment: POSTGRES_DB: ${POSTGRES_DB:-metatron_aca_erp} POSTGRES_USER: ${POSTGRES_USER:-odoo} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - prod_pgdata:/var/lib/postgresql/data networks: - internal_network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-odoo} -d ${POSTGRES_DB:-metatron_aca_erp}"] interval: 10s timeout: 5s retries: 5 start_period: 10s logging: driver: "json-file" options: max-size: "50m" max-file: "5" odoo: image: odoo:19.0 container_name: metatron_erp_app_prod restart: always depends_on: db: condition: service_healthy environment: HOST: db PORT: 5432 USER: ${POSTGRES_USER:-odoo} PASSWORD: ${POSTGRES_PASSWORD} volumes: - prod_odoo_data:/var/lib/odoo - ../addons:/mnt/extra-addons:ro - ./odoo.prod.conf:/etc/odoo/odoo.conf:ro command: odoo -c /etc/odoo/odoo.conf networks: - internal_network - proxy_network healthcheck: test: ["CMD-SHELL", "curl -f http://127.0.0.1:8069/web/health || exit 1"] interval: 15s timeout: 10s retries: 5 start_period: 30s logging: driver: "json-file" options: max-size: "50m" max-file: "5" nginx: image: nginx:alpine container_name: metatron_erp_nginx_prod restart: always depends_on: odoo: condition: service_healthy ports: - "80:80" - "443:443" volumes: - ./nginx/metatron_erp.conf:/etc/nginx/conf.d/default.conf:ro - ./certs:/etc/nginx/certs:ro networks: - proxy_network logging: driver: "json-file" options: max-size: "50m" max-file: "5" networks: internal_network: internal: true proxy_network: driver: bridge volumes: prod_pgdata: prod_odoo_data: