services: app: build: context: . dockerfile: ./be/docker/common/unified/Dockerfile platforms: - linux/amd64 - linux/arm64 image: git.koppkb.com/topaz/sutera:33a53e08a641152f255f5c3fa27765200add4f45 container_name: sutera-app-training restart: unless-stopped ports: - "${APP_PORT:-80}:80" environment: - APP_ENV=training - APP_DEBUG=true - DB_HOST=postgres - DB_PORT=${DB_PORT:-5432} - DB_DATABASE=${DB_DATABASE} - DB_USERNAME=${DB_USERNAME} - DB_PASSWORD=${DB_PASSWORD} - REDIS_HOST=redis - REDIS_PASSWORD=${REDIS_PASSWORD} - CACHE_DRIVER=redis - SESSION_DRIVER=redis - QUEUE_CONNECTION=redis volumes: - app-storage-training:/var/www/storage - app-logs-training:/var/www/storage/logs - ./.env.training:/var/www/.env:ro - ./be/docker/training/nginx/nginx.conf:/etc/nginx/nginx.conf:ro networks: - sutera-training-network depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Redis for caching and sessions redis: image: redis:8 container_name: sutera-redis-training restart: unless-stopped volumes: - redis-data-training:/data - ./redis-config/redis.conf:/usr/local/etc/redis/redis.conf:ro command: redis-server /usr/local/etc/redis/redis.conf networks: - sutera-training-network healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 10s timeout: 5s retries: 3 start_period: 10s logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Optional: Database (only if you want to run DB on same server for training) # Uncomment if you want to run MySQL on the same server for training postgres: image: postgres:17 container_name: sutera-postgres-training restart: unless-stopped ports: - "${DB_PORT:-5432}:5432" environment: - POSTGRES_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - POSTGRES_DATABASE=${DB_DATABASE} - POSTGRES_USER=${DB_USERNAME} - POSTGRES_PASSWORD=${DB_PASSWORD} volumes: - postgres-data-training:/var/lib/postgres - ./be/docker/postgres/conf.d:/etc/postgres/conf.d:ro networks: - sutera-training-network healthcheck: test: ["CMD", "postgres", "ping", "-h", "localhost"] interval: 15s timeout: 10s retries: 5 start_period: 30s logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: sutera-training-network: driver: bridge volumes: app-storage-training: driver: local app-logs-training: driver: local redis-data-training: driver: local postgres-data-training: driver: local