gemlog/public/uk/install-flarum-v2-on-linux.gmi
2025-09-11 12:43:12 +03:00

252 lines
No EOL
14 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Встановлення Flarum v2 в Linux
Днями було засновано українську спільноту адміністраторів альтернативних мереж. У якості платформи для спілкування - обрано рушій Flarum:
=> https://flarum.org
Цей матеріал - адаптована версія локальної інструкції для Debian/Linux, якщо комусь потрібно буде швидко розгорнути дану платформу, адже в документації не вказані деякі, на мою думку, важливі моменти.
## Системні залежності
``` bash
apt install composer php-fpm\
php-curl php-dom php-sqlite3\
php-fileinfo php-gd php-json php-mbstring\
php-openssl php-pdo php-tokenizer php-zip php-session
```
* в `apt` має вискочити нотайс з пропозицією поставити `php-common`, тому `php-dom`, `php-fileinfo` здається можна випиляти зі списку, але залишу цю команду з історії bash, як вона є.
## Рушій
> В рамках спільноти, також було створено спеціалізований форк, для роботи з локальними поштовими скриньками без DNS. Нижче описана збірка для звичайної (офіційної) версії.
``` bash
cd /var/www
```
``` bash
composer create-project flarum/flarum:^2.0.0 --stability=beta
```
* встановлюємо через Composer
``` bash
cd /var/www
```
* переходимо до теки проєкту
``` bash
composer update
```
* оновлюємо реєстр залежностей PHP
``` bash
php flarum install
```
* встановлюємо базу даних (тут створюється файл `config.php`)
* при виконанні команди `php flarum install` і використання драйвера SQLite, важливо вказати `name.sqlite` (з розширенням)
* назву хосту лишаємо як є (`localhost`)
Так як форум спільноти працює на обидві мережі Yggdrasil/Mycelium, у файлі `config.php` я вказав:
``` config.php
'url' => null,
```
* є ще рецепт: `'url' => '//' . $_SERVER['HTTP_HOST']`, але у такому разі компіляція статики не можлива, щонайменше на версії 2 буде помилка JS, ну і якщо робити то якось так, щоб не було warning при скиданні кешу: `'url' => isset($_SERVER['HTTP_HOST']) ? '//' . $_SERVER['HTTP_HOST'] : null`
* якщо встановити `null` то можливі проблеми з редіректами, наприклад, при виході з акаунту
* якщо ставите форум для класичного Інтернет - просто вкажіть свій основний хост
Далі вийшов з цієї теки та надав права веб-серверу, згідно інструкції:
``` bash
chown -R www-data:www-data /var/www/flarum
```
* тут треба придумати щось з групами, бо від `root` менеджер `composer` пускати не рекомендовано (наприклад, для оновлень рушія чи встановлення нових пакунків)
## Nginx
``` /etc/nginx/default
server {
# для спільноти 443 порт не використовується,
# натомість є два "дзеркала" IPv6
listen [xxx:xxxx:xxxx:xxxx::x1]:80;
listen [xxx:xxxx:xxxx:xxxx::x2]:80;
server_name xxx:xxxx:xxxx:xxxx::x1 xxx:xxxx:xxxx:xxxx::x2;
access_log /var/log/nginx/flarum.access.log;
root /var/www/flarum/public;
index index.php index.html;
include /var/www/flarum/.nginx.conf;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
```
* версію сокета PHP замініть актуальною (`php -v`)
* шляхи `/var/www/flarum` я пишу з пам'яті, бо довго тягав локацію туди-сюди і зараз вона в мене розташована на окремому, примонтованому диску, тому перевірте відповідність у себе актуальну щоб не було конфузів
* тут я ще думаю залочити локацію `/admin` по IP
## Локалізація
Пакети локалізації постачаються українською спільнотою Joomla-UA:
=> https://github.com/flarum-lang/ukrainian
* але схоже що тільки для першої версії, бо встановлення ніяк не позначилось на поточному інтерфейсі.
## Бекапи
Я зберігаю дані в SQLite, тому тут все просто:
``` bash
mkdir -p /path/to/flarum/daily
crontab -e
@daily /usr/bin/rsync -av --delete /path/to/flarum.sqlite /path/to/flarum/daily-dir
```
* аватарки та інші медіа ще не вияснив де зберігаються, доповню
## Виявлені проблеми
### Швидкість
Рушій здивував своєю тормознутістю. Особливо в режимі дебаг. Можливо, це залежить від SSD та кількості PHP файлів Symfony, які потребують кешування препроцесору. Або ж in-memory драйвера сесій замість БД. Це питання я ще для себе вирішую. Якщо знаєте відповідь - поділіться в коментарях!
### Зовнішні запити
Згодом, в консолі були помічені зовнішні запити до кешуючих серверів:
```
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://cdn.jsdelivr.net/gh/s9e/hljs-loader@1.0.36/loader.min.js. (Reason: CORS request did not succeed). Status code: (null).
```
Для Веб - це "нормально", але для оверлейних мереж і спільноти, виправлено так:
вимикаємо або вказуємо локальне дзеркало "CDN mirror address" для додатка `flarum-emoji`
### Тривалість сесій авторизації
Форум викидає користувача через відносно короткий час (120 хвилин). Рішення проблеми:
``` php
// File <flarum>/extend.php
use Flarum\Extend;
use Flarum\Foundation\AbstractServiceProvider;
use Illuminate\Contracts\Config\Repository as ConfigRepository;
class MyServiceProvider extends AbstractServiceProvider {
public function register () {
$this->container->make(ConfigRepository::class)->set('session.lifetime', 43829); // In minutes. Default is 120
}
}
return [
// Register extenders here to customize your forum!
(new Extend\ServiceProvider)
->register(MyServiceProvider::class),
];
```
=> https://discuss.flarum.org/d/21562-login-session-timeout/15 є ще один приклад для старішої версії
* UPD: згодом змінив `session.lifetime` на `session.gc_maxlifetime`
* щоб не робити окремий файл-костиль, можна просто вказати ці опції в `/etc/php/{VERSION}/fpm/php.in` та оновити налаштування командою `systemctl restart php{VERSION}-fpm`
### Пошта
Класична електронна пошта (e-mail) - ядро системи облікових записів для цього рушія. В принципі, можна вимкнути (точніше перемкнути пересилання листів до журналу) і вручну створювати користувачів, але вони не зможуть навіть скинути свій пароль без пересилання їм коду підтвердження.
#### Sendmail
Підійде у разі, якщо ви плануєте роботу з поштою але у вас з якихось причин немає повноцінного SMTP провайдера, наприклад Google.
##### Postfix / SMTP
Нижче показано самий простий приклад, який передбачає опцію налаштування "sendmail" що вказується в адмінці. У цьому випадку, 25 порт є закритим на фаєрволі.
``` bash
apt install postfix
```
Мій файл конфігурації `/etc/postfix/main.cf` саме для цього ресурсу виглядає так:
``` /etc/postfix/main.cf
myhostname = localhost
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_use_tls=no
compatibility_level = 3.6
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination =
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv6
smtpd_etrn_restrictions=reject
disable_vrfy_command = yes
smtpd_helo_required = yes
```
* тут `myhostname` - ваш актуальний хост
* `inet_protocols` можна вказати як "all" якщо планується взаємодія з Інтернет
##### Тестування
Якщо бачите повідомлення:
> Flarum currently does not send emails. This can be due to the selected driver, or errors in its configuration.
то це не критично, в мене відправлення працює й з ним, головне, щоб не було помилок в поп-апах.
#### Варіант без пошти
В адмінці є варіант "log" тобто пошта буде надсилатись у файл-заглушку, з якого можна пересилати різні лінки верифікації та інші запити - руками або скриптом. Знаходиться цей журнал в `flarum/storage/logs/*.log`
Вимкнути самі поля форм без патчу не вийде, в адмінці доступна лише опція вимкнення реєстрацій, таким чином, користувач бачитиме помилку при надсиланні відповідного запиту (так як це зараз).
## Розробка
Так як форум спільноти має деякі не характерні фічі, що не мають сенсу для загального PR, з'явився певний досвід по розгортанню власної версії а також може стати в нагоді, якщо вам потрібно використовувати цей рушій для локальної розробки. Як і у випадку з основною документацією, тут є свої нюанси, про які в офіційній версії не сказано:
=> https://docs.flarum.org/contributing/#setting-up-a-local-codebase
Якщо коротко то вам потрібен "скелет" форуму:
=> https://github.com/flarum/flarum
та сам фреймворк, якийсь в документації також називається "monorepo" і включає в себе різні модулі (для яких також є окремі read-only репозиторії)
=> https://github.com/flarum/framework
Пакунок `framework` у даному прикладі - є вашим об'єктом модифікації, ви також можете забрати його копію з офіційного апстріму.
Збірка версії рушія для розробників виглядає наступним чином:
``` bash
cd /var/www
git clone https://github.com/flarum/framework.git
cd framework
git checkout yggverse
cd ..
git clone https://github.com/flarum/flarum.git
cd flarum
composer config repositories.0 path "/var/www/framework/*/*"
composer config minimum-stability dev
composer install
php flarum install
php flarum cache:clear
php flarum assets:publish
```
* замість `php flarum install` може бути `php flarum migrate`
При оновленні компонентів фронт-енд, важливо (після `yarn install`) зкомпілювати оптимізовані файли дистрибутиву командою `yarn build` для подальшого встановлення в рамках компонента `flarum`. Але для цього вам треба додати такий фікс:
=> https://github.com/YGGverse/flarum-framework/commit/b02e3b3600d5c0ff1a613590e72d91e7b9d88111
## Посилання
=> https://flarum.org Офіційний сайт рушія Flarum
=> https://docs.flarum.org/2.x/install Офіційна документація зі встановлення Flarum v2
=> https://github.com/YGGverse/flarum-framework/tree/yggverse Редакція фреймворку Flarum від спільноти YGGverse