Compare commits
| Author | SHA256 | Date | |
|---|---|---|---|
|
|
febdbc059e | ||
|
|
d6bc883520 | ||
|
|
b2d20671cd | ||
|
|
a72e2e7014 | ||
|
|
cf6ca1d96b | ||
|
|
9d1e49949a | ||
|
|
ea3b34e11e | ||
|
|
09dc55db0e | ||
|
|
85133db483 | ||
|
|
6fc7d75e17 | ||
|
|
be321813fa | ||
|
|
d2c0ecdf62 | ||
|
|
266a74ef79 | ||
|
|
18d27c0146 | ||
|
|
8c4997ee2e | ||
|
|
127c561a41 |
@@ -86,20 +86,18 @@
|
||||
- Обычные коммиты делать стандартным `git commit`; переменная `$GITEA_TOKEN` для коммитов не нужна и не используется.
|
||||
|
||||
## Deploy
|
||||
- Все документы и заметки по деплою хранить в папке `Dev_Docs/deploy/`.
|
||||
- Все документы и заметки по деплою хранить в папке `Deploy/`.
|
||||
- Production-хост SHiNE: `player@shineup.me` (`178.208.64.62`).
|
||||
- Основной test-хост SHiNE: `player@193.8.215.70` (`t.shineup.me`).
|
||||
- Резервный test-хост SHiNE: `player@93.170.12.154` (`test.shineup.me`).
|
||||
- Второй production-хост SHiNE: `player@193.8.215.70` (`server2.shineup.me`).
|
||||
- Базовый путь на сервере для SHiNE: `/home/player` (проекты SHiNE размещать в `/home/player/SHiNE/...`).
|
||||
- По возможности все справки, комментарии и примечания в конфигах/документах писать на русском языке.
|
||||
- Для операций `git push` при необходимости использовать токен из переменной окружения `$GITEA_TOKEN`.
|
||||
- Любые изменения и любой деплой на production `shineup.me` выполнять только после отдельного явного подтверждения пользователя.
|
||||
- Если пользователь пишет просто `задеплой` без уточнения production/test, по умолчанию деплоить на `t.shineup.me`.
|
||||
- Если пользователь пишет просто `задеплой` без уточнения production/test, по умолчанию деплоить на `server2.shineup.me`.
|
||||
- Default server deploy: `./gradlew deployServer` или `./gradlew deployServerTest2`.
|
||||
- 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`.
|
||||
|
||||
@@ -11,11 +11,9 @@
|
||||
и
|
||||
|
||||
- `player@193.8.215.70`
|
||||
- домен `t.shineup.me`
|
||||
- домен `server2.shineup.me`
|
||||
- IP `193.8.215.70`
|
||||
|
||||
Отдельно резервный хост `test.shineup.me` сейчас помечен как временно неработающий.
|
||||
|
||||
## 1. Основной production-хост
|
||||
|
||||
- SSH: `player@shineup.me`
|
||||
@@ -55,7 +53,7 @@ Deploy:
|
||||
## 2. Второй production-сервер
|
||||
|
||||
- SSH: `player@193.8.215.70`
|
||||
- домен: `t.shineup.me`
|
||||
- домен: `server2.shineup.me`
|
||||
- IP: `193.8.215.70`
|
||||
- пользователь: `player`
|
||||
- базовый путь: `/home/player`
|
||||
@@ -89,7 +87,6 @@ Deploy:
|
||||
|
||||
Не production:
|
||||
|
||||
- `test.shineup.me` (`93.170.12.154`) — резервный хост, временно не работает
|
||||
- `t1.shineup.me`
|
||||
- `t2.shineup.me`
|
||||
- `t3.shineup.me`
|
||||
|
||||
@@ -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-контур и связанные публичные публикации.
|
||||
|
||||
Ниже краткая сводка.
|
||||
@@ -17,13 +17,8 @@
|
||||
- IP `178.208.64.62`
|
||||
- Второй production SHiNE:
|
||||
- `player@193.8.215.70`
|
||||
- домен `t.shineup.me`
|
||||
- домен `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-инстанса:
|
||||
@@ -35,7 +30,6 @@
|
||||
|
||||
## Важно
|
||||
|
||||
- Production-контура SHiNE сейчас два: `shineup.me` и `t.shineup.me`.
|
||||
- `test.shineup.me` сейчас помечен как временно неработающий резервный test-хост.
|
||||
- Production-контура SHiNE сейчас два: `shineup.me` и `server2.shineup.me`.
|
||||
- `t1..t4.shineup.me` — это отдельные тестовые/devnet-контуры, не production.
|
||||
- Любые изменения на `shineup.me` делать только после отдельного подтверждения пользователя.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# Тестовые серверы SHiNE
|
||||
|
||||
Этот файл описывает тестовые контуры, которые сейчас фигурируют в проекте.
|
||||
Этот файл описывает тестовые стенды, которые сейчас фигурируют в проекте.
|
||||
|
||||
## 1. Исторический `test2`, теперь второй production-сервер
|
||||
|
||||
- SSH: `player@193.8.215.70`
|
||||
- Домен: `t.shineup.me`
|
||||
- Домен: `server2.shineup.me`
|
||||
- IP: `193.8.215.70`
|
||||
- Назначение: второй production-контур SHiNE
|
||||
|
||||
@@ -33,35 +33,10 @@ Deploy:
|
||||
|
||||
- этот хост больше не считать test-контуром;
|
||||
- исторические имена deploy-задач `deployServerTest2` / `deployUITest2` сохранены, но сам хост считать production;
|
||||
- задача `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`
|
||||
@@ -124,13 +99,12 @@ Operational-нюанс:
|
||||
- при одновременных рестартах возможны `HTTP 429` от `api.devnet.solana.com`;
|
||||
- поэтому сервисы `shine-t1..shine-t4` лучше перезапускать по одному, с паузой.
|
||||
|
||||
## 4. Что проверять первым делом
|
||||
## 3. Что проверять первым делом
|
||||
|
||||
Для любого test-контура полезны такие быстрые проверки:
|
||||
|
||||
```bash
|
||||
curl -I https://t.shineup.me
|
||||
curl -I https://test.shineup.me
|
||||
curl -I https://server2.shineup.me
|
||||
curl -I https://t1.shineup.me
|
||||
curl -I https://t2.shineup.me
|
||||
curl -I https://t3.shineup.me
|
||||
@@ -143,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
|
||||
|
||||
@@ -59,7 +59,7 @@ shine-UI/server-ui.html
|
||||
./gradlew deployUI
|
||||
```
|
||||
|
||||
Default deploy по умолчанию идёт на `t.shineup.me` (`player@193.8.215.70`).
|
||||
Default deploy по умолчанию идёт на `server2.shineup.me` (`player@193.8.215.70`).
|
||||
|
||||
Production deploy:
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -35,6 +35,5 @@
|
||||
|
||||
## Какие документы потом обновить
|
||||
|
||||
- `Dev_Docs/deploy/`;
|
||||
- `Deploy/`;
|
||||
- `Dev_Docs/Blockchain/sync-between-servers.md`, если изменится поведение остановки/восстановления.
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
client.version=1.2.313
|
||||
server.version=1.2.292
|
||||
client.version=1.2.327
|
||||
server.version=1.2.298
|
||||
|
||||
@@ -207,12 +207,12 @@ tasks.register('deployUIProduction', Exec) {
|
||||
group = "!!deployment"
|
||||
description = "Production UI deploy: shineup.me (только после явного подтверждения)"
|
||||
workingDir = rootDir
|
||||
commandLine 'bash', file('deploy_shine-PWA.sh').absolutePath
|
||||
commandLine 'bash', file('deploy_shine-ui_production_shineupme.sh').absolutePath
|
||||
}
|
||||
|
||||
tasks.register('deployServer', Exec) {
|
||||
group = "!!deployment"
|
||||
description = "Default deploy server: t.shineup.me"
|
||||
description = "Default deploy server: server2.shineup.me"
|
||||
dependsOn shadowJar
|
||||
workingDir = rootDir
|
||||
environment 'LOCAL_JAR', file('SHiNE-server/build/libs/shine-server.jar').absolutePath
|
||||
@@ -221,38 +221,23 @@ tasks.register('deployServer', Exec) {
|
||||
|
||||
tasks.register('deployUI', Exec) {
|
||||
group = "!!deployment"
|
||||
description = "Default deploy UI: t.shineup.me"
|
||||
description = "Default deploy UI: server2.shineup.me"
|
||||
workingDir = rootDir
|
||||
commandLine 'bash', file('deploy_shine-ui_test2.sh').absolutePath
|
||||
commandLine 'bash', file('deploy_shine-ui_production_server2shineupme.sh').absolutePath
|
||||
}
|
||||
|
||||
tasks.register('deployServerTest2') {
|
||||
group = "!!deployment"
|
||||
description = "Явный алиас основного test deploy server: t.shineup.me"
|
||||
description = "Явный алиас второго production deploy server: server2.shineup.me"
|
||||
dependsOn tasks.named('deployServer')
|
||||
}
|
||||
|
||||
tasks.register('deployUITest2') {
|
||||
group = "!!deployment"
|
||||
description = "Явный алиас основного test deploy UI: t.shineup.me"
|
||||
description = "Явный алиас второго production deploy UI: server2.shineup.me"
|
||||
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"
|
||||
|
||||
@@ -28,6 +28,13 @@ TARGET_URL="${TARGET_URL:-https://${EXPECTED_CADDY_SITE}}"
|
||||
REMOTE_DIR="${REMOTE_UI_DIR}"
|
||||
DEPLOY_SERVER_LOGIN="${DEPLOY_SERVER_LOGIN:-}"
|
||||
DEPLOY_SERVER_ADDRESS="${DEPLOY_SERVER_ADDRESS:-}"
|
||||
DEPLOY_SOLANA_CLUSTER="${DEPLOY_SOLANA_CLUSTER:-}"
|
||||
DEPLOY_SOLANA_ENDPOINT="${DEPLOY_SOLANA_ENDPOINT:-}"
|
||||
DEPLOY_SOLANA_CLUSTER_NORMALIZED="$DEPLOY_SOLANA_CLUSTER"
|
||||
|
||||
if [[ "$DEPLOY_SOLANA_CLUSTER_NORMALIZED" == "mainnet" ]]; then
|
||||
DEPLOY_SOLANA_CLUSTER_NORMALIZED="mainnet-beta"
|
||||
fi
|
||||
|
||||
cleanup() {
|
||||
rm -rf "$TMP_DIR"
|
||||
@@ -52,6 +59,12 @@ if [[ -f "$DEPLOY_CONFIG_FILE" ]]; then
|
||||
if [[ -n "$DEPLOY_SERVER_ADDRESS" ]]; then
|
||||
perl -0pi -e "s/export const defaultServerAddress = '.*?';/export const defaultServerAddress = '$DEPLOY_SERVER_ADDRESS';/s" "$DEPLOY_CONFIG_FILE"
|
||||
fi
|
||||
if [[ -n "$DEPLOY_SOLANA_CLUSTER_NORMALIZED" ]]; then
|
||||
perl -0pi -e "s/export const defaultSolanaCluster = '.*?';/export const defaultSolanaCluster = '$DEPLOY_SOLANA_CLUSTER_NORMALIZED';/s" "$DEPLOY_CONFIG_FILE"
|
||||
fi
|
||||
if [[ -n "$DEPLOY_SOLANA_ENDPOINT" ]]; then
|
||||
perl -0pi -e "s|export const defaultSolanaEndpoint = '.*?';|export const defaultSolanaEndpoint = '$DEPLOY_SOLANA_ENDPOINT';|s" "$DEPLOY_CONFIG_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
INDEX_FILE="$TMP_DIR/index.html"
|
||||
|
||||
@@ -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" <<EOF
|
||||
[Unit]
|
||||
Description=SHiNE Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=player
|
||||
Group=player
|
||||
WorkingDirectory=$REMOTE_SERVER_DIR
|
||||
ExecStart=/usr/bin/java -Dserver.port=7070 -jar $REMOTE_SERVER_DIR/shine-server.jar
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
StandardOutput=append:$REMOTE_LOGS_DIR/app.log
|
||||
StandardError=append:$REMOTE_LOGS_DIR/app.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo "==> Останавливаем текущий сервер на тестовом хосте"
|
||||
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"
|
||||
@@ -2,7 +2,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_HOST="${TARGET_HOST:-player@193.8.215.70}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-t.shineup.me}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-server2.shineup.me}"
|
||||
REMOTE_BASE="${REMOTE_BASE:-/home/player/SHiNE}"
|
||||
REMOTE_SERVER_DIR="${REMOTE_SERVER_DIR:-$REMOTE_BASE/shine-server}"
|
||||
REMOTE_DATA_DIR="${REMOTE_DATA_DIR:-$REMOTE_SERVER_DIR/data}"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_HOST="${TARGET_HOST:-player@193.8.215.70}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-t.shineup.me}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-server2.shineup.me}"
|
||||
REMOTE_UI_DIR="${REMOTE_UI_DIR:-/home/player/SHiNE/shine-ui}"
|
||||
|
||||
TARGET_HOST="$TARGET_HOST" TARGET_DOMAIN="$TARGET_DOMAIN" REMOTE_UI_DIR="$REMOTE_UI_DIR" \
|
||||
@@ -12,8 +12,10 @@ REMOTE_HOST="$TARGET_HOST" \
|
||||
REMOTE_UI_DIR="$REMOTE_UI_DIR" \
|
||||
EXPECTED_CADDY_UI_ROOT="$REMOTE_UI_DIR" \
|
||||
EXPECTED_CADDY_SITE="$TARGET_DOMAIN" \
|
||||
DEPLOY_SERVER_LOGIN="tshineupme" \
|
||||
DEPLOY_SERVER_LOGIN="server2shineupme" \
|
||||
DEPLOY_SERVER_ADDRESS="$TARGET_DOMAIN" \
|
||||
DEPLOY_SOLANA_CLUSTER="mainnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://solana-rpc.publicnode.com" \
|
||||
TARGET_URL="https://$TARGET_DOMAIN" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REMOTE_HOST="player@shineup.me" \
|
||||
REMOTE_UI_DIR="/home/player/SHiNE/shine-ui" \
|
||||
EXPECTED_CADDY_UI_ROOT="/home/player/SHiNE/shine-ui" \
|
||||
EXPECTED_CADDY_SITE="shineup.me" \
|
||||
DEPLOY_SERVER_LOGIN="shineupme" \
|
||||
DEPLOY_SERVER_ADDRESS="shineup.me" \
|
||||
DEPLOY_SOLANA_CLUSTER="mainnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://solana-rpc.publicnode.com" \
|
||||
TARGET_URL="https://shineup.me" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REMOTE_HOST="player@178.208.90.249" \
|
||||
REMOTE_UI_DIR="/home/player/t1/UI" \
|
||||
EXPECTED_CADDY_UI_ROOT="/home/player/t1/UI" \
|
||||
EXPECTED_CADDY_SITE="t1.shineup.me" \
|
||||
DEPLOY_SERVER_LOGIN="server_t1" \
|
||||
DEPLOY_SERVER_ADDRESS="t1.shineup.me" \
|
||||
DEPLOY_SOLANA_CLUSTER="devnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://api.devnet.solana.com" \
|
||||
TARGET_URL="https://t1.shineup.me" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REMOTE_HOST="player@178.208.90.249" \
|
||||
REMOTE_UI_DIR="/home/player/t2/UI" \
|
||||
EXPECTED_CADDY_UI_ROOT="/home/player/t2/UI" \
|
||||
EXPECTED_CADDY_SITE="t2.shineup.me" \
|
||||
DEPLOY_SERVER_LOGIN="server_t2" \
|
||||
DEPLOY_SERVER_ADDRESS="t2.shineup.me" \
|
||||
DEPLOY_SOLANA_CLUSTER="devnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://api.devnet.solana.com" \
|
||||
TARGET_URL="https://t2.shineup.me" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REMOTE_HOST="player@178.208.90.249" \
|
||||
REMOTE_UI_DIR="/home/player/t3/UI" \
|
||||
EXPECTED_CADDY_UI_ROOT="/home/player/t3/UI" \
|
||||
EXPECTED_CADDY_SITE="t3.shineup.me" \
|
||||
DEPLOY_SERVER_LOGIN="server_t3" \
|
||||
DEPLOY_SERVER_ADDRESS="t3.shineup.me" \
|
||||
DEPLOY_SOLANA_CLUSTER="devnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://api.devnet.solana.com" \
|
||||
TARGET_URL="https://t3.shineup.me" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REMOTE_HOST="player@178.208.90.249" \
|
||||
REMOTE_UI_DIR="/home/player/t4/UI" \
|
||||
EXPECTED_CADDY_UI_ROOT="/home/player/t4/UI" \
|
||||
EXPECTED_CADDY_SITE="t4.shineup.me" \
|
||||
DEPLOY_SERVER_LOGIN="server_t4" \
|
||||
DEPLOY_SERVER_ADDRESS="t4.shineup.me" \
|
||||
DEPLOY_SOLANA_CLUSTER="devnet" \
|
||||
DEPLOY_SOLANA_ENDPOINT="https://api.devnet.solana.com" \
|
||||
TARGET_URL="https://t4.shineup.me" \
|
||||
bash "$(dirname "$0")/deploy_shine-PWA.sh"
|
||||
@@ -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"
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
# 2026-06-26 17:45:18 +0400
|
||||
- Базовый коммит-ориентир: `44a1ba0`.
|
||||
- На `t.shineup.me` подтверждена рабочая схема startup sync и full-resync:
|
||||
- На `server2.shineup.me` подтверждена рабочая схема startup sync и full-resync:
|
||||
- после рестарта сервер добивает `BlockchainTmpRecovery` и `BlockchainResyncRecovery`;
|
||||
- `aidartest-001` успешно подтягивается с `shineup.me`;
|
||||
- итоговое локальное состояние по `aidartest-001` дошло до `last_block_number=13`.
|
||||
|
||||
@@ -244,7 +244,7 @@ Full resync запускается только тогда, когда:
|
||||
|
||||
### 8.1 Практическая проверка на тестовом сервере
|
||||
|
||||
Проверка на `t.shineup.me` показала, что текущая схема действительно поднимает цепочку при старте:
|
||||
Проверка на `server2.shineup.me` показала, что текущая схема действительно поднимает цепочку при старте:
|
||||
|
||||
- после рестарта сервер сначала проходит `BlockchainTmpRecovery`;
|
||||
- затем обрабатывает `BlockchainResyncRecovery`;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
# Адаптация верхней панели экрана «Связи»
|
||||
|
||||
## Краткое описание
|
||||
- Экран графа связей больше не расширяется за границы контейнера. Верхняя панель ограничена границами экрана, чтобы кнопки возврата, поиска и справки не обрезались на узких устройствах.
|
||||
|
||||
## Что проверить
|
||||
- Открыть экран «Связи» на ширине около 320, 390 и 794 px.
|
||||
- Убедиться, что кнопки возврата, «Найти» и «?» полностью видны и нажимаются.
|
||||
- Убедиться, что фильтры и граф связей остаются доступными.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Верхние действия не выходят за левую или правую границу приложения.
|
||||
- Заголовок при нехватке места сокращается, а не сдвигает кнопки за край.
|
||||
|
||||
## Статус
|
||||
- `pending` — локальная проверка на ширине 320 и 794 px пройдена; нужна ручная проверка после публикации на тестовом или production-стенде.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Кнопка поиска каналов
|
||||
|
||||
## Краткое описание
|
||||
- Emoji-иконка поиска в верхней панели «Каналов» заменена на контурную кнопку-лупу в стиле интерфейса.
|
||||
|
||||
## Что проверить
|
||||
- Открыть список каналов.
|
||||
- Убедиться, что кнопка поиска видна рядом с кнопкой создания канала и имеет подсказку «Найти канал».
|
||||
- Нажать кнопку и убедиться, что открывается прежнее окно поиска каналов.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Кнопка выглядит как часть общей тёмной панели и не использует emoji.
|
||||
- Поиск каналов работает без изменений.
|
||||
|
||||
## Статус
|
||||
- `pending` — локальная визуальная проверка и открытие окна поиска пройдены; нужна ручная проверка после публикации на тестовом или production-стенде.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Локальный тестовый вход
|
||||
|
||||
## Краткое описание
|
||||
- На `localhost`, `127.0.0.1` и `::1` доступна кнопка «Локальный тестовый вход».
|
||||
- Она создаёт только локальный демо-сеанс `local-tester`; пароль, серверная сессия и production не используются.
|
||||
- Экран личных сообщений и список каналов открывают автономные локальные состояния без запроса к серверу.
|
||||
- Профиль заполняется демонстрационными данными, чтобы интерфейс можно было проверить без серверного пользователя.
|
||||
|
||||
## Что проверить
|
||||
- Открыть локальный UI и нажать «Локальный тестовый вход».
|
||||
- Проверить переход к списку сообщений и доступ к экранам профиля, каналов, связей и настроек.
|
||||
- Обновить страницу и убедиться, что локальный сеанс сохраняется.
|
||||
- Выйти из сеанса и убедиться, что снова открывается экран старта.
|
||||
|
||||
## Ожидаемый результат
|
||||
- Локальный режим даёт возможность изучить интерфейс без реальной авторизации.
|
||||
- На `shineup.me` и тестовых доменах кнопка отсутствует.
|
||||
|
||||
## Статус
|
||||
- `pending` — локальный вход, переход к профилю и демонстрационные каналы проверены; нужна ручная проверка выхода из сеанса после публикации на тестовом или production-стенде.
|
||||
@@ -1,15 +0,0 @@
|
||||
# Регистрация: глаз у пароля, автопроверка логина и сохранение связки с 12 словами
|
||||
|
||||
- краткое описание:
|
||||
На экране регистрации добавлены кнопка-глаз у поля пароля, автопроверка логина с задержкой около 1.5 секунды и сохранение связки между обычным полем пароля и режимом `12 слов`, пока пользователь вручную не изменит пароль.
|
||||
- что проверять:
|
||||
Открыть экран регистрации и убедиться, что справа от поля пароля есть квадратная кнопка-глаз, которая переключает скрытый и открытый показ пароля.
|
||||
Включить режим `Представить пароль в виде 12 слов`, заполнить несколько или все слова, затем выключить режим и проверить, что в поле пароля появился склеенный пароль.
|
||||
Снова включить режим `12 слов` без ручного редактирования пароля и проверить, что ранее введённые слова восстановились.
|
||||
После этого вручную изменить пароль в обычном поле и снова включить режим `12 слов` — набор слов должен быть очищен.
|
||||
Ввести логин и перестать печатать примерно на 1.5 секунды — под полем логина должен автоматически появиться актуальный статус доступности.
|
||||
Проверить, что кнопка `Проверить логин` находится ниже статуса, а текст про частые вопросы снизу страницы отсутствует.
|
||||
- ожидаемый результат:
|
||||
Регистрация ведёт себя предсказуемо: пароль можно показать или скрыть, слова не теряются при простом скрытии режима `12 слов`, а статус логина обновляется автоматически и вручную.
|
||||
- статус:
|
||||
pending
|
||||
@@ -21,35 +21,26 @@
|
||||
- IP: `178.208.64.62`
|
||||
- Second production:
|
||||
- SSH: `player@193.8.215.70`
|
||||
- Домен: `t.shineup.me`
|
||||
- Домен: `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` и `t.shineup.me` считать production-контурами.
|
||||
- `shineup.me` и `server2.shineup.me` считать production-контурами.
|
||||
- Любые изменения на production-контурах, включая deploy сервера, deploy UI, конфиги, перезапуски и миграции, делать только после отдельного явного подтверждения пользователя.
|
||||
- `test.shineup.me` считать резервным тестовым хостом, который сейчас временно не работает.
|
||||
|
||||
## Second production deploy (`t.shineup.me`)
|
||||
## Second production deploy (`server2.shineup.me`)
|
||||
|
||||
- Это второй production-сервер SHiNE.
|
||||
- Исторические задачи `deployServer`, `deployUI`, `deployServerTest2`, `deployUITest2` по-прежнему могут указывать сюда.
|
||||
@@ -60,15 +51,9 @@
|
||||
- перенос `application.properties` с production с поправкой `server.ui.indexPath` на `/home/player/SHiNE/shine-ui/index.html`;
|
||||
- установку `systemd` unit на `193.8.215.70`;
|
||||
- перезапуск `shine-server.service`;
|
||||
- установку/проверку Caddy для `t.shineup.me`.
|
||||
- установку/проверку Caddy для `server2.shineup.me`.
|
||||
- `deployUI` / `deployUITest2` публикуют UI в `/home/player/SHiNE/shine-ui` на `193.8.215.70`.
|
||||
|
||||
## Reserve test deploy (`test.shineup.me`)
|
||||
|
||||
- `test.shineup.me` считается резервным тестовым сервером.
|
||||
- Сейчас он помечен как временно неработающий.
|
||||
- Его настройки и адрес не менять без отдельной задачи.
|
||||
- Задачи `deployServerTest` и `deployUITest` считаются резервными и требуют отдельной причины.
|
||||
- Важно: историческое имя `deployUITest2` вводит в заблуждение. По умолчанию эта задача деплоит на `server2.shineup.me`, а не на `t2.shineup.me`.
|
||||
|
||||
## UI-деплой и Caddy (обязательно)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Сервер `193.8.215.70` — второй production (`t.shineup.me`)
|
||||
# Сервер `193.8.215.70` — второй production (`server2.shineup.me`)
|
||||
|
||||
- Пользователь: `player`
|
||||
- Домен: `t.shineup.me`
|
||||
- Логин сервера: `tshineupme`
|
||||
- Домен: `server2.shineup.me`
|
||||
- Логин сервера: `server2shineupme`
|
||||
- Каталог SHiNE: `/home/player/SHiNE`
|
||||
- UI публикация для Caddy: `/home/player/SHiNE/shine-ui`
|
||||
- Сервер: `/home/player/SHiNE/shine-server/shine-server.jar`
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
- Конфиг: `/etc/caddy/Caddyfile`
|
||||
- Сайты:
|
||||
- `t.shineup.me`
|
||||
- `server2.shineup.me`
|
||||
- `agent.shiningpeople.ru`
|
||||
- Для `t.shineup.me`:
|
||||
- Для `server2.shineup.me`:
|
||||
- `root * /home/player/SHiNE/shine-ui`
|
||||
- `try_files {path} /index.html`
|
||||
- `reverse_proxy /ws* -> 127.0.0.1:7070`
|
||||
|
||||
@@ -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`
|
||||
- Эти задачи пока не использовать без отдельной причины.
|
||||
@@ -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)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_HOST="${TARGET_HOST:-player@193.8.215.70}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-t.shineup.me}"
|
||||
TARGET_DOMAIN="${TARGET_DOMAIN:-server2.shineup.me}"
|
||||
REMOTE_UI_DIR="${REMOTE_UI_DIR:-/home/player/SHiNE/shine-ui}"
|
||||
REMOTE_CADDYFILE="${REMOTE_CADDYFILE:-/etc/caddy/Caddyfile}"
|
||||
|
||||
|
||||
@@ -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" <<EOF
|
||||
{
|
||||
auto_https disable_redirects
|
||||
}
|
||||
|
||||
$TARGET_DOMAIN {
|
||||
encode zstd gzip
|
||||
|
||||
@ws path /ws /ws/*
|
||||
handle @ws {
|
||||
reverse_proxy 127.0.0.1:7070
|
||||
}
|
||||
|
||||
handle {
|
||||
root * $REMOTE_UI_DIR
|
||||
try_files {path} /index.html
|
||||
file_server
|
||||
header -Etag
|
||||
header {
|
||||
Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
|
||||
Pragma "no-cache"
|
||||
Expires "0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:80 {
|
||||
encode zstd gzip
|
||||
|
||||
@ws path /ws /ws/*
|
||||
handle @ws {
|
||||
reverse_proxy 127.0.0.1:7070
|
||||
}
|
||||
|
||||
handle {
|
||||
root * $REMOTE_UI_DIR
|
||||
try_files {path} /index.html
|
||||
file_server
|
||||
header -Etag
|
||||
header {
|
||||
Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
|
||||
Pragma "no-cache"
|
||||
Expires "0"
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "==> Проверка 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"
|
||||
@@ -0,0 +1,9 @@
|
||||
# Third-party notices
|
||||
|
||||
## Telegram Animated Emojis
|
||||
|
||||
Animated emoji previews in SHiNE use the public catalog from Tarikul-Islam-Anik.
|
||||
|
||||
Source: https://github.com/Tarikul-Islam-Anik/Telegram-Animated-Emojis
|
||||
|
||||
The repository README states that the media files are sourced from Emojipedia and that rights to the Telegram media belong to Telegram.org. Review those rights before public distribution.
|
||||
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 8.9 KiB |