/
systemsstrategyy
/
Treker
Обзор
Документация
Войти
/
systemsstrategyy
/
Treker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
docker-compose.dev.yml
122 строки
4 KB
SystemsStrategy
Initial import
02 июл 2026, 15:15
02 июл 2026, 15:15
9624ed1
Код
Авторство
О чём код?
# Development Docker Compose # Coding_Principles_v1.1 / ADR-0001 — выровнено: без MinIO, без Celery. # Run: docker compose -f docker-compose.dev.yml up -d # Stop: docker compose -f docker-compose.dev.yml down # Logs: docker compose -f docker-compose.dev.yml logs -f api services: postgres: image: postgres:16-alpine container_name: tracker_postgres environment: POSTGRES_USER: tracker POSTGRES_PASSWORD: dev_password POSTGRES_DB: tracker_dev LANG: ru_RU.UTF-8 ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data - ./infra/postgres-init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U tracker -d tracker_dev"] interval: 5s timeout: 3s retries: 5 restart: unless-stopped redis: image: redis:7-alpine container_name: tracker_redis ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 restart: unless-stopped mailhog: image: mailhog/mailhog:latest container_name: tracker_mailhog ports: - "1025:1025" # SMTP server - "8025:8025" # Web UI for inspecting emails restart: unless-stopped api: build: context: . dockerfile: infra/Dockerfile.dev container_name: tracker_api environment: # Pydantic-settings v2 ждёт env_prefix=APP_ + nested separator `__` # (см. api/core/settings.py). Поэтому DATABASE_URL без префикса # игнорируется — нужен APP_DATABASE__URL. APP_ENV: development APP_DATABASE__URL: postgresql+asyncpg://tracker:dev_password@postgres:5432/tracker_dev APP_REDIS__URL: redis://redis:6379/0 # Local FileStorage (Coding_Principles §FileStorage-абстракция) APP_FILE_STORAGE__DIR: /app/var/files # SMTP (dev — mailhog) APP_SMTP__HOST: mailhog APP_SMTP__PORT: "1025" APP_SMTP__FROM_EMAIL: noreply@tracker.local # JWT RS256 — Coding_Principles §4 APP_JWT__PRIVATE_KEY_PATH: /app/var/keys/jwt_private.pem APP_JWT__PUBLIC_KEY_PATH: /app/var/keys/jwt_public.pem APP_JWT__ACCESS_TTL_SEC: "1800" APP_JWT__REFRESH_TTL_SEC: "2592000" ports: - "8000:8000" volumes: - ./api:/app/api # workers/ нужны API на import-time с момента #126 (eager trial-sub в register # триггерит cascade `auth.service` → `NotificationService` → `workers.tasks. # notifications`). До этого `workers.*` импортировался только при defer'е # email-task'а в runtime. Без mount'а — ModuleNotFoundError при cold-start. # Issue #141. - ./workers:/app/workers - ./alembic:/app/alembic - ./alembic.ini:/app/alembic.ini - ./var:/app/var # local file storage + JWT ключи depends_on: postgres: condition: service_healthy redis: condition: service_healthy command: uvicorn api.main:app --reload --host 0.0.0.0 --port 8000 restart: unless-stopped # Procrastinate worker (Coding_Principles §5) # Postgres-backed очередь — отдельный Redis-брокер не нужен. worker: build: context: . dockerfile: infra/Dockerfile.dev container_name: tracker_worker environment: APP_ENV: development APP_DATABASE__URL: postgresql+asyncpg://tracker:dev_password@postgres:5432/tracker_dev APP_REDIS__URL: redis://redis:6379/0 APP_FILE_STORAGE__DIR: /app/var/files APP_SMTP__HOST: mailhog APP_SMTP__PORT: "1025" volumes: - ./api:/app/api - ./workers:/app/workers - ./var:/app/var depends_on: postgres: condition: service_healthy redis: condition: service_healthy command: python -m workers.procrastinate_worker restart: unless-stopped volumes: postgres_data: redis_data: