💾 Archived View for ps.cities.yesterweb.org › uk › chesslablab-open-source-chess-in-php.gmi captured on 2024-06-16 at 12:14:13. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-05-10)
-=-=-=-=-=-=-
ChesslaBlab - це проект з відкритим кодом на PHP, для розгортання шахового серверу з нуля та клієнтська частина на Symfony - для вивчення стратегій, гри онлайн з комп'ютером або друзями.
Являє собою невибагливу до серверних потужностей та більш спрощену альтернативу Lichess.
У якості рушія штучного інтелекту використовується сервер Stockfish:
https://github.com/official-stockfish/Stockfish
ChesslaBlab може бути цікавим для:
Варто зауважити, що обчислення сценаріїв виконується в режимі "server-side", тому такий проект оптимально підійде для ігор з невеликою кількістю одночасних сесій, наприклад в локальній мережі.
Для розгортання серверної частини, використовується "chess-server":
https://github.com/chesslablab/chess-server
що реалізує бібліотеку "php-chess":
https://github.com/chesslablab/php-chess
В системах Debian, спочатку потрібно встановити наступні залежності:
apt install git php composer stockfish
Для безпечного запуску, краще створити окремого користувача:
useradd -m chesslablab su chesslablab
Клонуємо репозиторій та оновлюємо залежності Composer:
git clone https://github.com/chesslablab/chess-server.git cd chess-server composer update
Копіюємо приклад конфігурації в продакшн:
cp .env.example .env
Файл містить налаштування для двох типів з'єднань:
1. "WSS" - захищене з'єднання через веб-сокет (потребує додатково створення сертифікатів)
2. "WS" - незахищене, в принципі цей варіант буде простішим для початку
Вказуємо актуальні адреси для обраного способу, після чого відкриваємо відповідні порти в "iptables" наприклад за допомогою утиліти "ufw":
ufw allow 8443 ufw allow 8085
Для кожного типу з'єднань, є свій метод (скрипт) запуску, описаний в документації:
https://chess-server.docs.chesslablab.org
Наприклад, для "WS", я користуюсь реалізацією сокет-сервера на PHP - Ratchet:
https://github.com/ratchetphp/Ratchet
і наступною командою:
php cli/ratchet/ws.php
Також, зручно створити сервіс "systemd":
[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
Після чого додати його в авто-запуск:
systemctl daemon-reload systemctl enable chesslablab systemctl start chesslablab
Перевірити роботу служби на порті можна командою:
netstat -tulpn | grep LISTEN
За весь час розробки, проект мав декілька клієнтів, зокрема реалізацію на React.js, яка нещодавно була переведена у стан архівної:
https://github.com/chesslablab/react-chess
Наразі, актуальним клієнтом є багатосторінкова реалізація на базі фреймворку Symfony, розробка яклшл ведеться в репозиторії "website":
https://github.com/chesslablab/website
Встановлення досить просте, якщо додані залежності серверу, достатньо виконати наступні команди:
cd /home/chesslablab 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
Змінюємо у скопійованому файлі "assets/env.js" потрібні нам адреси відповідно до налаштувань сервера і генеруємо оптимізований кеш для веб-застосунку:
php bin/console asset-map:compile
При змінах в стандартному файлі Symfony ".env" в середовищі "production", скидаємо кеш командою:
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
Налаштування Nginx - таке само як і для типового проекту на Symfony.
Для проекту в локальній мережі IPv6 Yggdrasil / Alfis DNS, я користуюсь наступною конструкцією "WS" (достатньо змінити домен на той, що вказано в налаштуваннях клієнта):
server { listen [::]:80; allow 0200::/7; deny all; server_name chesslablab.ygg chesslablab.ygg.at; 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; } }
Якщо все зроблено правильно, то можна відкрити сайт і почати гру з комп'ютером.
У разі проблем, першим ділом відкриваємо консоль браузеру "Ctrl+Shift+i" та дивимось стан підключення.
Якщо підключення до сокету успішне, тоді потрібно дивитись безпосередньо серверні журнали за шляхами, які вказані в секціях "StandardOutput" та "StandardError" сервісу "systemd".
Долучайтесь до розробки на GitHub - проект має хороший фідбек від розробника!