From 6890dffdfef2bc24a8221dfe93bb4caae95f9a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=A1=D0=B0?= =?UTF-8?q?=D0=B1=D0=B8=D0=BB=D0=B8=D0=BD?= Date: Wed, 8 Jul 2026 17:52:39 +0300 Subject: [PATCH] Remove legacy eventhub.local hosts and switch to dev/ift/stage Co-authored-by: Cursor --- Makefile | 264 ++++++++++++++++---------------- docker/traefik/dynamic_conf.yml | 62 -------- 2 files changed, 132 insertions(+), 194 deletions(-) diff --git a/Makefile b/Makefile index 8ea139a..817212c 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,14 @@ .PHONY: help clean compile shell test eunit test-api test-all \ dialyzer xref cover docs release run stop logs -# Цвета для вывода (только для команд, где нужны) +# ????? ??? ?????? (?????? ??? ??????, ??? ?????) GREEN := \033[0;32m YELLOW := \033[1;33m RED := \033[0;31m BLUE := \033[0;34m NC := \033[0m -# Переменные +# ?????????? REBAR3 := rebar3 SNAME := eventhub SHELL := /bin/bash @@ -16,8 +16,8 @@ SHELL := /bin/bash # ============================================================================ # HELP # ============================================================================ -help: ## Показать это сообщение - @echo "EventHub - Makefile команды:" +help: ## ???????? ??? ????????? + @echo "EventHub - Makefile ???????:" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}' @@ -25,40 +25,40 @@ help: ## Показать это сообщение # ============================================================================ # BUILD # ============================================================================ -compile: ## Скомпилировать проект - @echo "Компиляция проекта..." +compile: ## ?????????????? ?????? + @echo "?????????? ???????..." @$(REBAR3) compile - @echo "✓ Компиляция завершена" + @echo "? ?????????? ?????????" -clean: ## Очистить проект - @echo "Очистка проекта..." +clean: ## ???????? ?????? + @echo "??????? ???????..." @$(REBAR3) clean #@rm -rf _build build/ct_run.* deps logs *.log @rm -rf _build logs/ct_run.* deps doc app *.log - @echo "✓ Очистка завершена" + @echo "? ??????? ?????????" -deps: ## Установить зависимости - @echo "Установка зависимостей..." +deps: ## ?????????? ??????????? + @echo "????????? ????????????..." @$(REBAR3) get-deps - @echo "✓ Зависимости установлены" + @echo "? ??????????? ???????????" -update-deps: ## Обновить зависимости - @echo "Обновление зависимостей..." +update-deps: ## ???????? ??????????? + @echo "?????????? ????????????..." @$(REBAR3) update-deps - @echo "✓ Зависимости обновлены" + @echo "? ??????????? ?????????" # ============================================================================ # DEVELOPMENT # ============================================================================ -shell: ## Запустить интерактивную оболочку - @echo "Запуск Erlang shell..." +shell: ## ????????? ????????????? ???????? + @echo "?????? Erlang shell..." @$(REBAR3) shell --sname $(SNAME) -run: ## Запустить приложение (foreground) - @echo "Запуск приложения..." +run: ## ????????? ?????????? (foreground) + @echo "?????? ??????????..." @$(REBAR3) shell --sname $(SNAME) -test-server: ## Запустить тестовый сервер в фоне +test-server: ## ????????? ???????? ?????? ? ???? @echo "Cleaning old data..." @rm -rf Mnesia.* @echo "Starting server..." @@ -66,39 +66,39 @@ test-server: ## Запустить тестовый сервер в фоне @echo "PID: $$!" @for i in 1 2 3 4 5 6 7 8 9 10; do \ if curl -s http://localhost:8080/health | grep -q "ok"; then \ - echo "✓ Server ready at http://localhost:8080"; \ + echo "? Server ready at http://localhost:8080"; \ break; \ fi; \ sleep 1; \ done -stop: ## Остановить приложение - @echo "Остановка приложения..." +stop: ## ?????????? ?????????? + @echo "????????? ??????????..." @pkill -f "rebar3 shell --sname $(SNAME)" || true @pkill -f "beam.*$(SNAME)" || true @pkill -f beam.smp || true - @echo "✓ Приложение остановлено" + @echo "? ?????????? ???????????" -restart: stop run ## Перезапустить приложение +restart: stop run ## ????????????? ?????????? # ============================================================================ # TESTING # ============================================================================ -test: eunit ## Запустить все тесты (алиас для eunit) +test: eunit ## ????????? ??? ????? (????? ??? eunit) -eunit: ## Запустить EUnit тесты - @echo "Запуск EUnit тестов..." +eunit: ## ????????? EUnit ????? + @echo "?????? EUnit ??????..." @$(REBAR3) eunit --sname $(SNAME)_test --verbose -eunit-module: ## Запустить тесты для модуля (make eunit-module MODULE=core_calendar_tests) - @echo "Запуск тестов для модуля $(MODULE)..." +eunit-module: ## ????????? ????? ??? ?????? (make eunit-module MODULE=core_calendar_tests) + @echo "?????? ?????? ??? ?????? $(MODULE)..." @$(REBAR3) eunit --sname $(SNAME)_test --module=$(MODULE) --verbose -eunit-verbose: ## Запустить EUnit тесты с подробным выводом - @echo "Запуск EUnit тестов (verbose)..." +eunit-verbose: ## ????????? EUnit ????? ? ????????? ??????? + @echo "?????? EUnit ?????? (verbose)..." @$(REBAR3) eunit --sname $(SNAME)_test --verbose -test-api: ## Запустить Common Test для API +test-api: ## ????????? Common Test ??? API @echo "Cleaning old data..." @rm -rf logs/test/ct/ct_run.* @bash scripts/fix-rebar-unit-symlink.sh @@ -116,10 +116,10 @@ test-api-remote: test-api-remote-cluster: @rm -rf logs/test/ct/ct_run.* @CT_MODE=remote \ - API_HOST=https://api.eventhub.local/api \ - WS_HOST=wss://ws.eventhub.local \ - ADMIN_API_HOST=https://admin-api.eventhub.local/api \ - ADMIN_WS_HOST=wss://admin-ws.eventhub.local \ + API_HOST=https://api.stage.eventhub.local/api \ + WS_HOST=wss://ws.stage.eventhub.local \ + ADMIN_API_HOST=https://admin-api.stage.eventhub.local/api \ + ADMIN_WS_HOST=wss://admin-ws.stage.eventhub.local \ rebar3 ct test-api-docker: @@ -132,38 +132,38 @@ test-api-docker: -e "ADMIN_WS_HOST=ws://eventhub:8446" \ eventhub-tests -test-all: eunit test-api ## Запустить ВСЕ тесты (EUnit + API) +test-all: eunit test-api ## ????????? ??? ????? (EUnit + API) @echo "========================================" - @echo " ВСЕ ТЕСТЫ ПРОЙДЕНЫ!" + @echo " ??? ????? ????????!" @echo "========================================" # ============================================================================ # LOAD TESTING # ============================================================================ -tsung-test: ## Запустить нагрузочный тест Tsung - @echo "Запуск нагрузочного теста Tsung..." +tsung-test: ## ????????? ??????????? ???? Tsung + @echo "?????? ???????????? ????? Tsung..." @mkdir -p logs/tsung @tsung -f test/tsung/eventhub_http.xml -l logs/tsung start - @echo "Отчёт: logs/tsung/*/report.html" + @echo "?????: logs/tsung/*/report.html" -tsung-emulate: ## Запустить нагрузочный тест Tsung +tsung-emulate: ## ????????? ??????????? ???? Tsung @rm -rf logs/tsung - @echo "Запуск нагрузочного теста Tsung..." + @echo "?????? ???????????? ????? Tsung..." @mkdir -p logs/tsung @tsung -f test/tsung/eventhub_tsung.xml -l logs/tsung start - @echo "Отчёт: http://localhost:8091/ или logs/tsung/*/report.html" # + @echo "?????: http://localhost:8091/ ??? logs/tsung/*/report.html" # -wrk-register: ## Нагрузочный тест регистрации (wrk2) - @wrk -t4 -c100 -d30s -t100 -s test/wrk/scripts/wrk_register.lua https://api.eventhub.local/api/v1/register +wrk-register: ## ??????????? ???? ??????????? (wrk2) + @wrk -t4 -c100 -d30s -t100 -s test/wrk/scripts/wrk_register.lua https://api.stage.eventhub.local/api/v1/register -wrk-search: ## Нагрузочный тест поиска (wrk2) - @TOKEN=$$(curl -s -X POST https://api.eventhub.local/api/v1/register \ +wrk-search: ## ??????????? ???? ?????? (wrk2) + @TOKEN=$$(curl -s -X POST https://api.stage.eventhub.local/api/v1/register \ -H "Content-Type: application/json" \ -d '{"email":"wrktest@test.com","password":"pass"}' | \ grep -o '"token":"[^"]*"' | cut -d'"' -f4); \ wrk -t4 -c100 -d30s -t200 \ -H "Authorization: Bearer $$TOKEN" \ - https://api.eventhub.local/api/v1/search?type=event\&q=test + https://api.stage.eventhub.local/api/v1/search?type=event\&q=test eventhub-emulator: @docker run --rm --network host \ @@ -179,61 +179,61 @@ eventhub-emulator: eventhub-emulator curl-health: - for i in {1..2}; do curl -k -s -o /dev/null -w "%{http_code}\n" -H "Host: api.eventhub.local" https://localhost/api/health; done + for i in {1..2}; do curl -k -s -o /dev/null -w "%{http_code}\n" -H "Host: api.stage.eventhub.local" https://localhost/api/health; done -wrk-health: ## Нагрузочный тест health (wrk2) +wrk-health: ## ??????????? ???? health (wrk2) wrk -t4 -c100 -d30s -t100 \ - -H "Host: api.eventhub.local" \ - https://api.eventhub.local/api/health + -H "Host: api.stage.eventhub.local" \ + https://api.stage.eventhub.local/api/health # ============================================================================ # CODE QUALITY # ============================================================================ -dialyzer: ## Запустить Dialyzer (статический анализ) - @echo "Запуск Dialyzer..." +dialyzer: ## ????????? Dialyzer (??????????? ??????) + @echo "?????? Dialyzer..." @$(REBAR3) dialyzer - @echo "✓ Dialyzer завершён" + @echo "? Dialyzer ????????" -xref: ## Запустить Xref (кросс-ссылки) - @echo "Запуск Xref..." +xref: ## ????????? Xref (?????-??????) + @echo "?????? Xref..." @$(REBAR3) xref - @echo "✓ Xref завершён" + @echo "? Xref ????????" -cover: ## Запустить тесты с покрытием кода - @echo "Запуск тестов с покрытием..." +cover: ## ????????? ????? ? ????????? ???? + @echo "?????? ?????? ? ?????????..." @$(REBAR3) eunit --sname $(SNAME)_test --cover @$(REBAR3) cover --verbose - @echo "✓ Отчёт о покрытии в _build/test/cover/" + @echo "? ????? ? ???????? ? _build/test/cover/" -docs: ## Сгенерировать документацию (EDoc) - @echo "Генерация документации..." +docs: ## ????????????? ???????????? (EDoc) + @echo "????????? ????????????..." @$(REBAR3) edoc - @echo "✓ Документация в doc/" + @echo "? ???????????? ? doc/" # ============================================================================ # RELEASE & DOCKER # ============================================================================ -release: ## Собрать релиз - @echo "Сборка релиза..." +release: ## ??????? ????? + @echo "?????? ??????..." @$(REBAR3) as prod release - @echo "✓ Релиз собран в _build/prod/rel/eventhub/" + @echo "? ????? ?????? ? _build/prod/rel/eventhub/" # ============================================================================ # DOCKER # ============================================================================ -docker-build: ## Собрать Docker образ - @echo "Сборка Docker образа..." +docker-build: ## ??????? Docker ????? + @echo "?????? Docker ??????..." @docker build -f docker/Dockerfile -t eventhub:latest . - @echo "✅ Docker образ собран" + @echo "? Docker ????? ??????" -docker-build-debug: ## Собрать Docker образ - @echo "Сборка Docker образа..." +docker-build-debug: ## ??????? Docker ????? + @echo "?????? Docker ??????..." @docker build -f docker/Debug.Dockerfile -t eventhub-debug:latest . - @echo "✅ Docker образ собран" + @echo "? Docker ????? ??????" -docker-run: ## Запустить Docker контейнер (одиночный) - @echo "Запуск Docker контейнера..." +docker-run: ## ????????? Docker ????????? (?????????) + @echo "?????? Docker ??????????..." @docker run -d \ --hostname eventhub.local \ --env-file docker/.env \ @@ -245,29 +245,29 @@ docker-run: ## Запустить Docker контейнер (одиночный) -p 8446:8446 \ -v eventhub-data:/app/data \ eventhub:latest - @echo "✅ Контейнер запущен на http://localhost:8080" + @echo "? ????????? ??????? ?? http://localhost:8080" -docker-stop: ## Остановить Docker контейнер - @echo "Остановка Docker контейнера..." +docker-stop: ## ?????????? Docker ????????? + @echo "????????? Docker ??????????..." @docker stop eventhub 2>/dev/null || true @docker rm eventhub 2>/dev/null || true - @echo "✅ Контейнер остановлен" + @echo "? ????????? ??????????" -docker-logs: ## Показать логи Docker контейнера +docker-logs: ## ???????? ???? Docker ?????????? @docker logs -f eventhub -docker-shell: ## Зайти в Docker контейнер +docker-shell: ## ????? ? Docker ????????? @docker exec -it eventhub sh -docker-compose-build-app: ## Собрать Docker образ - @echo "Сборка Docker образа..." +docker-compose-build-app: ## ??????? Docker ????? + @echo "?????? Docker ??????..." @docker-compose -f docker/docker-compose.yml build --no-cache eventhub-node1 eventhub-node2 eventhub-node3 - @echo "✅ Docker образ собран" + @echo "? Docker ????? ??????" -docker-compose-up: ## Запустить кластер (3 ноды) - @echo "Запуск кластера EventHub (3 ноды)..." +docker-compose-up: ## ????????? ??????? (3 ????) + @echo "?????? ???????? EventHub (3 ????)..." @docker-compose -f docker/docker-compose.yml --env-file docker/.env up -d - @echo "✅ Кластер запущен" + @echo "? ??????? ???????" @echo "Node 1: http://localhost:8080" @echo "Node 2: http://localhost:8082" @echo "Node 3: http://localhost:8084" @@ -278,42 +278,42 @@ docker-compose-up: ## Запустить кластер (3 ноды) @echo "LogLynx: http://localhost:6123" @echo "Swagger UI: http://localhost:8447" -docker-compose-down: ## Остановить кластер - @echo "Остановка кластера..." +docker-compose-down: ## ?????????? ??????? + @echo "????????? ????????..." @docker-compose -f docker/docker-compose.yml --env-file docker/.env down - @echo "✅ Кластер остановлен" + @echo "? ??????? ??????????" -docker-compose-logs: ## Показать логи кластера +docker-compose-logs: ## ???????? ???? ???????? @docker-compose -f docker/docker-compose.yml --env-file docker/.env logs -f -docker-clean: docker-stop ## Очистить Docker образы и volumes +docker-clean: docker-stop ## ???????? Docker ?????? ? volumes @docker rmi eventhub:latest 2>/dev/null || true @docker volume rm eventhub-data 2>/dev/null || true - @echo "✅ Docker очищен" + @echo "? Docker ??????" -docker-swarm-deploy: ## Запустить кластер +docker-swarm-deploy: ## ????????? ??????? @set RELEASE_COOKIE=$$(grep RELEASE_COOKIE docker/.env | cut -d '=' -f2) @set JWT_SECRET=$$(grep JWT_SECRET docker/.env | cut -d '=' -f2) @docker stack deploy -c docker/docker-compose.swarm.yml eventhub --detach=true - @echo "✅ Кластер запущен" - @echo "Admin UI: https://admin-ui.eventhub.local" + @echo "? ??????? ???????" + @echo "Admin UI: https://admin-ui.stage.eventhub.local" -docker-swarm-stop: ## Остановить кластер +docker-swarm-stop: ## ?????????? ??????? @docker stack rm eventhub ##@docker volume prune -f - @echo "✅ Кластер удален" + @echo "? ??????? ??????" -docker-swarm-scale: ## Изменить количество реплик (например, make scale REPLICAS=5) - @echo "Масштабирование до ${REPLICAS} реплик..." +docker-swarm-scale: ## ???????? ?????????? ?????? (????????, make scale REPLICAS=5) + @echo "??????????????? ?? ${REPLICAS} ??????..." docker service scale eventhub_eventhub=${REPLICAS} - @echo "✅ Сервис масштабирован" + @echo "? ?????? ?????????????" -docker-swarm-status: ## Показать состояние кластера - @echo "Количество узлов в кластере:" +docker-swarm-status: ## ???????? ????????? ???????? + @echo "?????????? ????? ? ????????:" @docker exec $$(docker ps -qf "name=eventhub_eventhub" | head -n 1) /app/bin/eventhub eval 'length(nodes()).' - @echo "Список узлов:" + @echo "?????? ?????:" @docker exec $$(docker ps -qf "name=eventhub_eventhub" | head -n 1) /app/bin/eventhub eval 'nodes().' - @echo "Список узлов Mnesia:" + @echo "?????? ????? Mnesia:" @docker exec $$(docker ps -qf "name=eventhub_eventhub" | head -n 1) /app/bin/eventhub eval 'mnesia:table_info(user, disc_copies).' docker-swarm-reg-admin: @@ -344,56 +344,56 @@ docker-swarm-shell: # ============================================================================ # UTILITIES # ============================================================================ -status: ## Проверить статус сервера - @echo "Проверка статуса сервера..." +status: ## ????????? ?????? ??????? + @echo "???????? ??????? ???????..." @if curl -s http://localhost:8080/health > /dev/null 2>&1; then \ - echo "✓ Сервер запущен на http://localhost:8080"; \ + echo "? ?????? ??????? ?? http://localhost:8080"; \ curl -s http://localhost:8080/health; \ else \ - echo "✗ Сервер не запущен"; \ + echo "? ?????? ?? ???????"; \ fi -tree: ## Показать структуру проекта +tree: ## ???????? ????????? ??????? @tree -I '_build|deps|logs|.git' --dirsfirst 2>/dev/null || ls -la -info: ## Показать информацию о проекте - @echo "EventHub - информация о проекте:" +info: ## ???????? ?????????? ? ??????? + @echo "EventHub - ?????????? ? ???????:" @echo "" - @echo "API эндпоинты:" - @echo " POST /v1/register - Регистрация" - @echo " POST /v1/login - Логин" - @echo " POST /v1/refresh - Обновление токена" - @echo " GET /v1/user/me - Профиль" - @echo " POST /v1/calendars - Создание календаря" - @echo " GET /v1/calendars - Список календарей" - @echo " POST /v1/calendars/:id/events - Создание события" - @echo " POST /v1/events/:id/bookings - Запись на событие" + @echo "API ?????????:" + @echo " POST /v1/register - ???????????" + @echo " POST /v1/login - ?????" + @echo " POST /v1/refresh - ?????????? ??????" + @echo " GET /v1/user/me - ???????" + @echo " POST /v1/calendars - ???????? ?????????" + @echo " GET /v1/calendars - ?????? ??????????" + @echo " POST /v1/calendars/:id/events - ???????? ???????" + @echo " POST /v1/events/:id/bookings - ?????? ?? ???????" @echo "" - @echo "Порты:" + @echo "?????:" @echo " HTTP API: 8080" @echo " Admin HTTP: 8445" # ============================================================================ # DEVELOPMENT WORKFLOW # ============================================================================ -dev-setup: deps compile ## Настроить окружение для разработки - @echo "✓ Окружение настроено" +dev-setup: deps compile ## ????????? ????????? ??? ?????????? + @echo "? ????????? ?????????" -dev-test: ## Быстрый цикл: compile + eunit +dev-test: ## ??????? ????: compile + eunit @make compile @make eunit # ============================================================================ # GIT HELPERS # ============================================================================ -git-status: ## Показать статус Git +git-status: ## ???????? ?????? Git @git status --short -git-log: ## Показать лог Git (последние 10) +git-log: ## ???????? ??? Git (????????? 10) @git log --oneline -10 -git-save: ## Сохранить изменения (commit + push) - @read -p "Сообщение коммита: " msg; \ +git-save: ## ????????? ????????? (commit + push) + @read -p "????????? ???????: " msg; \ git add .; \ git commit -m "$$msg"; \ git push diff --git a/docker/traefik/dynamic_conf.yml b/docker/traefik/dynamic_conf.yml index e3a1633..90c7785 100644 --- a/docker/traefik/dynamic_conf.yml +++ b/docker/traefik/dynamic_conf.yml @@ -48,11 +48,6 @@ http: routers: # Пользовательский REST API - api: - rule: "Host(`api.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https", "strip-api-prefix", "api-ratelimit", "waf"] - service: "api" api-dev: rule: "Host(`api.dev.eventhub.local`)" entryPoints: ["web"] @@ -86,19 +81,8 @@ http: tls: true middlewares: ["strip-api-prefix", "api-ratelimit", "waf"] service: "api" - api-secure: - rule: "Host(`api.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - middlewares: ["strip-api-prefix", "api-ratelimit", "waf"] - service: "api" # Пользовательский WebSocket - ws: - rule: "Host(`ws.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https"] - service: "ws" ws-dev: rule: "Host(`ws.dev.eventhub.local`)" entryPoints: ["web"] @@ -129,18 +113,8 @@ http: entryPoints: ["websecure"] tls: true service: "ws" - ws-secure: - rule: "Host(`ws.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - service: "ws" # Админский REST API - admin-api: - rule: "Host(`admin-api.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https", "strip-api-prefix", "admin-ratelimit", "waf"] - service: "admin-api" admin-api-dev: rule: "Host(`admin-api.dev.eventhub.local`)" entryPoints: ["web"] @@ -174,19 +148,8 @@ http: tls: true middlewares: ["strip-api-prefix", "admin-ratelimit", "waf"] service: "admin-api" - admin-api-secure: - rule: "Host(`admin-api.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - middlewares: ["strip-api-prefix", "admin-ratelimit", "waf"] - service: "admin-api" # Админский WebSocket - admin-ws: - rule: "Host(`admin-ws.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https"] - service: "admin-ws" admin-ws-dev: rule: "Host(`admin-ws.dev.eventhub.local`)" entryPoints: ["web"] @@ -217,18 +180,8 @@ http: entryPoints: ["websecure"] tls: true service: "admin-ws" - admin-ws-secure: - rule: "Host(`admin-ws.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - service: "admin-ws" # Админский UI - admin-ui: - rule: "Host(`admin-ui.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https"] - service: "admin-ui-service" admin-ui-dev: rule: "Host(`admin-ui.dev.eventhub.local`)" entryPoints: ["web"] @@ -259,18 +212,8 @@ http: entryPoints: ["websecure"] tls: true service: "admin-ui-service" - admin-ui-secure: - rule: "Host(`admin-ui.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - service: "admin-ui-service" # Клиентский UI - client-ui: - rule: "Host(`ui.eventhub.local`)" - entryPoints: ["web"] - middlewares: ["redirect-to-https"] - service: "client-ui-service" client-ui-dev: rule: "Host(`ui.dev.eventhub.local`)" entryPoints: ["web"] @@ -301,11 +244,6 @@ http: entryPoints: ["websecure"] tls: true service: "client-ui-service" - client-ui-secure: - rule: "Host(`ui.eventhub.local`)" - entryPoints: ["websecure"] - tls: true - service: "client-ui-service" services: api: