390 lines
13 KiB
Plaintext
390 lines
13 KiB
Plaintext
====== Шахматный сервер 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>
|
||
|
||
<WRAP round important 60%>
|
||
Репозиторий данного клиента переведен в статус архива. Информация ниже приведена в качестве исторической справки.
|
||
|
||
Для использования актуального клиента, смотрите раздел [[yggdrasil:games:chesslablab_game_server#mpablab]]
|
||
</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]].
|
||
|
||
<WRAP round info 60%>
|
||
На данный момент, репозиторий клиента переехал по адресу [[https://github.com/chesslablab/website|website]].
|
||
|
||
Информация ниже актуализирована.
|
||
</WRAP>
|
||
|
||
**Установка**
|
||
|
||
<code>
|
||
git clone https://github.com/chesslablab/website.git
|
||
cd website
|
||
composer update
|
||
cp assets/env.example.js assets/env.js
|
||
php bin/console importmap:install
|
||
</code>
|
||
|
||
**Настройка**
|
||
|
||
Далее, нужно настроить приложение для Yggdrasil, используем пример клиент-сервера YGGverse:
|
||
<file - assets/env.js>
|
||
const API_SCHEME = 'http';
|
||
const API_HOST = '[301:23b4:991a:634d::cbb]';
|
||
const API_PORT = '80';
|
||
const API_VERSION = 'v1';
|
||
const API_KEY = 'ваш ключ';
|
||
|
||
const WEBSOCKET_SCHEME = 'ws';
|
||
const WEBSOCKET_HOST = '[201:23b4:991a:634d:8359:4521:5576:15b7]';
|
||
const WEBSOCKET_PORT = '8085';
|
||
|
||
export {
|
||
API_SCHEME,
|
||
API_HOST,
|
||
API_PORT,
|
||
API_VERSION,
|
||
API_KEY,
|
||
WEBSOCKET_SCHEME,
|
||
WEBSOCKET_HOST,
|
||
WEBSOCKET_PORT
|
||
};
|
||
</file>
|
||
|
||
После изменений, необходимо обновить кеш настроек, пересобрав наборы:
|
||
|
||
<code>
|
||
php bin/console asset-map:compile
|
||
</code>
|
||
|
||
Возможно, данные опции следует указывать в корневом файле .env, не проверял, если так, важно также стандартно для Symfony сбросить кеш продакшн:
|
||
|
||
<code>
|
||
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
|
||
</code>
|
||
|
||
**Nginx**
|
||
|
||
<file - /etc/nginx/sites-available/chesslablab>
|
||
server {
|
||
listen [301:23b4:991a:634d::cbb]:80;
|
||
|
||
server_name _;
|
||
|
||
root /home/chesslablab/website/public;
|
||
|
||
location / {
|
||
try_files $uri /index.php$is_args$args;
|
||
}
|
||
|
||
location ~ ^/.+\.php(/|$) {
|
||
|
||
# php -v
|
||
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
|
||
|
||
include fastcgi_params;
|
||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||
fastcgi_param APP_ENV prod;
|
||
}
|
||
}
|
||
</file>
|
||
|
||
<code>
|
||
service nginx reload
|
||
</code>
|
||
|
||
===== Узлы =====
|
||
|
||
==== Клиент ====
|
||
|
||
* [[http://[301:23b4:991a:634d::cbb]/en/]] - Веб-клиент, администрируется YGGverse
|
||
|
||
==== Сервер ====
|
||
|
||
* [201:23b4:991a:634d:8359:4521:5576:15b7]:8085 - Сервер YGGverse, только 0200::/7
|
||
===== Ссылки =====
|
||
|
||
Проект на GitHub: https://github.com/chesslablab \\
|
||
|
||
~~DISCUSSION~~
|