Files
netrunner-backend/docker-compose.yml
T
Kirill d4a57c0b6a docs
2026-07-02 23:13:13 +07:00

80 lines
2.5 KiB
YAML

# =====================================================================
# ЛОКАЛЬНАЯ РАЗРАБОТКА (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: