From be321813fa01fb306cf41e7a102c79bc65ab5935243448c25baefd7d7bcb2feb Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 16 Jul 2026 11:54:21 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20test.shi?= =?UTF-8?q?neup.me=20=D0=B8=D0=B7=20deploy-=D1=81=D1=85=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 4 +- Deploy/PRODUCTION_SERVERS.md | 3 - Deploy/README.md | 8 +- Deploy/TEST_SERVERS.md | 35 +---- SHiNE-server/AGENTS.md | 9 -- ...06-26_1800_корректное_завершение_за_30с.md | 3 +- VERSION.properties | 4 +- build.gradle | 15 -- deploy_shine-server_test.sh | 128 ------------------ deploy_shine-ui_test.sh | 20 --- ...26-07-09_0815_4_test_servers_devnet_vps.md | 2 +- docs/deploy/README.md | 18 +-- .../deploy/servers/93.170.12.154_rapsberry.md | 41 ------ docs/deploy/test-server/README.md | 2 +- scripts/install_test_caddyfile.sh | 76 ----------- 15 files changed, 12 insertions(+), 356 deletions(-) delete mode 100644 deploy_shine-server_test.sh delete mode 100644 deploy_shine-ui_test.sh delete mode 100644 docs/deploy/servers/93.170.12.154_rapsberry.md delete mode 100644 scripts/install_test_caddyfile.sh diff --git a/AGENTS.md b/AGENTS.md index a5040e9..2019fbc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -86,10 +86,9 @@ - Обычные коммиты делать стандартным `git commit`; переменная `$GITEA_TOKEN` для коммитов не нужна и не используется. ## Deploy -- Все документы и заметки по деплою хранить в папке `Dev_Docs/deploy/`. +- Все документы и заметки по деплою хранить в папке `Deploy/`. - Production-хост SHiNE: `player@shineup.me` (`178.208.64.62`). - Второй production-хост SHiNE: `player@193.8.215.70` (`server2.shineup.me`). -- Резервный test-хост SHiNE: `player@93.170.12.154` (`test.shineup.me`). - Базовый путь на сервере для SHiNE: `/home/player` (проекты SHiNE размещать в `/home/player/SHiNE/...`). - По возможности все справки, комментарии и примечания в конфигах/документах писать на русском языке. - Для операций `git push` при необходимости использовать токен из переменной окружения `$GITEA_TOKEN`. @@ -99,7 +98,6 @@ - Default UI deploy: `./gradlew deployUI` или `./gradlew deployUITest2`. - Production server deploy: `./gradlew deployServerProduction`. - Production UI deploy: `./gradlew deployUIProduction`. -- Резервный test deploy на `test.shineup.me`: `./gradlew deployServerTest` и `./gradlew deployUITest`, но пока их не использовать без отдельной причины. - Для локального запуска использовать `./gradlew startLocal` (или `startLocalWithBuild`). - Сначала предлагать локальную проверку, а деплой на сервер выполнять по запросу пользователя. - Для временной бесплатной загрузки аватаров в Arweave секретный JWK нельзя хранить в git и нельзя прописывать в репозиторный `application.properties`. diff --git a/Deploy/PRODUCTION_SERVERS.md b/Deploy/PRODUCTION_SERVERS.md index fa1613f..a3177b5 100644 --- a/Deploy/PRODUCTION_SERVERS.md +++ b/Deploy/PRODUCTION_SERVERS.md @@ -14,8 +14,6 @@ - домен `server2.shineup.me` - IP `193.8.215.70` -Отдельно резервный хост `test.shineup.me` сейчас помечен как временно неработающий. - ## 1. Основной production-хост - SSH: `player@shineup.me` @@ -89,7 +87,6 @@ Deploy: Не production: -- `test.shineup.me` (`93.170.12.154`) — резервный хост, временно не работает - `t1.shineup.me` - `t2.shineup.me` - `t3.shineup.me` diff --git a/Deploy/README.md b/Deploy/README.md index c9730e0..0f730fc 100644 --- a/Deploy/README.md +++ b/Deploy/README.md @@ -4,7 +4,7 @@ Эта папка служит краткой картой окружений: -- [TEST_SERVERS.md](/home/ai/work/SHiNE/SHiNE-server-sha256/Deploy/TEST_SERVERS.md) — тестовые серверы и стенды; +- [TEST_SERVERS.md](/home/ai/work/SHiNE/SHiNE-server-sha256/Deploy/TEST_SERVERS.md) — тестовые стенды; - [PRODUCTION_SERVERS.md](/home/ai/work/SHiNE/SHiNE-server-sha256/Deploy/PRODUCTION_SERVERS.md) — production-контур и связанные публичные публикации. Ниже краткая сводка. @@ -19,11 +19,6 @@ - `player@193.8.215.70` - домен `server2.shineup.me` - IP `193.8.215.70` -- Временно неработающий резервный test: - - `player@93.170.12.154` - - домен `test.shineup.me` - - IP `93.170.12.154` - ## Отдельный quad-devnet стенд На отдельном VPS `178.208.90.249` подняты 4 независимых test/devnet-инстанса: @@ -36,6 +31,5 @@ ## Важно - Production-контура SHiNE сейчас два: `shineup.me` и `server2.shineup.me`. -- `test.shineup.me` сейчас помечен как временно неработающий резервный test-хост. - `t1..t4.shineup.me` — это отдельные тестовые/devnet-контуры, не production. - Любые изменения на `shineup.me` делать только после отдельного подтверждения пользователя. diff --git a/Deploy/TEST_SERVERS.md b/Deploy/TEST_SERVERS.md index cba51a4..eb214bb 100644 --- a/Deploy/TEST_SERVERS.md +++ b/Deploy/TEST_SERVERS.md @@ -1,6 +1,6 @@ # Тестовые серверы SHiNE -Этот файл описывает тестовые контуры, которые сейчас фигурируют в проекте. +Этот файл описывает тестовые стенды, которые сейчас фигурируют в проекте. ## 1. Исторический `test2`, теперь второй production-сервер @@ -36,33 +36,7 @@ Deploy: - задача `deployUITest2` по умолчанию выкладывает UI на `server2.shineup.me`, а не на `t2.shineup.me`; - при описании окружений перечислять его как второй production-сервер. -## 2. Резервный test-сервер, временно неработающий - -- SSH: `player@93.170.12.154` -- Домен: `test.shineup.me` -- IP: `93.170.12.154` -- Назначение: резервный test - -Структура по проектным докам: - -- каталог SHiNE: `/home/player/SHiNE` -- сервер: `/home/player/SHiNE/shine-server/shine-server.jar` -- UI: `/home/player/SHiNE/shine-ui` -- данные: `/home/player/SHiNE/shine-server/data/` -- логи: `/home/player/SHiNE/shine-server/logs/app.log` - -Deploy: - -- `./gradlew deployServerTest` -- `./gradlew deployUITest` - -Примечания: - -- этот хост резервный; -- сейчас помечен как временно неработающий; -- использовать его без отдельной причины не нужно. - -## 3. Отдельный quad-devnet стенд `t1..t4` +## 2. Отдельный quad-devnet стенд `t1..t4` - VPS: `178.208.90.249` - пользователь: `player` @@ -125,13 +99,12 @@ Operational-нюанс: - при одновременных рестартах возможны `HTTP 429` от `api.devnet.solana.com`; - поэтому сервисы `shine-t1..shine-t4` лучше перезапускать по одному, с паузой. -## 4. Что проверять первым делом +## 3. Что проверять первым делом Для любого test-контура полезны такие быстрые проверки: ```bash curl -I https://server2.shineup.me -curl -I https://test.shineup.me curl -I https://t1.shineup.me curl -I https://t2.shineup.me curl -I https://t3.shineup.me @@ -144,7 +117,7 @@ curl -I https://t4.shineup.me sudo systemctl --no-pager --full status caddy shine-t1 shine-t2 shine-t3 shine-t4 ``` -Для основного/резервного test: +Для второго production-контура: ```bash sudo systemctl --no-pager --full status shine-server caddy diff --git a/SHiNE-server/AGENTS.md b/SHiNE-server/AGENTS.md index 9c1f007..9398147 100644 --- a/SHiNE-server/AGENTS.md +++ b/SHiNE-server/AGENTS.md @@ -70,15 +70,6 @@ Production deploy: Любые изменения на `shineup.me` делать только после отдельного явного подтверждения пользователя. -Резервный test-контур: - -``` -./gradlew deployServerTest -./gradlew deployUITest -``` - -`test.shineup.me` считается резервным тестовым сервером и в обычный deploy не включается. - Логи на проде: - `/home/player/SHiNE/shine-server/logs/app.log` - `/home/player/SHiNE/shine-server/logs/call-delivery-events.log` diff --git a/TODO/2026-06-26_1800_корректное_завершение_за_30с.md b/TODO/2026-06-26_1800_корректное_завершение_за_30с.md index 06ca5f9..d6e24e9 100644 --- a/TODO/2026-06-26_1800_корректное_завершение_за_30с.md +++ b/TODO/2026-06-26_1800_корректное_завершение_за_30с.md @@ -35,6 +35,5 @@ ## Какие документы потом обновить -- `Dev_Docs/deploy/`; +- `Deploy/`; - `Dev_Docs/Blockchain/sync-between-servers.md`, если изменится поведение остановки/восстановления. - diff --git a/VERSION.properties b/VERSION.properties index a2f5226..b56a4b0 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.321 -server.version=1.2.293 +client.version=1.2.322 +server.version=1.2.294 diff --git a/build.gradle b/build.gradle index a1a8c46..7d9532e 100644 --- a/build.gradle +++ b/build.gradle @@ -238,21 +238,6 @@ tasks.register('deployUITest2') { dependsOn tasks.named('deployUI') } -tasks.register('deployServerTest', Exec) { - group = "!!deployment" - description = "Резервный test deploy: test.shineup.me (пока не использовать)" - dependsOn shadowJar - workingDir = rootDir - environment 'LOCAL_JAR', file('SHiNE-server/build/libs/shine-server.jar').absolutePath - commandLine 'bash', file('deploy_shine-server_test.sh').absolutePath -} - -tasks.register('deployUITest', Exec) { - group = "!!deployment" - description = "Резервный test UI deploy: test.shineup.me (пока не использовать)" - workingDir = rootDir - commandLine 'bash', file('deploy_shine-ui_test.sh').absolutePath -} tasks.register('startLocal', Exec) { group = "!!run" diff --git a/deploy_shine-server_test.sh b/deploy_shine-server_test.sh deleted file mode 100644 index bcca202..0000000 --- a/deploy_shine-server_test.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -PROD_HOST="${PROD_HOST:-player@shineup.me}" -TEST_HOST="${TEST_HOST:-player@93.170.12.154}" -TARGET_DOMAIN="${TARGET_DOMAIN:-test.shineup.me}" -REMOTE_BASE="${REMOTE_BASE:-/home/player/SHiNE}" -REMOTE_SERVER_DIR="${REMOTE_SERVER_DIR:-$REMOTE_BASE/shine-server}" -REMOTE_UI_DIR="${REMOTE_UI_DIR:-$REMOTE_BASE/shine-ui}" -REMOTE_DATA_DIR="${REMOTE_DATA_DIR:-$REMOTE_SERVER_DIR/data}" -REMOTE_LOGS_DIR="${REMOTE_LOGS_DIR:-$REMOTE_SERVER_DIR/logs}" -REMOTE_SERVICE_NAME="${REMOTE_SERVICE_NAME:-shine-server}" -LOCAL_JAR="${LOCAL_JAR:-build/libs/shine-server.jar}" -PROD_DATA_DIR="${PROD_DATA_DIR:-/home/player/SHiNE/shine-server/data}" -PROD_APP_PROPS="${PROD_APP_PROPS:-/home/player/SHiNE/shine-server/application.properties}" - -TMP_DIR="$(mktemp -d)" - -cleanup() { - rm -rf "$TMP_DIR" -} -trap cleanup EXIT - -require_file() { - local path="$1" - if [[ ! -f "$path" ]]; then - echo "ERROR: файл не найден: $path" >&2 - exit 1 - fi -} - -echo "==> Проверка локального jar" -require_file "$LOCAL_JAR" -jar_size="$(stat -c %s "$LOCAL_JAR")" -if [[ "$jar_size" -lt 10485760 ]]; then - echo "ERROR: jar слишком маленький для fat-jar: $jar_size bytes" >&2 - exit 1 -fi - -echo "==> Проверка SSH и sudo" -ssh -o BatchMode=yes -o ConnectTimeout=10 "$PROD_HOST" "echo SSH OK" >/dev/null -ssh -o BatchMode=yes -o ConnectTimeout=10 "$TEST_HOST" "echo SSH OK" >/dev/null -ssh "$TEST_HOST" "sudo -n true" - -echo "==> Подготовка Caddy для $TARGET_DOMAIN" -TEST_HOST="$TEST_HOST" \ -TARGET_DOMAIN="$TARGET_DOMAIN" \ -REMOTE_UI_DIR="$REMOTE_UI_DIR" \ -bash "$(dirname "$0")/scripts/install_test_caddyfile.sh" - -echo "==> Забираем продовые данные и application.properties" -mkdir -p "$TMP_DIR/data" -rsync -az --delete "$PROD_HOST:$PROD_DATA_DIR/" "$TMP_DIR/data/" -scp -p "$PROD_HOST:$PROD_APP_PROPS" "$TMP_DIR/application.properties" >/dev/null - -if grep -q '^server\.ui\.indexPath=' "$TMP_DIR/application.properties"; then - perl -0pi -e 's@^server\.ui\.indexPath=.*$@server.ui.indexPath=/home/player/SHiNE/shine-ui/index.html@m' "$TMP_DIR/application.properties" -else - printf '\nserver.ui.indexPath=/home/player/SHiNE/shine-ui/index.html\n' >>"$TMP_DIR/application.properties" -fi - -cat >"$TMP_DIR/shine-server.service" < Останавливаем текущий сервер на тестовом хосте" -ssh "$TEST_HOST" "sudo systemctl stop $REMOTE_SERVICE_NAME || true" - -echo "==> Создаём каталоги" -ssh "$TEST_HOST" "mkdir -p '$REMOTE_SERVER_DIR' '$REMOTE_DATA_DIR' '$REMOTE_LOGS_DIR' '$REMOTE_UI_DIR' '$REMOTE_BASE/caddy'" - -echo "==> Копируем продовую БД и blockchain-данные" -rsync -az --delete "$TMP_DIR/data/" "$TEST_HOST:$REMOTE_DATA_DIR/" - -echo "==> Загружаем новый jar и конфиг" -rsync -az --timeout=120 "$LOCAL_JAR" "$TEST_HOST:$REMOTE_SERVER_DIR/shine-server.jar.new" -rsync -az --timeout=30 "$TMP_DIR/application.properties" "$TEST_HOST:$REMOTE_SERVER_DIR/application.properties.new" -rsync -az --timeout=30 "$TMP_DIR/shine-server.service" "$TEST_HOST:/tmp/shine-server.service.new" - -echo "==> Применяем systemd unit и файлы сервера" -ssh "$TEST_HOST" "set -euo pipefail; \ - mv -f '$REMOTE_SERVER_DIR/shine-server.jar.new' '$REMOTE_SERVER_DIR/shine-server.jar'; \ - mv -f '$REMOTE_SERVER_DIR/application.properties.new' '$REMOTE_SERVER_DIR/application.properties'; \ - sudo mv -f /tmp/shine-server.service.new /etc/systemd/system/shine-server.service; \ - sudo chown root:root /etc/systemd/system/shine-server.service; \ - chmod 644 '$REMOTE_SERVER_DIR/application.properties'; \ - chmod 664 '$REMOTE_SERVER_DIR/shine-server.jar'; \ - mkdir -p '$REMOTE_LOGS_DIR'; \ - sudo chown -R player:player '$REMOTE_SERVER_DIR'; \ - touch '$REMOTE_LOGS_DIR/app.log'; \ - sudo systemctl daemon-reload; \ - sudo systemctl enable '$REMOTE_SERVICE_NAME'; \ - sudo systemctl restart '$REMOTE_SERVICE_NAME'" - -echo "==> Ждём порт 7070" -for _ in $(seq 1 50); do - if ssh "$TEST_HOST" "ss -ltn '( sport = :7070 )' | grep -q 7070"; then - echo "==> Порт 7070 поднялся" - break - fi - sleep 1 -done - -if ! ssh "$TEST_HOST" "ss -ltn '( sport = :7070 )' | grep -q 7070"; then - echo "ERROR: тестовый сервер не поднял порт 7070" >&2 - exit 1 -fi - -echo "==> Проверяем статус сервиса" -ssh "$TEST_HOST" "sudo systemctl --no-pager --full status '$REMOTE_SERVICE_NAME' | sed -n '1,20p'" - -echo "test_server_deploy_done" diff --git a/deploy_shine-ui_test.sh b/deploy_shine-ui_test.sh deleted file mode 100644 index 411cca3..0000000 --- a/deploy_shine-ui_test.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -TEST_HOST="${TEST_HOST:-player@93.170.12.154}" -TARGET_DOMAIN="${TARGET_DOMAIN:-test.shineup.me}" -REMOTE_UI_DIR="${REMOTE_UI_DIR:-/home/player/SHiNE/shine-ui}" - -echo "==> Подготовка Caddy для $TARGET_DOMAIN" -TEST_HOST="$TEST_HOST" \ -TARGET_DOMAIN="$TARGET_DOMAIN" \ -REMOTE_UI_DIR="$REMOTE_UI_DIR" \ -bash "$(dirname "$0")/scripts/install_test_caddyfile.sh" - -echo "==> Деплой UI на $TARGET_DOMAIN" -REMOTE_HOST="$TEST_HOST" \ -REMOTE_UI_DIR="$REMOTE_UI_DIR" \ -EXPECTED_CADDY_UI_ROOT="$REMOTE_UI_DIR" \ -EXPECTED_CADDY_SITE="$TARGET_DOMAIN" \ -TARGET_URL="https://$TARGET_DOMAIN" \ -bash "$(dirname "$0")/deploy_shine-PWA.sh" diff --git a/docs/Pending_Features/2026-07-09_0815_4_test_servers_devnet_vps.md b/docs/Pending_Features/2026-07-09_0815_4_test_servers_devnet_vps.md index 917c2b8..623ef4c 100644 --- a/docs/Pending_Features/2026-07-09_0815_4_test_servers_devnet_vps.md +++ b/docs/Pending_Features/2026-07-09_0815_4_test_servers_devnet_vps.md @@ -36,4 +36,4 @@ ## Примечание Подробная схема размещения описана в: -- [Dev_Docs/deploy/test-server/178.208.90.249_quad_devnet.md](/home/ai/work/SHiNE/SHiNE-server-sha256/Dev_Docs/deploy/test-server/178.208.90.249_quad_devnet.md) +- [docs/deploy/test-server/178.208.90.249_quad_devnet.md](/home/ai/work/SHiNE/SHiNE-server-sha256/docs/deploy/test-server/178.208.90.249_quad_devnet.md) diff --git a/docs/deploy/README.md b/docs/deploy/README.md index f2d66a5..0986ae4 100644 --- a/docs/deploy/README.md +++ b/docs/deploy/README.md @@ -23,32 +23,23 @@ - SSH: `player@193.8.215.70` - Домен: `server2.shineup.me` - IP: `193.8.215.70` -- Reserve test (temporarily down): - - SSH: `player@93.170.12.154` - - Домен: `test.shineup.me` - - IP: `93.170.12.154` - ## Локальные команды - Default server deploy: `./gradlew deployServer` или `./gradlew deployServerTest2` - Default UI deploy: `./gradlew deployUI` или `./gradlew deployUITest2` - Production server deploy: `./gradlew deployServerProduction` - Production UI deploy: `./gradlew deployUIProduction` -- Reserve test server deploy: `./gradlew deployServerTest` -- Reserve test UI deploy: `./gradlew deployUITest` - Локальный запуск: `./gradlew startLocal` ## Отдельные тестовые VPS - Отдельный стенд с 4 devnet-серверами на одном VPS описан в: - - `Dev_Docs/deploy/test-server/README.md` + - `docs/deploy/test-server/README.md` ## Политика подтверждений - `shineup.me` и `server2.shineup.me` считать production-контурами. - Любые изменения на production-контурах, включая deploy сервера, deploy UI, конфиги, перезапуски и миграции, делать только после отдельного явного подтверждения пользователя. -- `test.shineup.me` считать резервным тестовым хостом, который сейчас временно не работает. - ## Second production deploy (`server2.shineup.me`) - Это второй production-сервер SHiNE. @@ -64,13 +55,6 @@ - `deployUI` / `deployUITest2` публикуют UI в `/home/player/SHiNE/shine-ui` на `193.8.215.70`. - Важно: историческое имя `deployUITest2` вводит в заблуждение. По умолчанию эта задача деплоит на `server2.shineup.me`, а не на `t2.shineup.me`. -## Reserve test deploy (`test.shineup.me`) - -- `test.shineup.me` считается резервным тестовым сервером. -- Сейчас он помечен как временно неработающий. -- Его настройки и адрес не менять без отдельной задачи. -- Задачи `deployServerTest` и `deployUITest` считаются резервными и требуют отдельной причины. - ## UI-деплой и Caddy (обязательно) - Целевая директория UI-деплоя: `/home/player/SHiNE/shine-ui`. diff --git a/docs/deploy/servers/93.170.12.154_rapsberry.md b/docs/deploy/servers/93.170.12.154_rapsberry.md deleted file mode 100644 index 370281d..0000000 --- a/docs/deploy/servers/93.170.12.154_rapsberry.md +++ /dev/null @@ -1,41 +0,0 @@ -# Сервер `93.170.12.154` — резервный test (`test.shineup.me`) - -- Пользователь: `player` -- Каталог SHiNE: `/home/player/SHiNE` -- Домен: `test.shineup.me` -- Роль: резервный тестовый сервер -- UI публикация для Caddy: `/home/player/SHiNE/shine-ui` -- Сервер: `/home/player/SHiNE/shine-server/shine-server.jar` -- Данные: `/home/player/SHiNE/shine-server/data/` - - `shine.sqlite` - - `*.bch` -- Логи сервера: `/home/player/SHiNE/shine-server/logs/app.log` - -## Сервисы - -- `shine-server.service` (systemd) -- `caddy.service` (systemd) - -## Статус - -- Резервный тестовый сервер для SHiNE. -- Сейчас помечен как временно неработающий. -- Источник данных для тестовой БД: production `shineup.me`. -- Пока не использовать для обычного deploy. -- Основной прод-сервер: `shineup.me` (`185.229.109.118`). - -## Caddy - -- Конфиг: `/etc/caddy/Caddyfile` -- Настройки: - - `no-store/no-cache` заголовки; - - `try_files {path} /index.html` (SPA fallback); - - `reverse_proxy /ws* -> 127.0.0.1:7070`; - - целевой сайт: `test.shineup.me`. - -## Deploy - -- Резервные задачи: - - `./gradlew deployServerTest` - - `./gradlew deployUITest` -- Эти задачи пока не использовать без отдельной причины. diff --git a/docs/deploy/test-server/README.md b/docs/deploy/test-server/README.md index e51e7ee..33f51f3 100644 --- a/docs/deploy/test-server/README.md +++ b/docs/deploy/test-server/README.md @@ -9,4 +9,4 @@ - внешний HTTPS и маршрутизацию `/ws` обслуживает один общий `Caddy` Детальное описание: -- [178.208.90.249_quad_devnet.md](/home/ai/work/SHiNE/SHiNE-server-sha256/Dev_Docs/deploy/test-server/178.208.90.249_quad_devnet.md) +- [178.208.90.249_quad_devnet.md](/home/ai/work/SHiNE/SHiNE-server-sha256/docs/deploy/test-server/178.208.90.249_quad_devnet.md) diff --git a/scripts/install_test_caddyfile.sh b/scripts/install_test_caddyfile.sh deleted file mode 100644 index 9c47d92..0000000 --- a/scripts/install_test_caddyfile.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -TEST_HOST="${TEST_HOST:-player@93.170.12.154}" -TARGET_DOMAIN="${TARGET_DOMAIN:-test.shineup.me}" -REMOTE_UI_DIR="${REMOTE_UI_DIR:-/home/player/SHiNE/shine-ui}" -REMOTE_CADDYFILE="${REMOTE_CADDYFILE:-/etc/caddy/Caddyfile}" - -TMP_DIR="$(mktemp -d)" - -cleanup() { - rm -rf "$TMP_DIR" -} -trap cleanup EXIT - -cat >"$TMP_DIR/Caddyfile" < Проверка SSH и sudo на $TEST_HOST" -ssh -o BatchMode=yes -o ConnectTimeout=10 "$TEST_HOST" "echo SSH OK" >/dev/null -ssh "$TEST_HOST" "sudo -n true" - -echo "==> Установка Caddy-конфига для $TARGET_DOMAIN" -scp -p "$TMP_DIR/Caddyfile" "$TEST_HOST:/tmp/shine-test-caddyfile.new" >/dev/null -ssh "$TEST_HOST" "sudo mkdir -p \"$(dirname "$REMOTE_CADDYFILE")\" && \ - sudo mv -f /tmp/shine-test-caddyfile.new \"$REMOTE_CADDYFILE\" && \ - sudo chown root:root \"$REMOTE_CADDYFILE\" && \ - sudo caddy validate --config \"$REMOTE_CADDYFILE\" && \ - sudo systemctl reload caddy" - -echo "==> Caddy настроен для $TARGET_DOMAIN"