e44bc4f660
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>
145 lines
6.7 KiB
Makefile
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)
|