# Деплой SHiNE (шаблон)

Этот раздел хранит актуальные инструкции по деплою.

## Базовый сервер

- SSH: `player@shineup.me`
- Домен: `shineup.me`
- Базовый путь: `/home/player`

Для всех рабочих инструкций и скриптов использовать доменное имя `shineup.me`, а не фиксированный IP:

- актуальный IP должен браться через DNS-резолв на момент подключения;
- ручное дублирование IP в документации и deploy-скриптах не поддерживать.

## Локальные команды

- Деплой сервера: `./gradlew deployServer`
- Деплой UI: `./gradlew deployUI`
- Локальный запуск: `./gradlew startLocal`

## UI-деплой и Caddy (обязательно)

- Целевая директория UI-деплоя: `/home/player/SHiNE/shine-ui`.
- `Caddyfile` на сервере должен смотреть в ту же директорию через `root * /home/player/SHiNE/shine-ui`.
- В `deploy_shine-PWA.sh` добавлена проверка: скрипт ищет блок `shineup.me { ... }` (или значение `EXPECTED_CADDY_SITE`) и проверяет `root` внутри этого блока.
- Если `root` внутри целевого блока не совпадает, деплой прерывается с ошибкой.
- Для ручного обхода проверки (только осознанно): `ALLOW_CADDY_MISMATCH=1 ./gradlew deployUI`.
- При необходимости можно явно переопределить путь деплоя:
  - `REMOTE_UI_DIR=/нужный/путь ./gradlew deployUI`
  - `EXPECTED_CADDY_UI_ROOT=/нужный/путь ./gradlew deployUI`
  - `EXPECTED_CADDY_SITE=example.com ./gradlew deployUI`

## Временные тестовые сайты Solana tickets

- Для HTML UI программы `shine_payments` используется отдельный временный тестовый сайт.
- Основной каталог публикации:
  - `/home/player/sites/test-solana-tickets.shineup.me`
- Рабочие домены:
  - `https://test-solana-tickets.shineup.me`
  - `https://test-solana-tickets.shiningpeople.ru`
- Назначение:
  - ручная проверка сценариев покупки билетов;
  - проверка DAO-инструментов и лимитов менеджеров;
  - проверка ручного добавления билетов и `step_payout`.
- Эти сайты не считать основным UI SHiNE; это отдельная тестовая публикация под Solana-часть.

### Важно для локального UI (history-router / Ctrl+F5)

- Локальный UI **обязательно** поднимать только через `./gradlew startLocal`.
- Эта задача запускает `scripts/local_spa_server.py`, который делает SPA fallback: любой неизвестный путь (`/m/...`, `/channel/...`) возвращает `index.html`.
- Это обязательно для корректной работы `Ctrl+F5` на внутренних роутов без `404`.
- Рабочий URL выводится задачей в консоль в формате: `http://localhost:<WEB_PORT>/?localWsPort=<WS_PORT>`.

## Обязательные правила

1. Перед серверным деплоем проверить локально.
2. При нестандартном деплое (другой хост, другая структура, ручные шаги) обязательно уточнить у пользователя, нужно ли обновить этот шаблон.
3. Если деплой-процесс изменился, этот файл и файлы в `servers/` обновлять в том же коммите.
