Установка и настройка Phabricator#
Документация: https://secure.phabricator.com/book/phabricator/
Phabricator закончился, но списывать его ещё рано. Сообществом развивается форк под названием Phorge. Различия между ним и оригинальным Phabricator будут минимальны. Я запускал Phabricator на стеке Nginx + PHP-FPM + MariaDB.
Установка#
cd /srv/example.org && \
git clone https://github.com/phacility/arcanist.git && \
git clone https://github.com/phacility/phabricator.git && \
cd phabricator/
Теперь надо создать роль в MariaDB. К примеру — phab:
echo "CREATE USER 'phab'@'localhost' IDENTIFIED BY 'secure-pass';" | mysql -u root
Подключим к Phabricator:
./bin/config set mysql.host localhost
./bin/config set mysql.port 3306
./bin/config set mysql.user phab
./bin/config set mysql.pass secure-pass
Создаём и заполняем БД (будет создано много БД и необходимо, чтобы роль phab имела доступ к ним):
./bin/storage upgrade --user phab --password secure-pass --force
Можно использовать --force
, чтобы перезаписать БД, если с первого раза не
вышло создать всё что надо.
Даём права на таблицы. Надо случайно не дать ему права на БД других пользователей, поэтому вариант ниже не очень. Лучше указать к каким конкретно базам требуется доступ.
GRANT ALL PRIVILEGES ON *.* TO 'phab'@'localhost';
Сразу установим сертификат:
certbot certonly --webroot --agree-tos -w /srv/example.org/phabricator/webroot -d example.org
Конфиг nginx:
server {
listen 80;
listen 443 ssl http2;
server_name example.org www.example.org;
root /srv/example.org/phabricator/webroot;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
location / {
index index.php;
rewrite ^/(.*)$ /index.php?__path__=/$1 last;
}
location /index.php {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
# required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# variables to make the $_SERVER populate in PHP
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
}
}
Конфигурация#
Phabricator много хочет, поэтому с некоторыми настройками, вероятно, придётся поэкспериментировать. Все параметры задаются через ./bin/config.
Параметр phabricator.base-uri мне пригодился, чтобы избавиться от Mixed Content:
./bin/config set phabricator.base-uri https://example.org
Для того, чтобы использовалась локальная директория для хранения загружаемых файлов надо её создать и подключить:
mkdir file_storage
chown www-data:www-data file_storage/
./bin/config set storage.local-disk.path /srv/example.org/phabricator/file_storage
В итоге конфиг ./conf/local.local.json у меня выглядит так:
{
"pygments.enabled": true,
"storage.local-disk.path": "/srv/example.org/phabricator/file_storage",
"phabricator.base-uri": "https://example.org/",
"mysql.pass": "secure-pass",
"mysql.user": "phab",
"mysql.port": "3306",
"mysql.host": "localhost"
}
В моей конфигурации появилось предупреждение о проблеме с SSL. Документация: https://secure.phabricator.com/book/phabricator/article/configuring_preamble/
Помог следующий код в ./support/preamble.php:
<?php
$_SERVER['HTTPS'] = true;
// Следующая строка была бессмысленна, так как я не передавал заголовков.
//preamble_trust_x_forwarded_for_header();
?>
Докрутка настроек#
Авторизация#
После установки будет возможно зарегистрировать администратора в веб-интерфейсе, но у него не будет пароля. Чтобы задать пароль надо выполнить:
./bin/auth recover юзернейм
Будет получена одноразовая ссылка для восстановления пароля.
Также в веб-интерфейсе необходимо задать «Провайдера Авторизации» «Username/Password», чтобы на сайт возможно было залогиниться.
После того как провайдер будет указан надо заблокировать возможность изменять эту настройку из веб-интерфейса:
./bin/auth lock
Почта#
Для работы почты создаём файл mailers.json (название не имеет значения) с содержимым:
[
{
"key": "local-exim-mailer",
"type": "sendmail"
}
]
И выполняем:
./bin/config set --stdin cluster.mailers < mailers.json
Конфигурирование служб#
В веб-интерфейсе может падать куча предупреждений о неправильной настройке сервера, ниже приведены тексты замечаний и способы их устранения. Читать следует по порядку.
Server Timezone Not Configured
vim /etc/php/7.4/fpm/php.ini
В конфиге ставим:
date.timezone = Europe/Moscow
PHP post_max_size Not Configured
Всё там же:
post_max_size = 1G
OPcache Not Configured for Production
Продолжаем:
opcache.validate_timestamps=0
Ребутаем PHP-FPM, чтобы перечитать php.ini:
service php7.4-fpm restart
Alternate File Domain Not Configured
./bin/config set security.alternate-file-domain https://phabricator.gch.icu
Missing Repository Local Path
mkdir -p /var/repo/
chown www-data:www-data /var/repo/
Install Pygments to Improve Syntax Highlighting
apt install python3-pygments
./bin/config set pygments.enabled true
PHP Extension «APCu» Not Installed
apt install php-apcu
Phabricator Daemons Are Not Running
./bin/phd start
Small MySQL «max_allowed_packet»
vim /etc/mysql/mariadb.conf.d/50-server.cnf
В конфиге:
max_allowed_packet = 34M
MySQL May Run Slowly
Всё там же. Добавляем:
innodb_buffer_pool_size=1600M
The MySQL «local_infile» option is enabled. This option is unsafe
Продолжаем:
local_infile=0
MySQL STRICT_ALL_TABLES Mode Not Set
sql_mode=STRICT_ALL_TABLES
Теперь ребутаем:
/etc/init.d/mysql restart
Бэкапы#
В моей установке Phabricator создал 59 баз данных (!). Предусмотрен инструментарий для бэкапа всего что надо из БД:
./bin/storage dump --compress --output backup.sql.gz
Восстанавливать так:
gunzip -c backup.sql.gz | mysql
Предварительно надо создать пользователя, а после создания БД дать ему гранты.
Бэкапить файлы надо руками.
Документация: https://secure.phabricator.com/book/phabricator/article/configuring_backups/