How to Wiki Database (change log) http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

297 lines
11 KiB

====== Шахматный сервер ChesslaBlab ======
[[https://github.com/chesslablab |ChesslaBlab]] - это набор программных инструментов с открытым кодом для организации полноценного шахматного сервера с поддержкой [[wpru>Stockfish|Stockfish]].
Данный комплекс может быть свободной альтернативой проприетарной площадке [[wpru>Lichess|Lichess]]: для игры в шахматы с друзьями или тренировок с ИИ.
В материале рассмотрены тонкости настройки для сети 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
TCP_PORT=8085
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/dev.php
</code>
* Запуск сервера подразумевает несколько режимов, описанных [[https://github.com/chesslablab/chess-server#run-the-chess-server|README]]. В нашем случае подойдёт именно dev, так как он не требует наличия 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/dev.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]]
Для компиляции приложения потребуется:
<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>
<WRAP round info 60%>
При развертывании клиента на VPS, целесообразно компилировать приложение локально, и на сервер выгрузить лишь директорию build, без исходников node.
Это позволит сэкономить порядка 300 Мб дискового пространства на сервере.
</WRAP>
==== 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>
===== Узлы =====
==== Клиенты ====
* [[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~~