# ===================================================================== # ЛОКАЛЬНАЯ РАЗРАБОТКА (fully-dockerized, hot-reload) # make dev — поднять весь стек (db + redis + app с авто-перекомпиляцией) # Приложение: http://localhost:8080 (health: /health, ready: /health/ready) # Прод-стек живёт отдельно в docker-compose.prod.yml. # ===================================================================== services: app: build: context: . dockerfile: Dockerfile.dev container_name: netrunner-app-dev env_file: - .env.dev ports: - "8080:8080" volumes: # Исходники монтируем внутрь — cargo-watch ловит изменения и перезапускает. - ./src:/app/src - ./migrations:/app/migrations - ./templates:/app/templates - ./Cargo.toml:/app/Cargo.toml - ./Cargo.lock:/app/Cargo.lock - ./frontend/dist:/app/frontend/dist - ./keys:/app/keys:ro # Кеши, чтобы не перекомпилировать весь мир при каждом старте. - cargo_registry:/usr/local/cargo/registry - target_cache:/app/target # Сначала прогоняем миграции, затем запускаем watch-перекомпиляцию. command: sh -c "cargo run -- --migrate && cargo watch -x run" restart: on-failure depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - netrunner_dev_grid db: image: postgres:16-alpine container_name: netrunner-db-dev environment: POSTGRES_USER: ${DB_USER:-netrunner_admin} POSTGRES_PASSWORD: ${DB_PASSWORD:-dev_root_123} POSTGRES_DB: ${DB_NAME:-netrunner} ports: - "5432:5432" volumes: - netrunner_dev_db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-netrunner_admin} -d ${DB_NAME:-netrunner}"] interval: 5s timeout: 5s retries: 10 networks: - netrunner_dev_grid redis: image: redis:7-alpine container_name: netrunner-redis-dev ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 networks: - netrunner_dev_grid networks: netrunner_dev_grid: driver: bridge volumes: netrunner_dev_db: cargo_registry: target_cache: