version: "3.8" services: postgres: image: postgres:16-alpine container_name: aegisone-postgres environment: POSTGRES_DB: aegisone POSTGRES_USER: aegisone POSTGRES_PASSWORD: aegisone_pass volumes: - pgdata:/var/lib/postgresql/data - ./sql/schema_postgresql.sql:/docker-entrypoint-initdb.d/01_schema.sql - ./sql/seed_data.sql:/docker-entrypoint-initdb.d/02_seed.sql ports: - "5432:5432" networks: - aegisone-net restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U aegisone"] interval: 10s timeout: 5s retries: 5 app: build: . container_name: aegisone-app environment: DATABASE_URL: postgresql+asyncpg://aegisone:aegisone_pass@postgres:5432/aegisone SECRET_KEY: ${SECRET_KEY:-change-me-to-random-string} SESSION_TTL: 3600 APP_ENV: production LOG_LEVEL: info depends_on: postgres: condition: service_healthy ports: - "8000:8000" volumes: - ./docs:/app/docs - ./permissions:/app/permissions - ./uploads:/app/uploads networks: - aegisone-net restart: unless-stopped volumes: pgdata: networks: aegisone-net: driver: bridge