Files
netrunner-proxy/Makefile
T
nineap e44bc4f660 Исправить деплой dev systemd-юнита прокси: rsync грузил файл под неверным именем
server/netrunner-server.dev.service копировался на удалённую машину без
переименования — оседал как netrunner-server.dev.service рядом со старым
netrunner-server.service, а systemctl start netrunner-server продолжал
использовать именно старый (неизменный) юнит. Из-за этого только что
задеплоенные --port=8443 не подхватывались вообще, пока не переименовал файл
руками на сервере.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 18:52:10 +07:00

145 lines
6.7 KiB
Makefile

-include .env
# Настройки
SERVER_IP := $(strip $(SERVER_IP))
DEV_IP :=$(strip $(DEV_IP))
REMOTE_USER := $(strip $(REMOTE_USER))
REMOTE_PATH := $(strip $(REMOTE_PATH))
SERVICE_NAME := $(strip $(SERVICE_NAME))
# Безопасное олучение путей из ENV или дефолтов
ANDROID_ADB_HOST := $(strip $(ANDROID_ADB_HOST))
ANDROID_BUILD_SRC := $(strip $(ANDROID_BUILD_SRC))
ANDROID_PROJECT_LIBS := $(strip $(ANDROID_PROJECT_LIBS))
# Дев-авторизация прокси (см. netrunner-proxy/.env) — секрет общий с
# netrunner-backend/.env.dev, адрес — дев-стек backend (make dev там).
PROXY_INTERNAL_SECRET := $(strip $(PROXY_INTERNAL_SECRET))
DEV_BACKEND_URL := $(strip $(DEV_BACKEND_URL))
# Опции для стабильного SSH/Rsync в условиях плохого коннекта
# IPQoS=throughput помогает проталкивать пакеты через тайские магистрали
SSH_OPTS = -o IPQoS=throughput -o ServerAliveInterval=30
RSYNC_OPTS = -avz --inplace --progress -e "ssh $(SSH_OPTS)"
.PHONY: debug-client debug-server build-android build-server deploy-server logs ssh setup-server release-all
# --- Релизный цикл ---
# --- Релизный цикл ---
release-all: build-server deploy-server build-android
@echo "--- [Android] Проверка путей ---"
@if [ ! -d "$(ANDROID_BUILD_SRC)" ]; then echo "Ошибка: Директория сборки $(ANDROID_BUILD_SRC) не найдена!"; exit 1; fi
@echo "--- [Android] Синхронизация библиотек в проект ---"
@mkdir -p $(ANDROID_PROJECT_LIBS)
# Используем rsync локально: это безопаснее и быстрее, чем cp -r
# Удалит в jniLibs всё, чего нет в gen, чтобы билд был чистым
rsync -av "$(ANDROID_BUILD_SRC)/" "$(ANDROID_PROJECT_LIBS)/"
@echo "--- [ADB] Подключение к устройству ---"
@if [ -z "$(port)" ]; then \
echo "Ошибка: укажите порт, например: make release-all port=5555"; \
exit 1; \
fi
adb connect $(ANDROID_ADB_HOST):$(port)
@echo "--- Релиз полностью завершен ---"
debug-client:
@echo "--- Сборка клиента (Debug) ---"
cargo build --bin netrunner-client
@echo "--- Применение прав ---"
sudo setcap cap_net_admin,cap_net_raw,cap_dac_override=eip ./target/debug/netrunner-client
@echo "--- Запуск клиента ---"
sudo RUST_LOG=warn,netrunner_client=trace ./target/debug/netrunner-client
debug-server:
@echo "--- Сборка сервера (Debug) ---"
cargo build --bin netrunner-server
@echo "--- Запуск сервера локально (с авторизацией против дев-бэкенда) ---"
sudo PROXY_INTERNAL_SECRET=$(PROXY_INTERNAL_SECRET) ./target/debug/netrunner-server \
--port=8443 --host=0.0.0.0 \
--require-auth --backend-url $(DEV_BACKEND_URL)
ABIS = arm64-v8a armeabi-v7a x86_64 x86
build-android:
@for abi in $(ABIS); do \
echo "Building for $$abi..."; \
cargo ndk -t $$abi -o ./gen build --bin netrunner-client --release; \
done
cargo run --bin bindgen-tool generate \
--library gen/arm64-v8a/libnetrunner_client.so \
--language kotlin \
--no-format \
--out-dir gen
@echo "--- [Android] Синхронизация библиотек в проект ---"
@mkdir -p $(ANDROID_PROJECT_LIBS)
# Используем rsync локально: это безопаснее и быстрее, чем cp -r
# Удалит в jniLibs всё, чего нет в gen, чтобы билд был чистым
rsync -av "$(ANDROID_BUILD_SRC)/" "$(ANDROID_PROJECT_LIBS)/"
build-server:
@echo "--- Сборка сервера (Release) ---"
cargo build --bin netrunner-server --release
setup-server:
@echo "--- Подготовка сервера ---"
ssh $(SSH_OPTS) $(REMOTE_USER)@$(SERVER_IP) "\
apt-get update && \
apt-get install -y build-essential libssl-dev pkg-config rsync && \
mkdir -p $(REMOTE_PATH)"
# Деплой с использованием rsync и принудительной очисткой
deploy-server: build-server
@echo "--- [1/4] Остановка сервиса и очистка зависших процессов ---"
ssh $(SSH_OPTS) $(REMOTE_USER)@$(SERVER_IP) "\
systemctl stop $(SERVICE_NAME) || true; \
pkill -9 $(SERVICE_NAME) || true; \
rm -f $(REMOTE_PATH)/$(SERVICE_NAME).tmp"
@echo "--- [2/4] Копирование бинарника (rsync) ---"
rsync $(RSYNC_OPTS) target/release/netrunner-server $(REMOTE_USER)@$(SERVER_IP):$(REMOTE_PATH)/
@echo "--- [3/4] Обновление конфигурации systemd ---"
rsync $(RSYNC_OPTS) server/netrunner-server.service $(REMOTE_USER)@$(SERVER_IP):/etc/systemd/system/
@echo "--- [4/4] Перезапуск сервиса ---"
ssh $(SSH_OPTS) $(REMOTE_USER)@$(SERVER_IP) "\
systemctl daemon-reload && \
systemctl enable $(SERVICE_NAME) && \
systemctl start $(SERVICE_NAME)"
@echo "--- Деплой завершен успешно! ---"
deploy-dev: build-server
@echo "--- [1/4] Остановка сервиса и очистка зависших процессов DEV ---"
ssh $(SSH_OPTS) $(REMOTE_USER)@$(DEV_IP) "\
systemctl stop $(SERVICE_NAME) || true; \
pkill -9 $(SERVICE_NAME) || true; \
rm -f $(REMOTE_PATH)/$(SERVICE_NAME).tmp"
@echo "--- [2/4] Копирование бинарника (rsync) ---"
rsync $(RSYNC_OPTS) target/release/netrunner-server $(REMOTE_USER)@$(DEV_IP):$(REMOTE_PATH)/
@echo "--- [3/4] Обновление конфигурации systemd ---"
# Локальный файл называется *.dev.service (чтобы не путать с прод-юнитом в
# репозитории), но systemctl start $(SERVICE_NAME) ищет ровно
# "$(SERVICE_NAME).service" — без явного целевого имени rsync клал файл
# под своим исходным именем, и юнит с новым портом/конфигом никогда не
# подхватывался (systemctl тихо продолжал использовать старый файл).
rsync $(RSYNC_OPTS) server/netrunner-server.dev.service $(REMOTE_USER)@$(DEV_IP):/etc/systemd/system/$(SERVICE_NAME).service
@echo "--- [4/4] Перезапуск сервиса ---"
ssh $(SSH_OPTS) $(REMOTE_USER)@$(DEV_IP) "\
systemctl daemon-reload && \
systemctl enable $(SERVICE_NAME) && \
systemctl start $(SERVICE_NAME)"
@echo "--- Деплой завершен успешно! ---"
logs:
ssh $(SSH_OPTS) $(REMOTE_USER)@$(SERVER_IP) "journalctl -u $(SERVICE_NAME) -f"
ssh:
ssh $(SSH_OPTS) $(REMOTE_USER)@$(SERVER_IP)