services: app: build: context: . ports: - "${APP_BIND_ADDRESS:-127.0.0.1}:${APP_PORT:-8080}:8080" env_file: - .env environment: ASPNETCORE_HTTP_PORTS: "8080" Security__RequireHttps: "${REQUIRE_HTTPS:-true}" Security__DataProtectionKeysPath: /app/keys Security__KnownProxies__0: "${REVERSE_PROXY_IP:-127.0.0.1}" Security__CookieHours: "${COOKIE_HOURS:-8}" Security__RevalidationMinutes: "${AUTH_REVALIDATION_MINUTES:-5}" Database__InitializeOnStartup: "${DATABASE_INITIALIZE_ON_STARTUP:-true}" Planner__DefaultRepetitions: "${PLANNER_DEFAULT_REPETITIONS:-10}" Planner__DefaultWorkoutName: "${PLANNER_DEFAULT_WORKOUT_NAME:-Тренировка}" Planner__DefaultWorkoutDuration: "${PLANNER_DEFAULT_WORKOUT_DURATION:-1 час}" Planner__DefaultIntensityPercent: "${PLANNER_DEFAULT_INTENSITY_PERCENT:-80}" Planner__AutosaveDelayMilliseconds: "${PLANNER_AUTOSAVE_DELAY_MS:-1200}" ConnectionStrings__TrainingDatabase: "Host=database;Database=${POSTGRES_DB:?Set POSTGRES_DB};Username=${POSTGRES_USER:?Set POSTGRES_USER};Password=${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}" Planner__DefaultWeekCount: "${PLANNER_DEFAULT_WEEK_COUNT:-4}" Planner__DefaultSetsCount: "${PLANNER_DEFAULT_SETS_COUNT:-3}" Planner__DefaultRestMinutes: "${PLANNER_DEFAULT_REST_MINUTES:-1.5}" BootstrapTrainer__UserName: "${BOOTSTRAP_TRAINER_USERNAME:-}" BootstrapTrainer__Password: "${BOOTSTRAP_TRAINER_PASSWORD:-}" volumes: - data_protection_keys:/app/keys depends_on: database: condition: service_healthy networks: - training restart: unless-stopped database: image: "${POSTGRES_IMAGE:-postgres:18}" environment: POSTGRES_DB: "${POSTGRES_DB:?Set POSTGRES_DB}" POSTGRES_USER: "${POSTGRES_USER:?Set POSTGRES_USER}" POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}" volumes: - postgres_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U \"$$POSTGRES_USER\" -d \"$$POSTGRES_DB\""] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - training restart: unless-stopped networks: training: volumes: postgres_data: data_protection_keys: