Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ BACKEND_BASE_DOCKERFILE := projects/backend/Dockerfile.base
BACKEND_BASE_HASH := $(shell sha256sum $(BACKEND_BASE_DOCKERFILE) 2>/dev/null | awk '{print $$1}')
BACKEND_DEV_SERVICES := auth-service experiment-service telemetry-ingest-service
# All services managed by `make dev-*` targets
DEV_ALL_SERVICES := postgres redis auth-service experiment-service telemetry-ingest-service auth-proxy experiment-portal sensor-simulator loki alloy grafana
DEV_ALL_SERVICES := postgres redis auth-service experiment-service telemetry-ingest-service config-service auth-proxy experiment-portal sensor-simulator loki alloy grafana
# Default dev credentials for `make dev-seed`
DEV_ADMIN_USER ?= admin
DEV_ADMIN_EMAIL ?= admin@example.com
Expand Down Expand Up @@ -679,6 +679,25 @@ script-migrate:
script-init: script-create-db script-migrate
@echo "✅ Script-service инициализирован"

# Создание базы данных config_db (если не существует)
config-create-db:
@echo "Создание базы данных config_db..."
@$(DOCKER_COMPOSE) exec -T postgres psql -U postgres -d postgres -c "SELECT 1 FROM pg_database WHERE datname = 'config_db'" | grep -q 1 && \
echo "✅ База данных config_db уже существует" || \
($(DOCKER_COMPOSE) exec -T postgres psql -U postgres -d postgres -c "CREATE DATABASE config_db;" && \
echo "✅ База данных config_db создана")

# Применение миграций config-service
config-migrate:
@echo "Применение миграций config-service..."
@$(DOCKER_COMPOSE) exec -T config-service python -m bin.migrate --database-url "$${CONFIG_DATABASE_URL:-postgresql://config_user:config_password@postgres:5432/config_db}" || \
$(DOCKER_COMPOSE) exec config-service python -m bin.migrate --database-url "$${CONFIG_DATABASE_URL:-postgresql://config_user:config_password@postgres:5432/config_db}"
@echo "✅ Миграции config-service применены"

# Инициализация config-service (создание БД + миграции)
config-init: config-create-db config-migrate
@echo "✅ Config-service инициализирован"

# ============================================
# Production Deploy (Yandex Cloud)
# ============================================
Expand Down
52 changes: 52 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ services:
EXPERIMENT_DB_PASSWORD: ${EXPERIMENT_DB_PASSWORD:-experiment_password}
SCRIPT_DB_USER: ${SCRIPT_DB_USER:-script_user}
SCRIPT_DB_PASSWORD: ${SCRIPT_DB_PASSWORD:-script_password}
CONFIG_DB_USER: ${CONFIG_DB_USER:-config_user}
CONFIG_DB_PASSWORD: ${CONFIG_DB_PASSWORD:-config_password}
ports:
- "${POSTGRES_PORT:-5433}:5432"
volumes:
Expand Down Expand Up @@ -135,6 +137,22 @@ services:
timeout: 5s
retries: 5

# Config DB migrations — запускается один раз перед config-service
config-migrate:
build:
context: ./projects/backend
dockerfile: services/config-service/Dockerfile
container_name: config-migrate
environment:
- DATABASE_URL=${CONFIG_DATABASE_URL:-postgresql://config_user:config_password@postgres:5432/config_db}
command: ["python", "-m", "bin.migrate"]
depends_on:
postgres:
condition: service_healthy
networks:
- experiment-tracking-network
restart: "no"

# Auth DB migrations — запускается один раз перед auth-service
auth-migrate:
build:
Expand Down Expand Up @@ -318,6 +336,40 @@ services:
retries: 3
start_period: 40s

# Config Service - runtime configuration (feature flags, QoS, kill-switches)
config-service:
build:
context: ./projects/backend
dockerfile: services/config-service/Dockerfile
container_name: config-service
env_file:
- .env
environment:
- DATABASE_URL=${CONFIG_DATABASE_URL:-postgresql://config_user:config_password@postgres:5432/config_db}
- ENV=${CONFIG_SERVICE_ENV:-development}
- HOST=${CONFIG_SERVICE_HOST:-0.0.0.0}
- PORT=${CONFIG_SERVICE_PORT:-8005}
- DB_POOL_SIZE=${CONFIG_SERVICE_DB_POOL_SIZE:-10}
- AUTH_SERVICE_URL=${AUTH_SERVICE_URL:-http://auth-service:8001/api/v1}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:8080}
command: ["python", "-m", "config_service.main"]
ports:
- "${CONFIG_SERVICE_PORT:-8005}:8005"
depends_on:
config-migrate:
condition: service_completed_successfully
postgres:
condition: service_healthy
networks:
- experiment-tracking-network
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:8005/health').read()\" || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 20s

# Auth Proxy - BFF для фронтенда
auth-proxy:
build:
Expand Down
31 changes: 31 additions & 0 deletions docker-entrypoint-initdb.d/init-multiple-databases.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ EXPERIMENT_DB_USER=${EXPERIMENT_DB_USER:-experiment_user}
EXPERIMENT_DB_PASSWORD=${EXPERIMENT_DB_PASSWORD:-experiment_password}
SCRIPT_DB_USER=${SCRIPT_DB_USER:-script_user}
SCRIPT_DB_PASSWORD=${SCRIPT_DB_PASSWORD:-script_password}
CONFIG_DB_USER=${CONFIG_DB_USER:-config_user}
CONFIG_DB_PASSWORD=${CONFIG_DB_PASSWORD:-config_password}

echo "Creating databases and users..."

Expand Down Expand Up @@ -105,5 +107,34 @@ psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "script_db" <<-EOSQ
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $SCRIPT_DB_USER;
EOSQL

# Create config_db and config_user
echo "Creating database: config_db"
psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -c "CREATE DATABASE config_db;" 2>&1 | grep -v "already exists" || true

echo "Creating user: $CONFIG_DB_USER"
psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
DO \$\$
BEGIN
IF NOT EXISTS (SELECT FROM pg_user WHERE usename = '$CONFIG_DB_USER') THEN
CREATE USER $CONFIG_DB_USER WITH PASSWORD '$CONFIG_DB_PASSWORD';
ELSE
ALTER USER $CONFIG_DB_USER WITH PASSWORD '$CONFIG_DB_PASSWORD';
END IF;
END
\$\$;
EOSQL

echo "Granting privileges on config_db to $CONFIG_DB_USER"
psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
GRANT ALL PRIVILEGES ON DATABASE config_db TO $CONFIG_DB_USER;
EOSQL

psql -v ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "config_db" <<-EOSQL
CREATE EXTENSION IF NOT EXISTS pgcrypto;
GRANT ALL ON SCHEMA public TO $CONFIG_DB_USER;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO $CONFIG_DB_USER;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO $CONFIG_DB_USER;
EOSQL

echo "✅ Multiple databases and users initialized"

Loading
Loading