6.4 KiB
VPS 178.208.90.249 (player) — 4 тестовых SHiNE-сервера на devnet
Назначение
Этот VPS используется как отдельный тестовый стенд для одновременного запуска 4 SHiNE-серверов:
server_t1→https://t1.shineup.meserver_t2→https://t2.shineup.meserver_t3→https://t3.shineup.meserver_t4→https://t4.shineup.me
Все 4 инстанса работают через Solana devnet.
Каталоги
Структура в домашней папке пользователя player:
/home/player/t1/server/home/player/t1/UI/home/player/t2/server/home/player/t2/UI/home/player/t3/server/home/player/t3/UI/home/player/t4/server/home/player/t4/UI
Дополнительно:
- подробная памятка на самом сервере:
/home/player/Agents.md
Порты и systemd
Соответствие инстансов:
t1→ localhost7101→shine-t1.servicet2→ localhost7102→shine-t2.servicet3→ localhost7103→shine-t3.servicet4→ localhost7104→shine-t4.service
Каждый unit запускает один и тот же jar:
/home/player/tX/server/shine-server.jar
Рабочая директория каждого unit:
/home/player/tX/server
Это важно, потому что сервер читает внешний application.properties именно из текущей рабочей директории.
Конфиги сервера
У каждого инстанса свой файл:
/home/player/tX/server/application.properties
Ключевые параметры в нём:
server.port=710Xserver.SHiNE.login=server_tXdb.path=data/shine.sqlitesolana.cluster=devnetsolana.rpcUrl=https://api.devnet.solana.comserver.ui.indexPath=/home/player/tX/UI/index.htmlserver.info.url=https://tX.shineup.meserver.info.origin=devnet
Важно:
- Program ID SHiNE одинаковые для mainnet и devnet.
- Поэтому для перевода инстанса на devnet достаточно правильных
solana.clusterиsolana.rpcUrl.
Конфиги UI
У каждого домена лежит отдельная копия shine-UI.
В каждой копии меняется js/deploy-config.js:
defaultServerLogin=server_tXdefaultServerAddress=tX.shineup.medefaultSolanaCluster=devnetdefaultSolanaEndpoint=https://api.devnet.solana.com
За счёт этого:
- UI по умолчанию открывает именно свой сервер
server-uiформы по умолчанию используют именноdevnet
Caddy
Конфиг:
/etc/caddy/Caddyfile
Логика по каждому сайту одинаковая:
- статические файлы берутся из
/home/player/tX/UI - путь
/wsпроксируется на127.0.0.1:710X
Права доступа:
- каталог
/home/playerи/home/player/tXдолжен быть доступен на+xдля чтения через Caddy - все каталоги и файлы в
/home/player/tX/UIдолжны быть читаемы пользователемcaddy
Что уже проверено
После настройки было подтверждено:
https://t1.shineup.meотвечаетHTTP 200https://t2.shineup.meотвечаетHTTP 200https://t3.shineup.meотвечаетHTTP 200https://t4.shineup.meотвечаетHTTP 200Caddyуспешно выпустил сертификаты Let's Encrypt на все 4 домена- все 4 процесса Java слушают свои порты
7101..7104 - в логах есть строка
WS сервер запущен на ws://localhost:710X/ws
Важный operational-нюанс
Официальный https://api.devnet.solana.com может отдавать HTTP 429, если несколько инстансов одновременно делают bootstrap PDA/sync-серверов на старте.
На практике это уже проявилось:
t3иt4подтянулиsync_serversсразуt1иt2на первом одновременном старте словили429- после последовательного рестарта
shine-t1иshine-t2они тоже успешно сохранилиsync_servers
Если после очередного деплоя какой-то инстанс не подтянул sync_servers, сначала делать не массовый рестарт, а по одному:
sudo systemctl restart shine-t1
sleep 8
sudo systemctl restart shine-t2
sleep 8
sudo systemctl restart shine-t3
sleep 8
sudo systemctl restart shine-t4
Как обновлять сервер
- Локально собрать jar:
./gradlew shadowJar
- Залить
SHiNE-server/build/libs/shine-server.jarв каждый нужный каталог:
/home/player/t1/server/shine-server.jar/home/player/t2/server/shine-server.jar/home/player/t3/server/shine-server.jar/home/player/t4/server/shine-server.jar
-
Если менялся runtime-конфиг, обновить соответствующий
application.properties. -
Перезапускать сервисы лучше по одному, с паузой, чтобы снизить шанс
429от devnet RPC.
Как обновлять UI
- Взять свежую локальную папку
shine-UI/. - Для каждой копии подставить свой
deploy-config.js. - Скопировать файлы в
/home/player/tX/UI/. - Проверить права чтения для Caddy.
Полезные команды на VPS
Проверка сервисов:
sudo systemctl --no-pager --full status caddy shine-t1 shine-t2 shine-t3 shine-t4
Перезапуск одного инстанса:
sudo systemctl restart shine-t1
Логи одного инстанса:
tail -n 200 /home/player/t1/server/logs/app.log
sudo journalctl -u shine-t1 -n 200 --no-pager
Проверка Caddy:
sudo caddy validate --config /etc/caddy/Caddyfile
curl -I https://t1.shineup.me