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.
418 lines
14 KiB
418 lines
14 KiB
====== Шахматный сервер 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 = '[201:23b4:991a:634d:8359:4521:5576:15b7]'; |
|
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 / DNS** |
|
|
|
<file - /etc/nginx/sites-available/chesslablab.ygg> |
|
server { |
|
listen [::]:80; |
|
|
|
allow 0200::/7; |
|
deny all; |
|
|
|
server_name chesslablab.ygg chesslablab.ygg.at; |
|
|
|
root /home/chesslablab/website/public; |
|
rewrite ^/chesslablab/(.*)$ /$1 break; |
|
try_files $uri @chesslablab; |
|
|
|
location @chesslablab { |
|
|
|
# Provide actual php -v |
|
fastcgi_pass unix:/run/php/php8.2-fpm.sock; |
|
|
|
include fastcgi_params; |
|
fastcgi_param SCRIPT_FILENAME /home/chesslablab/website/public/index.php; |
|
fastcgi_param SCRIPT_NAME /chesslablab/index.php; |
|
fastcgi_param REQUEST_URI /chesslablab$uri?$args; |
|
|
|
# Environment variables |
|
fastcgi_param APP_ENV prod; |
|
} |
|
} |
|
</file> |
|
|
|
**Nginx / поддиректория** |
|
<file - /etc/nginx/sites-available/default> |
|
location /chesslablab { |
|
root /home/chesslablab/website/public; |
|
rewrite ^/chesslablab/(.*)$ /$1 break; |
|
try_files $uri @chesslablab; |
|
} |
|
|
|
location @chesslablab { |
|
|
|
# Provide actual php -v |
|
fastcgi_pass unix:/run/php/php8.2-fpm.sock; |
|
|
|
include fastcgi_params; |
|
fastcgi_param SCRIPT_FILENAME /home/chesslablab/website/public/index.php; |
|
fastcgi_param SCRIPT_NAME /chesslablab/index.php; |
|
fastcgi_param REQUEST_URI /chesslablab$uri?$args; |
|
|
|
# Environment variables |
|
fastcgi_param APP_ENV prod; |
|
} |
|
</file> |
|
|
|
<code> |
|
service nginx reload |
|
</code> |
|
|
|
===== Узлы ===== |
|
|
|
==== Клиенты ==== |
|
|
|
* [[http://[201:23b4:991a:634d:8359:4521:5576:15b7]/chesslablab/]] - сервер YGGverse |
|
* [[http://chesslablab.ygg]] - алиас |
|
|
|
==== Сервера ==== |
|
|
|
* [201:23b4:991a:634d:8359:4521:5576:15b7]:8085 |
|
===== Ссылки ===== |
|
|
|
Проект на GitHub: https://github.com/chesslablab \\ |
|
|
|
~~DISCUSSION~~
|
|
|