# SPDX-License-Identifier: AGPL-3.0-or-later name: selfphoneng # Container logs (docker compose logs): 3 files of 10 MB each, then the oldest goes. x-logging: &logging driver: json-file options: { max-size: 10m, max-file: '3' } x-shared-volumes: &shared-volumes - ./data/asterisk-generated:/etc/asterisk/selfphoneng - ./data/voicemail:/var/spool/asterisk/voicemail - ./data/recordings:/var/spool/asterisk/monitor - ./data/sounds-custom:/var/lib/asterisk/sounds/custom - ./data/moh:/var/lib/asterisk/moh services: postgres: image: postgres:18-alpine restart: unless-stopped logging: *logging environment: POSTGRES_DB: selfphoneng POSTGRES_USER: selfphoneng POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set in .env} volumes: - ./data/postgres:/var/lib/postgresql # PG 18 images keep data in /var/lib/postgresql/18/docker; mount the parent, NOT .../data ports: - '127.0.0.1:${POSTGRES_PORT:-5433}:5432' healthcheck: test: ['CMD-SHELL', 'pg_isready -U selfphoneng -d selfphoneng'] interval: 5s retries: 20 asterisk: build: context: ./asterisk args: ASTERISK_UID: ${APP_UID:-1000} ASTERISK_GID: ${APP_GID:-1000} restart: unless-stopped logging: *logging network_mode: host environment: AMI_SECRET: ${AMI_SECRET:?set in .env} TZ: ${TZ:-America/Chicago} volumes: - ./data/asterisk-generated:/etc/asterisk/selfphoneng - ./data/voicemail:/var/spool/asterisk/voicemail - ./data/recordings:/var/spool/asterisk/monitor - ./data/sounds-custom:/var/lib/asterisk/sounds/custom - ./data/moh:/var/lib/asterisk/moh - ./data/astdb:/var/lib/asterisk/db - ./data/asterisk-logs:/var/log/asterisk - ./data/tls:/var/lib/selfphoneng/tls:ro # SIP TLS cert (M11-T2): fullchain.pem + privkey.pem api: build: context: . dockerfile: apps/api/Dockerfile restart: unless-stopped logging: *logging network_mode: host user: '${APP_UID:-1000}:${APP_GID:-1000}' depends_on: postgres: { condition: service_healthy } asterisk: { condition: service_started } env_file: .env environment: DATABASE_URL: postgres://selfphoneng:${POSTGRES_PASSWORD}@127.0.0.1:${POSTGRES_PORT:-5433}/selfphoneng AMI_HOST: 127.0.0.1 AMI_PORT: '5038' AMI_USERNAME: selfphoneng volumes: - ./data/asterisk-generated:/etc/asterisk/selfphoneng - ./data/voicemail:/var/spool/asterisk/voicemail - ./data/recordings:/var/spool/asterisk/monitor - ./data/sounds-custom:/var/lib/asterisk/sounds/custom - ./data/moh:/var/lib/asterisk/moh - ./data/backups:/var/lib/selfphoneng/backups - ./data/tls:/var/lib/selfphoneng/tls:ro caddy: image: caddy:2 profiles: ['caddy'] restart: unless-stopped logging: *logging network_mode: host environment: PUBLIC_HOSTNAME: ${PUBLIC_HOSTNAME:?set in .env} volumes: - ./deploy/caddy/Caddyfile:/etc/caddy/Caddyfile:ro - ./data/caddy:/data