services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: port_nimara_crm POSTGRES_USER: ${DB_USER:-crm} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - pgdata:/var/lib/postgresql/data - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/01-init.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-crm} -d port_nimara_crm"] interval: 10s timeout: 5s retries: 5 networks: - internal redis: image: redis:7-alpine command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redisdata:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 10s timeout: 5s retries: 5 networks: - internal crm-app: build: context: . dockerfile: Dockerfile env_file: .env depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"] interval: 15s timeout: 5s retries: 3 networks: - internal crm-worker: build: context: . dockerfile: Dockerfile.worker env_file: .env depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - internal nginx: image: nginx:alpine ports: - "443:443" - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/certs:/etc/nginx/certs:ro depends_on: crm-app: condition: service_healthy networks: - internal volumes: pgdata: redisdata: networks: internal: driver: bridge