Phabricator Instalacja i Konfiguracja - część II

Krzysztof Gał
Phabricator Instalacja i Konfiguracja - część II

Dawno temu w odległej galaktyce napisałem artykuł "Phabricator - instalacja i konfiguracja część I". Najwyższy czas na część II i ostatnią.

W tej części zajmiemy się podstawową konfiguracją Phabricatora. Na pierwszy ogień idą podstawowe problemy konfiguracji (Setup Issues), o których Phabricator powiadamia nas zaraz po instalacji.

1. Ustawienia PHP (PHP post_max_size Not Configured, Server Timezone Not Configured, OPcache Not Configured for Production, PHP Extension "APCu" Not Installed).

Zgodnie z podpowiedzią Phabricatora, otwieramy plik /etc/php/7.2/fpm/php.ini i dostosowujemy odpowiednie opcje (Ponieważ korzystamy z php-fpm możemy też oczywiście zastosować ustawienia tylko dla poola serwującego aplikację).

post_max_size = 32M
date.timezone = Europe/Warsaw
opcache.validate_timestamps = 0

Zwróć uwagę aby odkomentować ;date.timezone oraz ;opcache.validate_timestamps usuwając znak ; na początku wiersza.

Od razu zainstalujemy też rozszerzenie do PHP - APCu.

apt update && apt install -y php-apcu

Restartujemy PHP-FPM wpisując polecenie service php7.2-fpm restart , odświeżamy stronę Phabricatora z "Setup Issues" i sprawdzamy czy cztery powyższe problemy zniknęły z listy.

2. Mysql (MySQL STRICT_ALL_TABLES Mode Not Set).

Otwieramy plik /etc/mysql/my.cnf i dodajemy w dziale [mysqld]

sql_mode=STRICT_ALL_TABLES

Następnie restartujemy serwer mysql service mysql restart.

3. Duże pliki (Large File Storage Not Configured)

Domyślnie Phabricator przechowuje pliki w bazie danych mysql. Aby dostosować to ustawienie przechodzimy do Config -> Application Settings -> Files i zmieniamy ustawienie.

storage.mysql-engine.max-size = 8388608

4. Podświetlanie składni kodu (Install Pygments to Improve Syntax Highlighting)

Należy zainstalować pakiet zawierający aplikację Pygments.

apt install python-pygments

Następnie przechodzimy do Config -> Core Settings -> Syntax Highlighting i zmieniamy ustawienie.

pygments.enabled = true

5. Daemony (Phabricator Daemons Are Not Running)

W terminalu logujemy się jako użytkownik phd (w naszej konfiguracji). A następnie uruchamiamy daemona.

su phd
cd ~/phabricator
./bin/phd start

6. Konfiguracja dostępu do repozytoriów kodu (Aplikacja Diffusion)

Aby móc korzystać z Phabricatora jako repozytorium kodu (np. git-a), musimy skonfigurować jakąś metodę dostępu do niego. Mamy do wyboru albo http albo ssh. W tym wypadku użyjemy ssh.

Ponieważ musimy uruchomić drugą instancję usługi sshd na jednym systemie, musimy zdecydować czy zmienimy port dla usługi przez którą logujesz się do maszyny czy też w linkach do repozytoriów kodu Phabricatora będziemy dopisywać numer portu np. ssh://[email protected]/diffusion/1/test.git:1022.

W tym przypadku zmienimy port dla domyślnej usługi ssh w systemie z 22 na 1022, aby mieć prostsze linki do repozytoriów.

cd /etc/ssh
vim sshd_config

# Zmieniamy w pliku sshd_config numer portu z 22 na 1022
# przechodzimy w tryb edycji naciskając A
#
# Port 1022
#
# ESC :wq

service sshd restart

Następnie kopiujemy gotowy skrypt oraz konfigurację dla drugiej usługi ssh. Skrypt znajduje się w katalogu z Phabricatorem.

cd /home/phd/phabricator/resources/sshd
cp phabricator-ssh-hook.sh /usr/lib/phabricator-ssh-hook.sh

cp sshd_config.phabricator.example /etc/ssh/sshd_config.phabricator

Zmieniamy uprawnienia i edytujemy skopiowany plik.

cd /usr/lib
chown root phabricator-ssh-hook.sh
chmod 755 phabricator-ssh-hook.sh
vim phabricator-ssh-hook.sh

# Zmieniamy użytkownika, który będzie mógł logować się przez nową usługę ssh
# w naszym przypadku będzie to przygotowany już użytkownik git
#
# VCSUSER="git"
#
# ESC :wq

Następnie dostosowujemy konfigurację drugiej usługi ssh.

cd /etc/ssh
vim sshd_config.phabricator

# Zmieniamy
#
# AuthorizedKeysCommand /usr/lib/phabricator-ssh-hook.sh
# AuthorizedKeysCommandUser git
# AllowUsers git
# Port 22
#
# ESC :wq

W końcu uruchamiamy naszą drugą usługę ssh.

/usr/sbin/sshd -f /etc/ssh/sshd_config.phabricator

7. Powiadomienia (Notification server)

Na koniec zajmiemy się serwerem powiadomień, aby moć korzystać z czatu i powiadomień użytkowników w czasie rzeczywistym. Dla przypomnienia Phabricator w naszej konfiguracji jest serwowany za pośrednictwem Nginx, dlatego uruchomienie serwera powiadomień, który oparty jest o WebSockety będzie wymagało zmiany w konfiguracji Nginxa, dla naszej aplikacji.

Na początek dostosujemy konfigurację a następnie musimy zainstalować node.js, npm oraz potrzebne zależności.

Przechodzimy do Config -> Core -> Notifications i zmieniamy ustawiania notification.servers na:

[
  {
    "type": "client",
    "host": "phabricator.test",
    "port": 443,
    "protocol": "https",
    "path": "/ws/"
  },
  {
    "type": "admin",
    "host": "127.0.0.1",
    "port": 22281,
    "protocol": "http"
  }
]

Zwróć uwagę na pole path, którego nie ma w domyślnej konfiguracji, jest ono wymagane ze względu na to że korzystamy z Nginx.

Teraz instalujemy i uruchamiamy serwer.

apt install sudo curl
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

# zmieniamy użytkownika na phd
su phd
cd ~/phabricator/support/aphlict/server/
npm install ws

# możemy uruchomić serwer
cd ~/phabricator
./bin/aphlict start

Na koniec musimy dostosować konfigurację naszej aplikacji w Nginx /etc/ngnix/conf.d/phabricator.test.

Obok dyrektywy server dodajemy

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

upstream websocket_pool {
    ip_hash;
    server 127.0.0.1:22280;
}

server {
        # konfiguracja
}

A w konfiguracji bloku server dodajemy.

server {
    # konfiguracja

  location = /ws/ {
    proxy_pass http://websocket_pool;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 999999999;
  }

}

Teraz już wystarczy tylko zrestartować Nginxa i powinniśmy mieć działający czat i powiadomienia.

service nginx restart

Jak widać instalacja i konfiguracja Phabricatora nie należą do rzeczy trywialnych, a oficjalna dokumentacja potrafi zawierać spore dziury. Dlatego też mam nadzieję, że niniejszy tutorial okaże się przydatny dla wielu użytkowników.

Blog Comments powered by Disqus.