mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-02-18 22:12:40 +00:00
initial commit
This commit is contained in:
commit
259fee630b
127 changed files with 7811 additions and 0 deletions
190
public/uk/chesslablab-open-source-chess-in-php.gmi
Normal file
190
public/uk/chesslablab-open-source-chess-in-php.gmi
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
# ChesslaBlab - шахи онлайн з відкритим кодом на PHP
|
||||
|
||||
ChesslaBlab - це проєкт з відкритим кодом на PHP, для розгортання шахового серверу з нуля та клієнтська частина на Symfony - для вивчення стратегій, гри онлайн з комп'ютером або друзями.
|
||||
|
||||
Являє собою невибагливу до серверних потужностей та більш спрощену альтернативу Lichess.
|
||||
|
||||
У якості рушія штучного інтелекту використовується сервер Stockfish:
|
||||
|
||||
=> https://github.com/official-stockfish/Stockfish
|
||||
|
||||
ChesslaBlab може бути цікавим для:
|
||||
|
||||
* розробників
|
||||
* керівників освітніх програм
|
||||
* тренерів шахових клубів
|
||||
* просто бажаючих проводити власні турніри, розгорнувши багатокористувацький сервер для гри в браузері на мінімальному тарифі VPS
|
||||
|
||||
Варто зауважити, що обчислення сценаріїв виконується в режимі "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":
|
||||
|
||||
``` /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
|
||||
```
|
||||
|
||||
Після чого додати його в авто-запуск:
|
||||
|
||||
```
|
||||
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 - проєкт має хороший фідбек від розробника!
|
||||
|
||||
## Посилання
|
||||
|
||||
=> https://chesslablab.org Офіційний сайт ChesslaBlab
|
||||
=> https://github.com/chesslablab Сторінка на GitHub
|
||||
Loading…
Add table
Add a link
Reference in a new issue