howto-db/data/pages/yggdrasil/games/chesslablab_game_server.txt
2024-03-02 01:00:04 +00:00

302 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Шахматный сервер ChesslaBlab ======
[[https://github.com/chesslablab |ChesslaBlab]] - это набор программных инструментов с открытым кодом для организации полноценного шахматного сервера с поддержкой [[wpru>Stockfish|Stockfish]].
В материале рассмотрены тонкости настройки для сети IPv6 и Yggdrasil в частности.
Программный комплекс включает в себя множество компонентов, ниже будет рассмотрен необходимый для игры минимум.
===== chess-server =====
[[https://github.com/chesslablab/chess-server|chess-server]] написан на языке PHP, поэтому работа с ним не составит трудностей для веб-разработчиков.
Понадобится:
<code>
apt install git php composer stockfish
</code>
для запуска вебсокет-сервера, также лучше создать отдельного пользователя в системе:
<code>
useradd -m chesslablab
</code>
устанавливаем последнюю версию из репозитория:
<code>
git clone https://github.com/chesslablab/chess-server.git
cd chess-server
composer install
</code>
скопируем файл настройки среды окружения
<code>
cp .env.example .env
nano .env
</code>
для работы с yggdrasil, приводим конфигурацию к следующему виду, где адрес IPv6 заменяем адресом сервера (yggdrasilctl getSelf)
<code>
JWT_ISS=[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
JWT_SECRET=super_password
UID=1000
GID=1000
WS_PORT=8085
WS_ADDRESS=[::]
</code>
Остальные параметры из файла example можно удалить или закомментировать.
Поскольку сервер будет работать только в сеть Yggdrasil, открываем порт 8085 для диапазона 0200::/7
<code>
ufw allow from 0200::/7 to any port 8085
</code>
//* порт можно выбрать любой свободный//
После этого, chess-server можно запустить:
<code>
php cli/ratchet/ws.php
</code>
* Запуск сервера поддерживает несколько веб-сокет библиотек, ratchet поддерживает протоколы wss и ws - в случае Yggdrasil, второй не требует наличия SSL сертификата.
Чтобы сервер запускался при старте системы, можно добавить его в systemd:
<code>
nano /etc/systemd/system/chesslablab.service
</code>
<code>
[Unit]
Description=chesslablab
After=network.target
[Service]
Type=simple
User=chesslablab
ExecStart=/usr/bin/php /home/chesslablab/chess-server/cli/ratchet/ws.php
StandardOutput=file:/home/chesslablab/chess-server-debug.log
StandardError=file:/home/chesslablab/chess-server-error.log
Restart=on-failure
[Install]
WantedBy=multi-user.target
</code>
Обновляем реестр systemd, добавляем службу в автозапуск и стартуем сервис:
<code>
systemctl daemon-reload
systemctl enable chesslablab
systemctl start chesslablab
</code>
В завершение, проверяем наличие работающей службы:
<code>
netstat -tulpn | grep LISTEN
</code>
если сервер есть в списке на интерфейсе IPv6, можем к нему подключаться любым совместимым клиентом и играть по сети или с компьютером.
===== react-chess =====
[[https://github.com/chesslablab/react-chess|react-chess]] - это клиентский веб интерфейс, написанный с использованием фреймворка [[wpru>React|React.js]]
<WRAP round info 60%>
Репозиторий данного клиента был переименован:\\
https://github.com/chesslablab/spablab.git
</WRAP>
Для компиляции приложения потребуется:
<code>
apt install npm
</code>
Устанавливаем последнюю версию клиента из репозитория:
<code>
git clone https://github.com/chesslablab/react-chess.git
cd react-chess
npm install
</code>
Копируем пример конфигурации и делаем как указано ниже, заменив значения своими параметрами:
<code>
cp .env.example .env
nano .env
</code>
<code>
HOST=[yyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy]
HTTPS=false
PORT=9443
REACT_APP_WS_SCHEME=ws
REACT_APP_WS_HOST=[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]
REACT_APP_WS_PORT=8085
</code>
//* [yyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy:yyyy] - адрес клиента react-chess, указывать его не обязательно при использовании нижеуказанных примеров nginx //\\
//* [xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] - адрес веб-сокета chess-server //\\
//*8085 - порт веб-сокет сервера//
В оригинальной инструкции используются примеры виртуальных хостов /etc/hosts, следовать им не нужно, в случае подключения Yggdrasil-only.
Запускаем веб-клиент:
<code>
npm start
</code>
автоматически должно открыться окно браузера с веб интерфейсом для игры.
Для production, клиент компилируется командой:
<code>
npm run build
</code>
* При развертывании клиента на VPS, целесообразно компилировать приложение локально, и на сервер выгрузить лишь директорию build, без исходников node.
Это позволит сэкономить порядка 300 Мб дискового пространства на сервере.
==== Nginx ====
Веб-клиент можно настроить различными способами (еще один вариант для локального развертывания указан в официальной документации)
В примерах ниже, директория build будет установлена по адресу:
<code>
/var/www/chesslablab/react-chess/build
</code>
Выполнение программы будет осуществляться пользователем www-data, поэтому не забываем дать соответствующие права:
<code>
chown -R www-data:www-data /var/www/chesslablab/react-chess/build
</code>
=== Домен ===
На примере используется домен chesslablab.ygg в системе [[yggdrasil:dns:alfis|Alfis DNS]], при этом доступ ограничен только сети Yggdrasil:
<code>
nano /etc/nginx/sites-available/chesslablab.ygg.conf
</code>
<code>
server {
listen [::]:80;
allow 0200::/7;
deny all;
root /var/www/chesslablab/react-chess/build;
index index.html;
server_name chesslablab.ygg chesslablab.ygg.at;
location / {
try_files $uri $uri/ =404;
}
}
</code>
Включаем сайт, тестируем и перезагружаем конфигурацию Nginx:
<code>
ln -S /etc/nginx/sites-available/chesslablab.ygg.conf /etc/nginx/sites-enabled/chesslablab.ygg.conf
nginx -t
service nginx reload
</code>
=== Адрес подсети ===
Поскольку не все пользователи Yggdrasil используют DNS, важно предоставить возможность прямого доступа по IP.
Для Chesslablab удобнее всего создать выделенный [[yggdrasil:subnet_setting|адрес подсети]] и настроить по аналогии с доменом.
<WRAP round info 60%>
При использовании команды ifconfig lo inet6 add нужно учитывать, что адрес сбрасывается после перезагрузки системы, этот вопрос решается отдельно.
</WRAP>
=== Поддиректория ===
Расположение клиента в подкатегории вида http://[0200::/7]/chesslablab/ удобно тем, что к сайту удобно обращаться из адресной строки браузера без DNS, поскольку в истории посещений к поддиректории подставляется IP ресурса.
Чтобы заставить клиент работать в такой конфигурации без модификации кода react-chess, можно использовать следующий вариант:
создаем ссылку в корневом каталоге сервера:
<code>
ln -S /var/www/chesslablab/react-chess/build /var/www/html/chesslablab
</code>
//*при условии, что корневая веб директория Nginx расположена по адресу /var/www/html//
открываем стандартный файл конфигурации для корня (обычно default):
<code>
nano /etc/nginx/sites-available/default
</code>
и добавляем новую секцию:
<code>
location /chesslablab {
index index.html;
# чтобы не патчить код клиента, делаем замену веб-корня в ответе сервера с помощью sub_filter
sub_filter_once off;
sub_filter_types *;
sub_filter 'action="/' 'action="/chesslablab/';
sub_filter 'href="/' 'href="/chesslablab/';
sub_filter 'src="/' 'src="/chesslablab/';
sub_filter 'static/media/' 'chesslablab/static/media/';
try_files $uri $uri/ =404;
}
</code>
Тестируем и перезагружаем конфигурацию Nginx:
<code>
nginx -t
service nginx reload
</code>
===== mpablab =====
[[https://github.com/chesslablab/mpablab|mpablab]] - многостраничная версия клиента на базе фреймворка [[wpru>Symfony|Symfony]].
===== Узлы =====
==== Клиенты ====
* [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/chesslablab/]] - работает в тестовом режиме, могут быть ошибки, просьба сообщать в [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/room/Nj3UDaQ89rF5W5dGUbMSgb1C84cHW2562j#latest|канал KevaChat]]
* [[http://chesslablab.ygg]] - алиас
* [[https://github.com/d47081/react-chess/tree/ygg|используемый инстансом форк react-chess]] - настройки чата в dot/env, список ожидающих онлайн партий в меню и т.д.
==== Сервера ====
* [201:23b4:991a:634d:8359:4521:5576:15b7]:8085
===== Ссылки =====
Проект на GitHub: https://github.com/chesslablab \\
~~DISCUSSION~~