ChesslaBlab - это набор программных инструментов с открытым кодом для организации полноценного шахматного сервера с поддержкой Stockfish.
В материале рассмотрены тонкости настройки для сети IPv6 и Yggdrasil в частности.
Программный комплекс включает в себя множество компонентов, ниже будет рассмотрен необходимый для игры минимум.
chess-server написан на языке PHP, поэтому работа с ним не составит трудностей для веб-разработчиков.
Понадобится:
apt install git php composer stockfish
для запуска вебсокет-сервера, также лучше создать отдельного пользователя в системе:
useradd -m chesslablab
устанавливаем последнюю версию из репозитория:
git clone https://github.com/chesslablab/chess-server.git cd chess-server composer install
скопируем файл настройки среды окружения
cp .env.example .env nano .env
для работы с yggdrasil, приводим конфигурацию к следующему виду, где адрес IPv6 заменяем адресом сервера (yggdrasilctl getSelf)
JWT_ISS=[xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx] JWT_SECRET=super_password UID=1000 GID=1000 WS_PORT=8085 WS_ADDRESS=[::]
Остальные параметры из файла example можно удалить или закомментировать.
Поскольку сервер будет работать только в сеть Yggdrasil, открываем порт 8085 для диапазона 0200::/7
ufw allow from 0200::/7 to any port 8085
* порт можно выбрать любой свободный
После этого, chess-server можно запустить:
php cli/ratchet/ws.php
* Запуск сервера поддерживает несколько веб-сокет библиотек, ratchet поддерживает протоколы wss и ws - в случае Yggdrasil, второй не требует наличия SSL сертификата.
Чтобы сервер запускался при старте системы, можно добавить его в systemd:
nano /etc/systemd/system/chesslablab.service
[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
Обновляем реестр systemd, добавляем службу в автозапуск и стартуем сервис:
systemctl daemon-reload systemctl enable chesslablab systemctl start chesslablab
В завершение, проверяем наличие работающей службы:
netstat -tulpn | grep LISTEN
если сервер есть в списке на интерфейсе IPv6, можем к нему подключаться любым совместимым клиентом и играть по сети или с компьютером.
react-chess - это клиентский веб интерфейс, написанный с использованием фреймворка React.js
Репозиторий данного клиента был переименован:
https://github.com/chesslablab/spablab.git
Репозиторий данного клиента переведен в статус архива. Информация ниже приведена в качестве исторической справки.
Для использования актуального клиента, смотрите раздел mpablab
Для компиляции приложения потребуется:
apt install npm
Устанавливаем последнюю версию клиента из репозитория:
git clone https://github.com/chesslablab/react-chess.git cd react-chess npm install
Копируем пример конфигурации и делаем как указано ниже, заменив значения своими параметрами:
cp .env.example .env nano .env
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
* [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.
Запускаем веб-клиент:
npm start
автоматически должно открыться окно браузера с веб интерфейсом для игры.
Для production, клиент компилируется командой:
npm run build
* При развертывании клиента на VPS, целесообразно компилировать приложение локально, и на сервер выгрузить лишь директорию build, без исходников node. Это позволит сэкономить порядка 300 Мб дискового пространства на сервере.
Веб-клиент можно настроить различными способами (еще один вариант для локального развертывания указан в официальной документации)
В примерах ниже, директория build будет установлена по адресу:
/var/www/chesslablab/react-chess/build
Выполнение программы будет осуществляться пользователем www-data, поэтому не забываем дать соответствующие права:
chown -R www-data:www-data /var/www/chesslablab/react-chess/build
На примере используется домен chesslablab.ygg в системе Alfis DNS, при этом доступ ограничен только сети Yggdrasil:
nano /etc/nginx/sites-available/chesslablab.ygg.conf
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; } }
Включаем сайт, тестируем и перезагружаем конфигурацию Nginx:
ln -S /etc/nginx/sites-available/chesslablab.ygg.conf /etc/nginx/sites-enabled/chesslablab.ygg.conf nginx -t service nginx reload
Поскольку не все пользователи Yggdrasil используют DNS, важно предоставить возможность прямого доступа по IP.
Для Chesslablab удобнее всего создать выделенный адрес подсети и настроить по аналогии с доменом.
При использовании команды ifconfig lo inet6 add нужно учитывать, что адрес сбрасывается после перезагрузки системы, этот вопрос решается отдельно.
Расположение клиента в подкатегории вида http://[0200::/7]/chesslablab/ удобно тем, что к сайту удобно обращаться из адресной строки браузера без DNS, поскольку в истории посещений к поддиректории подставляется IP ресурса.
Чтобы заставить клиент работать в такой конфигурации без модификации кода react-chess, можно использовать следующий вариант:
создаем ссылку в корневом каталоге сервера:
ln -S /var/www/chesslablab/react-chess/build /var/www/html/chesslablab
*при условии, что корневая веб директория Nginx расположена по адресу /var/www/html
открываем стандартный файл конфигурации для корня (обычно default):
nano /etc/nginx/sites-available/default
и добавляем новую секцию:
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; }
Тестируем и перезагружаем конфигурацию Nginx:
nginx -t service nginx reload
mpablab - многостраничная и наиболее актуальная версия клиента на базе фреймворка Symfony.
На данный момент, репозиторий клиента переехал по адресу website.
Информация ниже актуализирована.
Установка
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
Настройка
Далее, нужно настроить приложение для Yggdrasil, используем пример клиент-сервера YGGverse:
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 };
После изменений, необходимо обновить кеш настроек, пересобрав наборы:
php bin/console asset-map:compile
Возможно, данные опции следует указывать в корневом файле .env, не проверял, если так, важно также стандартно для Symfony сбросить кеш продакшн:
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
Nginx
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; } }
service nginx reload
Проект на GitHub: https://github.com/chesslablab
Обсуждение
Нужно разобраться, и подправить описание (пока сомневаюсь, возможно открыт также как tutanota)