chore(deploy): новый прод-контур 93.170.12.154, единые deploy task и docs
This commit is contained in:
parent
9c35567389
commit
7986184111
13
AGENTS.md
13
AGENTS.md
@ -24,16 +24,15 @@
|
|||||||
- Базовое правило инкремента: `+1` по последнему числовому сегменту (patch), если не оговорено иное.
|
- Базовое правило инкремента: `+1` по последнему числовому сегменту (patch), если не оговорено иное.
|
||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
- Все документы и заметки по деплою хранить в папке `Deploy Server/`.
|
- Все документы и заметки по деплою хранить в папке `Dev_Docs/deploy/`.
|
||||||
- Для сервера `VPS-05` (`45.136.124.227`) доступ выполнять через пользователя `player`.
|
- Базовый целевой хост для деплоя по умолчанию: `player@93.170.12.154` (`shineup.me`).
|
||||||
- Базовый целевой хост для деплоя по умолчанию: `player@45.136.124.227`.
|
|
||||||
- Базовый путь на сервере для SHiNE: `/home/player` (проекты SHiNE размещать в `/home/player/SHiNE/...`).
|
- Базовый путь на сервере для SHiNE: `/home/player` (проекты SHiNE размещать в `/home/player/SHiNE/...`).
|
||||||
- По возможности все справки, комментарии и примечания в конфигах/документах писать на русском языке.
|
- По возможности все справки, комментарии и примечания в конфигах/документах писать на русском языке.
|
||||||
- Для операций `git push` использовать токен из переменной окружения `$GITEA_TOKEN`.
|
- Для операций `git push` использовать токен из переменной окружения `$GITEA_TOKEN`.
|
||||||
- Деплой UI выполнять только в один целевой контур за запуск: либо `prod` (основной), либо один выбранный тестовый (`ui_1`, `ui_2`, `ui_3`, `ui_drygmira`, `ui_milana`, `ui_aidar`).
|
- Для серверного деплоя использовать один gradle task: `./gradlew deployServer`.
|
||||||
- Если из запроса неясно, куда деплоить, обязательно сначала спросить пользователя, какой именно целевой контур нужен.
|
- Для UI деплоя использовать один gradle task: `./gradlew deployUI`.
|
||||||
- По умолчанию сначала деплой и проверка на тестовом контуре; на основной (`prod`) деплоить только после явного подтверждения пользователя, что версия проверена и готова.
|
- Для локального запуска использовать `./gradlew startLocal` (или `startLocalWithBuild`).
|
||||||
- При уточняющем вопросе отдельно предупреждать: деплой на основной выполнять только если точно подтверждена корректная работа.
|
- Сначала предлагать локальную проверку, а деплой на сервер выполнять по запросу пользователя.
|
||||||
|
|
||||||
## Логи звонков (установка соединения)
|
## Логи звонков (установка соединения)
|
||||||
- Специальный поток диагностики установки звонков идёт через `CallDeliveryReport` (клиент → сервер).
|
- Специальный поток диагностики установки звонков идёт через `CallDeliveryReport` (клиент → сервер).
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
# Деплой на `93.170.12.154`: Caddy + systemd
|
||||||
|
|
||||||
|
- Статус: `pending`
|
||||||
|
|
||||||
|
## Что сделано
|
||||||
|
|
||||||
|
- Выполнен деплой UI и серверной части на `player@93.170.12.154`.
|
||||||
|
- Создана структура:
|
||||||
|
- `/home/player/SHiNE/caddy`
|
||||||
|
- `/home/player/SHiNE/SHiNE-server`
|
||||||
|
- `/home/player/SHiNE/SHiNE-UI`
|
||||||
|
- Перенесены локальные данные:
|
||||||
|
- `data/shine.sqlite`
|
||||||
|
- `data/*.bch`
|
||||||
|
- Настроен `shine-server.service` через `systemd`.
|
||||||
|
- Настроен `Caddy`:
|
||||||
|
- no-cache заголовки;
|
||||||
|
- SPA fallback на `index.html`;
|
||||||
|
- проксирование `/ws` на `127.0.0.1:7070`.
|
||||||
|
- Добавлена документация в `Dev_Docs/deploy/` и файл по legacy-серверу `45.136.124.227`.
|
||||||
|
|
||||||
|
## Что проверять
|
||||||
|
|
||||||
|
- Открыть `https://shineup.me/start-view`.
|
||||||
|
- Обновить страницу (`Ctrl+F5`) на роуте вида `/start-view` и убедиться, что нет 404.
|
||||||
|
- Проверить авторизацию и базовые действия в UI.
|
||||||
|
- Проверить, что вебсокет соединение устанавливается.
|
||||||
|
|
||||||
|
## Ожидаемый результат
|
||||||
|
|
||||||
|
- UI и сервер доступны на новом хосте.
|
||||||
|
- Сервисы `shine-server` и `caddy` в статусе `active`.
|
||||||
|
- Маршруты SPA и no-cache работают как ожидается.
|
||||||
21
Dev_Docs/deploy/README.md
Normal file
21
Dev_Docs/deploy/README.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Деплой SHiNE (шаблон)
|
||||||
|
|
||||||
|
Этот раздел хранит актуальные инструкции по деплою.
|
||||||
|
|
||||||
|
## Базовый сервер
|
||||||
|
|
||||||
|
- SSH: `player@93.170.12.154`
|
||||||
|
- Домен: `shineup.me`
|
||||||
|
- Базовый путь: `/home/player/SHiNE`
|
||||||
|
|
||||||
|
## Локальные команды
|
||||||
|
|
||||||
|
- Деплой сервера: `./gradlew deployServer`
|
||||||
|
- Деплой UI: `./gradlew deployUI`
|
||||||
|
- Локальный запуск: `./gradlew startLocal`
|
||||||
|
|
||||||
|
## Обязательные правила
|
||||||
|
|
||||||
|
1. Перед серверным деплоем проверить локально.
|
||||||
|
2. При нестандартном деплое (другой хост, другая структура, ручные шаги) обязательно уточнить у пользователя, нужно ли обновить этот шаблон.
|
||||||
|
3. Если деплой-процесс изменился, этот файл и файлы в `servers/` обновлять в том же коммите.
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
# Сервер `45.136.124.227` (legacy)
|
||||||
|
|
||||||
|
- Исторический сервер SHiNE: `player@45.136.124.227`.
|
||||||
|
- Ранее на нём выполнялся рабочий деплой.
|
||||||
|
- Текущий статус (по данным пользователя): сервер недоступен, проблема на стороне провайдера, ответа нет второй день.
|
||||||
|
|
||||||
|
Использовать для текущих деплоев новый сервер: `player@93.170.12.154` (`shineup.me`).
|
||||||
24
Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md
Normal file
24
Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Сервер `93.170.12.154` (`shineup.me`)
|
||||||
|
|
||||||
|
- Пользователь: `player`
|
||||||
|
- Каталог SHiNE: `/home/player/SHiNE`
|
||||||
|
- UI исходник (после rsync): `/home/player/SHiNE/SHiNE-UI`
|
||||||
|
- UI публикация для Caddy: `/var/www/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)
|
||||||
|
|
||||||
|
## Caddy
|
||||||
|
|
||||||
|
- Конфиг: `/etc/caddy/Caddyfile`
|
||||||
|
- Настройки:
|
||||||
|
- `no-store/no-cache` заголовки;
|
||||||
|
- `try_files {path} /index.html` (SPA fallback);
|
||||||
|
- `reverse_proxy /ws* -> 127.0.0.1:7070`.
|
||||||
@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.73
|
client.version=1.2.74
|
||||||
server.version=1.2.67
|
server.version=1.2.68
|
||||||
|
|||||||
53
build.gradle
53
build.gradle
@ -191,58 +191,13 @@ tasks.register('deployServer', JavaExec) {
|
|||||||
dependsOn testClasses
|
dependsOn testClasses
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('deployServerWithBackupCleanAndTests') {
|
tasks.register('deployUI', Exec) {
|
||||||
group = "!!deployment"
|
group = "!!deployment"
|
||||||
description = "BLOCKED: удаление БД на проде запрещено, используйте только миграции"
|
description = "Deploy WEB UI (production: shineup.me)"
|
||||||
|
workingDir = rootDir
|
||||||
doLast {
|
commandLine 'bash', file('deploy_shine-PWA.sh').absolutePath
|
||||||
def msg = """
|
|
||||||
[BLOCKED] Удаление базы данных на продакшен-сервере отключено.
|
|
||||||
Причина: в базе уже есть пользовательские сообщения.
|
|
||||||
Дальше используйте только миграции схемы БД.
|
|
||||||
Задача остановлена намеренно.
|
|
||||||
""".stripIndent().trim()
|
|
||||||
println msg
|
|
||||||
throw new GradleException(msg)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register('deployServerNoCleanNoTests', JavaExec) {
|
|
||||||
group = "!!deployment"
|
|
||||||
description = "Build → upload to server → restart service (no data clean, no IT tests)"
|
|
||||||
|
|
||||||
classpath = sourceSets.test.runtimeClasspath
|
|
||||||
mainClass = "test.it.IT_DeployRestartNoCleanNoTestsMain"
|
|
||||||
|
|
||||||
// можно переопределить при запуске:
|
|
||||||
// ./gradlew deployServerNoCleanNoTests -Dit.remoteHost=...
|
|
||||||
dependsOn shadowJar
|
|
||||||
systemProperty "it.remoteHost", System.getProperty("it.remoteHost", "194.87.0.247")
|
|
||||||
systemProperty "it.remoteUser", System.getProperty("it.remoteUser", "user")
|
|
||||||
systemProperty "it.remoteDir", System.getProperty("it.remoteDir", "/home/user/docker/shine-server")
|
|
||||||
systemProperty "it.service", System.getProperty("it.service", "shine-server")
|
|
||||||
systemProperty "it.localJar", System.getProperty("it.localJar", "build/libs/shine-server.jar")
|
|
||||||
|
|
||||||
dependsOn testClasses
|
|
||||||
}
|
|
||||||
|
|
||||||
def registerWebDeployTask = { String taskName, String target, String descriptionText ->
|
|
||||||
tasks.register(taskName, Exec) {
|
|
||||||
group = "!!deployment"
|
|
||||||
description = descriptionText
|
|
||||||
workingDir = rootDir
|
|
||||||
commandLine 'bash', file('deploy_shine-PWA.sh').absolutePath, target
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registerWebDeployTask('deployWEB_Production', 'prod', 'Deploy WEB (production: shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_ui_1', 'ui_1', 'Deploy WEB (ui-1.shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_ui_2', 'ui_2', 'Deploy WEB (ui-2.shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_ui_3', 'ui_3', 'Deploy WEB (ui-3.shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_DrygMira', 'ui_drygmira', 'Deploy WEB (ui-drygmira.shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_Milana', 'ui_milana', 'Deploy WEB (ui-milana.shineup.me)')
|
|
||||||
registerWebDeployTask('deployWEB_Aidar', 'ui_aidar', 'Deploy WEB (ui-aidar.shineup.me)')
|
|
||||||
|
|
||||||
tasks.register('startLocal', Exec) {
|
tasks.register('startLocal', Exec) {
|
||||||
group = "!!run"
|
group = "!!run"
|
||||||
description = "Builds server, starts local WS server and local HTTP UI for end-to-end local testing"
|
description = "Builds server, starts local WS server and local HTTP UI for end-to-end local testing"
|
||||||
|
|||||||
@ -2,13 +2,12 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SRC_DIR="shine-UI"
|
SRC_DIR="shine-UI"
|
||||||
REMOTE_HOST="${REMOTE_HOST:-player@shineup.me}"
|
REMOTE_HOST="${REMOTE_HOST:-player@93.170.12.154}"
|
||||||
REMOTE_BASE_DIR="${REMOTE_BASE_DIR:-/home/player/SHiNE}"
|
REMOTE_BASE_DIR="${REMOTE_BASE_DIR:-/home/player/SHiNE}"
|
||||||
BUILD_VERSION="$(date -u +%Y%m%d%H%M%S)"
|
BUILD_VERSION="$(date -u +%Y%m%d%H%M%S)"
|
||||||
VERSION_FILE="VERSION.properties"
|
VERSION_FILE="VERSION.properties"
|
||||||
export BUILD_VERSION
|
export BUILD_VERSION
|
||||||
TMP_DIR="$(mktemp -d)"
|
TMP_DIR="$(mktemp -d)"
|
||||||
TARGET="${1:-prod}"
|
|
||||||
|
|
||||||
if [[ ! -f "$VERSION_FILE" ]]; then
|
if [[ ! -f "$VERSION_FILE" ]]; then
|
||||||
echo "ERROR: version file not found: $VERSION_FILE" >&2
|
echo "ERROR: version file not found: $VERSION_FILE" >&2
|
||||||
@ -22,43 +21,8 @@ if [[ -z "$CLIENT_VERSION" ]]; then
|
|||||||
fi
|
fi
|
||||||
export CLIENT_VERSION
|
export CLIENT_VERSION
|
||||||
|
|
||||||
TARGET_DIR="shine-UI"
|
TARGET_DIR="SHiNE-UI"
|
||||||
TARGET_URL="https://shineup.me"
|
TARGET_URL="https://shineup.me"
|
||||||
case "$TARGET" in
|
|
||||||
prod|production|main|shineup|shineup.me|shine-UI)
|
|
||||||
TARGET_DIR="shine-UI"
|
|
||||||
TARGET_URL="https://shineup.me"
|
|
||||||
;;
|
|
||||||
ui_1|ui-1|1|shine-UI_1)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_1"
|
|
||||||
TARGET_URL="https://ui-1.shineup.me"
|
|
||||||
;;
|
|
||||||
ui_2|ui-2|2|shine-UI_2)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_2"
|
|
||||||
TARGET_URL="https://ui-2.shineup.me"
|
|
||||||
;;
|
|
||||||
ui_3|ui-3|3|shine-UI_3)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_3"
|
|
||||||
TARGET_URL="https://ui-3.shineup.me"
|
|
||||||
;;
|
|
||||||
ui_drygmira|ui-drygmira|drygmira|shine-UI_drygmira)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_drygmira"
|
|
||||||
TARGET_URL="https://ui-drygmira.shineup.me"
|
|
||||||
;;
|
|
||||||
ui_milana|ui-milana|milana|shine-UI_milana)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_milana"
|
|
||||||
TARGET_URL="https://ui-milana.shineup.me"
|
|
||||||
;;
|
|
||||||
ui_aidar|ui-aidar|aidar|shine-UI_aidar)
|
|
||||||
TARGET_DIR="test-UI/shine-UI_aidar"
|
|
||||||
TARGET_URL="https://ui-aidar.shineup.me"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "ERROR: unknown target '$TARGET'" >&2
|
|
||||||
echo "Available targets: prod, ui_1, ui_2, ui_3, ui_drygmira, ui_milana, ui_aidar" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
REMOTE_DIR="${REMOTE_BASE_DIR}/${TARGET_DIR}"
|
REMOTE_DIR="${REMOTE_BASE_DIR}/${TARGET_DIR}"
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
|
|||||||
@ -1,38 +1,19 @@
|
|||||||
# Деплой UI по окружениям (Caddy sites)
|
# UI deploy
|
||||||
|
|
||||||
## Куда деплоит скрипт
|
Актуальный UI-деплой выполняется одной командой:
|
||||||
- Базовая директория на сервере: `/home/user/docker/caddyFile/sites`
|
|
||||||
- По умолчанию деплой идёт на production (`shineup.me`) в папку `shine-UI`.
|
|
||||||
|
|
||||||
## Gradle-команды
|
```bash
|
||||||
- Продакшен (`shineup.me`): `./gradlew deployWEB_Production`
|
./gradlew deployUI
|
||||||
- `ui-1.shineup.me`: `./gradlew deployWEB_ui_1`
|
```
|
||||||
- `ui-2.shineup.me`: `./gradlew deployWEB_ui_2`
|
|
||||||
- `ui-3.shineup.me`: `./gradlew deployWEB_ui_3`
|
|
||||||
- `ui-drygmira.shineup.me`: `./gradlew deployWEB_DrygMira`
|
|
||||||
- `ui-milana.shineup.me`: `./gradlew deployWEB_Milana`
|
|
||||||
- `ui-aidar.shineup.me`: `./gradlew deployWEB_Aidar`
|
|
||||||
|
|
||||||
## Прямой запуск скрипта
|
По умолчанию:
|
||||||
- `bash deploy_shine-PWA.sh prod`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_1`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_2`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_3`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_drygmira`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_milana`
|
|
||||||
- `bash deploy_shine-PWA.sh ui_aidar`
|
|
||||||
|
|
||||||
Также поддерживаются алиасы с дефисом:
|
- хост: `player@93.170.12.154`
|
||||||
- `bash deploy_shine-PWA.sh ui-1`
|
- домен: `https://shineup.me`
|
||||||
- `bash deploy_shine-PWA.sh ui-2`
|
- путь: `/home/player/SHiNE/SHiNE-UI`
|
||||||
- `bash deploy_shine-PWA.sh ui-3`
|
|
||||||
- `bash deploy_shine-PWA.sh ui-drygmira`
|
|
||||||
- `bash deploy_shine-PWA.sh ui-milana`
|
|
||||||
- `bash deploy_shine-PWA.sh ui-aidar`
|
|
||||||
|
|
||||||
## Поддержка переопределения
|
Переопределение при необходимости:
|
||||||
- `REMOTE_HOST` (по умолчанию `user@194.87.0.247`)
|
|
||||||
- `REMOTE_BASE_DIR` (по умолчанию `/home/user/docker/caddyFile/sites`)
|
|
||||||
|
|
||||||
Пример:
|
```bash
|
||||||
`REMOTE_HOST=user@194.87.0.247 REMOTE_BASE_DIR=/home/user/docker/caddyFile/sites bash deploy_shine-PWA.sh ui_2`
|
REMOTE_HOST=player@93.170.12.154 REMOTE_BASE_DIR=/home/player/SHiNE bash deploy_shine-PWA.sh
|
||||||
|
```
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user