services: postgres: image: postgres:18-alpine container_name: b2bcall-postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} ports: - "127.0.0.1:5432:5432" volumes: - postgres_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 10 redis: image: redis:7-alpine container_name: b2bcall-redis restart: unless-stopped command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"] ports: - "127.0.0.1:6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD} ping | grep -q PONG"] interval: 5s timeout: 5s retries: 10 freeswitch: build: context: ./infrastructure/freeswitch secrets: - freeswitch_pat container_name: b2bcall-freeswitch restart: unless-stopped environment: ESL_PASSWORD: ${ESL_PASSWORD} # Nenhuma porta publicada no host: SIP/RTP ainda não têm troncos reais # configurados, e o Event Socket (8021) só deve ser alcançável por outros # containers na rede interna do compose (agente.md secao 22). healthcheck: test: ["CMD-SHELL", "fs_cli -p \"$$ESL_PASSWORD\" -x status | grep -q 'is ready'"] interval: 10s timeout: 5s retries: 10 start_period: 20s secrets: freeswitch_pat: environment: FREESWITCH_PAT volumes: postgres_data: redis_data: