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
252
public/uk/install-flarum-v2-on-linux.gmi
Normal file
252
public/uk/install-flarum-v2-on-linux.gmi
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
# Встановлення 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue