x-defaults: &defaults restart: unless-stopped logging: driver: json-file options: max-size: 100m max-file: '3' services: halo: <<: *defaults image: ${GLOBAL_REGISTRY:-}halohub/halo:${HALO_VERSION:-2.21.9} ports: - '${HALO_PORT:-8090}:8090' volumes: - halo_data:/root/.halo2 environment: - TZ=${TZ:-UTC} - SPRING_R2DBC_URL=${SPRING_R2DBC_URL:-r2dbc:pool:postgresql://halo-db:5432/halo} - SPRING_R2DBC_USERNAME=${POSTGRES_USER:-postgres} - SPRING_R2DBC_PASSWORD=${POSTGRES_PASSWORD:-postgres} - SPRING_SQL_INIT_PLATFORM=${SPRING_SQL_INIT_PLATFORM:-postgresql} - HALO_EXTERNAL_URL=${HALO_EXTERNAL_URL:-http://localhost:8090} - HALO_SECURITY_INITIALIZER_SUPERADMINUSERNAME=${HALO_ADMIN_USERNAME:-admin} - HALO_SECURITY_INITIALIZER_SUPERADMINPASSWORD=${HALO_ADMIN_PASSWORD:-} depends_on: halo-db: condition: service_healthy deploy: resources: limits: cpus: ${HALO_CPU_LIMIT:-2.0} memory: ${HALO_MEMORY_LIMIT:-2G} reservations: cpus: ${HALO_CPU_RESERVATION:-0.1} memory: ${HALO_MEMORY_RESERVATION:-512M} healthcheck: test: [CMD, wget, --no-verbose, --tries=1, --spider, 'http://localhost:8090/actuator/health'] interval: 30s timeout: 10s retries: 3 start_period: 60s halo-db: <<: *defaults image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-17.2-alpine3.21} environment: - TZ=${TZ:-UTC} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - POSTGRES_DB=${POSTGRES_DB:-halo} - PGUSER=${POSTGRES_USER:-postgres} volumes: - halo_db_data:/var/lib/postgresql/data healthcheck: test: [CMD-SHELL, pg_isready] interval: 10s timeout: 5s retries: 5 start_period: 30s deploy: resources: limits: cpus: ${HALO_DB_CPU_LIMIT:-1.0} memory: ${HALO_DB_MEMORY_LIMIT:-1G} reservations: cpus: ${HALO_DB_CPU_RESERVATION:-0.1} memory: ${HALO_DB_MEMORY_RESERVATION:-256M} volumes: halo_data: halo_db_data: