version: '3.8' services: postgres: image: postgres:16-alpine environment: POSTGRES_DB: ${DB_NAME:-mengstack} POSTGRES_USER: ${DB_USER:-postgres} POSTGRES_PASSWORD: ${DB_PASSWORD:-mengstack_dev} ports: - "${DB_PORT:-5432}:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine ports: - "${REDIS_PORT:-6379}:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 api: build: . restart: unless-stopped ports: - "${SERVER_PORT:-2222}:2222" environment: MENGSTACK_SERVER_PORT: ${SERVER_PORT:-2222} MENGSTACK_SERVER_MODE: ${SERVER_MODE:-debug} MENGSTACK_DATABASE_HOST: postgres MENGSTACK_DATABASE_PORT: 5432 MENGSTACK_DATABASE_USER: ${DB_USER:-postgres} MENGSTACK_DATABASE_PASSWORD: ${DB_PASSWORD:-mengstack_dev} MENGSTACK_DATABASE_DBNAME: ${DB_NAME:-mengstack} MENGSTACK_DATABASE_SSLMODE: disable MENGSTACK_REDIS_ADDR: redis:6379 MENGSTACK_REDIS_PASSWORD: ${REDIS_PASSWORD:-} MENGSTACK_REDIS_DB: ${REDIS_DB:-0} MENGSTACK_JWT_SECRET: ${JWT_SECRET:-change-me-in-production} MENGSTACK_JWT_ACCESS_EXPIRY_MINUTES: 30 MENGSTACK_JWT_REFRESH_EXPIRY_DAYS: 7 MENGSTACK_JWT_ISSUER: mengstack MENGSTACK_LOG_LEVEL: ${LOG_LEVEL:-debug} MENGSTACK_LOG_FORMAT: ${LOG_FORMAT:-console} depends_on: postgres: condition: service_healthy redis: condition: service_healthy volumes: pgdata: