admin:services:phabricator
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
admin:services:phabricator [2015/06/06 12:19] – créée chirac | admin:services:phabricator [2019/11/27 02:05] (Version actuelle) – [Configuration du vhost] Màj david | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | blabla | + | Phabricator est un outil de gestion de projet et de développement écrit en PHP. Il est utilisé au sein de FedeRez pour gérer les projets afin de garder un historique de ce qui est fait. |
+ | |||
+ | Il est accessible à l' | ||
+ | |||
+ | Pour toutes les commandes à lancer qui commencent par '' | ||
+ | |||
+ | ===== Administration ===== | ||
+ | ==== Modification des Dashboards ==== | ||
+ | Pour modifier un dashboard, notamment le message " | ||
+ | - rechercher Dashboard dans la barre de recherche | ||
+ | - cliquer sur manage dashboard en bout de ligne (c'est l' | ||
+ | - éditer le message de bienvenue en cliquant sur le crayon | ||
+ | |||
+ | Note : il faut posséder les droits admins pour modifier ces paramètres | ||
+ | Note 2 : ajouter un lien vers un projet dans le message de bienvenue améliore grandement la convivialité. | ||
+ | ==== Redémarrage des démons ==== | ||
+ | |||
+ | Pour modifier des paramètres de Phabricator, | ||
+ | <code bash> | ||
+ | |||
+ | Après une modification, | ||
+ | <code bash> | ||
+ | |||
+ | ==== Supprimer une tâche ou un projet ==== | ||
+ | |||
+ | En général, si le projet ou la tâche a été traité, on préférera l' | ||
+ | |||
+ | Si l'on souhaite vraiment le supprimer (en cas de doublon, spam, etc.), il faut trouver son PHID : | ||
+ | * pour les tâches, il suffit de l' | ||
+ | * pour les projets, on peut l' | ||
+ | |||
+ | Ensuite, pour le supprimer on lance : | ||
+ | <code bash> | ||
+ | Et on valide malgré le message. | ||
+ | |||
+ | |||
+ | Sinon autre possibilité de manière plus globale : utiliser conduit (l'api de phabricator). | ||
+ | https:// | ||
+ | |||
+ | On tape le nom (par example [" | ||
+ | |||
+ | ===== Mise à jour ===== | ||
+ | |||
+ | Pour mettre à jour, on peut suivre la partie de la doc d' | ||
+ | |||
+ | On peut aussi laisser faire le script de mis à jour automatique suivant : | ||
+ | <file bash / | ||
+ | # | ||
+ | |||
+ | GIT_ROOT="/ | ||
+ | LOG_FILE="/ | ||
+ | |||
+ | # Redirection vers un fichier de log et affichage | ||
+ | exec > >(tee -a " | ||
+ | |||
+ | IFS=";" | ||
+ | |||
+ | echo " | ||
+ | |||
+ | if [ ! -d ${GIT_ROOT} ]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ ! -w ${GIT_ROOT} ]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | fi | ||
+ | |||
+ | if [ ! -x ${GIT_ROOT}/ | ||
+ | echo " | ||
+ | exit 3 | ||
+ | fi | ||
+ | |||
+ | echo -n " | ||
+ | a2dissite task.conf | ||
+ | service apache2 reload | ||
+ | echo " | ||
+ | |||
+ | echo -n " | ||
+ | cd ${GIT_ROOT}/ | ||
+ | ./bin/phd stop | ||
+ | echo " | ||
+ | |||
+ | echo "Mise à jour des dépôts git : " | ||
+ | echo -n "- arcanist :" | ||
+ | cd ${GIT_ROOT}/ | ||
+ | git pull | ||
+ | echo " | ||
+ | echo -n "- libphutil :" | ||
+ | cd ${GIT_ROOT}/ | ||
+ | git pull | ||
+ | echo " | ||
+ | echo -n "- phabricator :" | ||
+ | cd ${GIT_ROOT}/ | ||
+ | git pull | ||
+ | echo " | ||
+ | |||
+ | echo -n "Mise à jour des schéma de la BdD :" | ||
+ | cd ${GIT_ROOT}/ | ||
+ | ./ | ||
+ | echo " | ||
+ | |||
+ | echo -n " | ||
+ | ./bin/phd start | ||
+ | echo " | ||
+ | |||
+ | echo -n " | ||
+ | a2ensite task.conf | ||
+ | service apache2 reload | ||
+ | echo " | ||
+ | |||
+ | fin=$(date +' | ||
+ | |||
+ | echo "Fin de la mise à jour, temps total $((fin - debut))s." | ||
+ | </ | ||
+ | |||
+ | Il est appelé par le script suivant via la crontab : | ||
+ | <file bash / | ||
+ | # | ||
+ | |||
+ | / | ||
+ | if [ $? -eq 0 ]; then | ||
+ | / | ||
+ | fi | ||
+ | |||
+ | </ | ||
+ | |||
+ | Pour gérer les logs, on crée un fichier de configuration pour logrotate comme suit : | ||
+ | <file yaml / | ||
+ | # Conf pour les màj de phabricator | ||
+ | |||
+ | / | ||
+ | / | ||
+ | weekly | ||
+ | missingok | ||
+ | rotate 4 | ||
+ | compress | ||
+ | notifempty | ||
+ | copytruncate | ||
+ | } | ||
+ | </ | ||
+ | ===== Installation ===== | ||
+ | |||
+ | Le guide officiel est en deux parties : | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | Le choix de MySQL et et non de MariaDB vient du fait que le premier était déjà installé sur baldrick. | ||
+ | |||
+ | Il pourrait être intéressant dans le futur d' | ||
+ | |||
+ | ==== Installation des logiciels ==== | ||
+ | |||
+ | Pour PHP, les modules iconv et pcntl sont activés par défaut dans le paquet php de buster, il n'y a donc rien de particulier à faire pour les installer en plus de PHP. | ||
+ | |||
+ | Les paquets optionnels php-apcu, php-gd et php-zip ont été installés. | ||
+ | |||
+ | Pour installer d'un coup tous les paquets utiles, (y compris php5-ldap, utilisé pour l' | ||
+ | <code bash> | ||
+ | apt install apache2 libapache2-mod-php git python3-pygments php php-apcu php-curl php-gd php-json php-ldap php-mbstring php-mysql php-zip | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | <code bash> | ||
+ | mkdir / | ||
+ | git clone https:// | ||
+ | git clone https:// | ||
+ | git clone https:// | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Configuration de PHP ==== | ||
+ | |||
+ | Il faut définir un fuseau horaire par défaut : | ||
+ | <file apache / | ||
+ | |||
+ | ==== Configuration du vhost ==== | ||
+ | |||
+ | On s' | ||
+ | |||
+ | On crée ensuite le vhost en créant le fichier suivant : | ||
+ | <file apache / | ||
+ | # Redirections vers task.federez.net | ||
+ | < | ||
+ | ServerName phabricator.federez.net | ||
+ | ServerAlias todo.federez.net | ||
+ | |||
+ | RedirectMatch permanent ^/ | ||
+ | |||
+ | SSLEngine on | ||
+ | SSLCertificateFile / | ||
+ | SSLCertificateKeyFile / | ||
+ | |||
+ | ErrorLog ${APACHE_LOG_DIR}/ | ||
+ | CustomLog ${APACHE_LOG_DIR}/ | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | ServerName task.federez.net | ||
+ | ServerSignature Off | ||
+ | |||
+ | < | ||
+ | AllowOverride None | ||
+ | Require all granted | ||
+ | </ | ||
+ | |||
+ | DocumentRoot / | ||
+ | |||
+ | # Limite à 32M | ||
+ | LimitRequestBody 33554432 | ||
+ | |||
+ | # php_value post_max_size 32M | ||
+ | # php_value opcache.validate_timestamps 0 | ||
+ | # php_value memory_limit 512M | ||
+ | |||
+ | RewriteEngine on | ||
+ | RewriteRule ^/ | ||
+ | RewriteRule ^/ | ||
+ | RewriteRule ^/ | ||
+ | RewriteRule ^(.*)$ | ||
+ | |||
+ | ErrorLog ${APACHE_LOG_DIR}/ | ||
+ | CustomLog ${APACHE_LOG_DIR}/ | ||
+ | |||
+ | SSLEngine on | ||
+ | SSLCertificateFile / | ||
+ | SSLCertificateKeyFile / | ||
+ | |||
+ | ProxyPass /ws " | ||
+ | ProxyPassReverse /ws " | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | On recharge la configuration d' | ||
+ | <code bash> | ||
+ | |||
+ | |||
+ | ==== Configuration de la base de données ==== | ||
+ | |||
+ | On crée un utilisateur en base de données (via le compte root) : | ||
+ | <code mysql> | ||
+ | CREATE USER ' | ||
+ | GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW ON `phabricator\_%`.* TO ' | ||
+ | CREATE USER ' | ||
+ | GRANT ALL PRIVILEGES ON `phabricator\_%`.* TO ' | ||
+ | </ | ||
+ | |||
+ | On configure ensuite les accès à la base de données pour phabricator : | ||
+ | <code bash> | ||
+ | ./ | ||
+ | ./ | ||
+ | ./ | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | Idéalement, | ||
+ | |||
+ | La dernière commande vous créera une vingtaine de bases MySQL, ce n'est pas un bug mais une fonctionnalité : https:// | ||
+ | |||
+ | Ensuite, on se connecte au site et on suit les recommandations pour résoudre tous les problèmes remontés. Certains très simples à résoudre ne sont pas détaillés ici. | ||
+ | |||
+ | Pour la base de données, on change la configuration par défaut pour avoir : | ||
+ | <file autoconf / | ||
+ | max_allowed_packet = 48M | ||
+ | sql_mode = STRICT_ALL_TABLES | ||
+ | ft_stopword_file=/ | ||
+ | </ | ||
+ | |||
+ | Et on redémarre mysql : | ||
+ | <code bash> | ||
+ | |||
+ | ==== Configuration du stockage ==== | ||
+ | |||
+ | Ceci n'a pas été fait sur notre instance car elle n'est pas prévue pour servir à partager des fichiers et pour avoir un seul fichier à sauvegarder pour les backups. | ||
+ | |||
+ | Cependant, si l'on veut autoriser le stockage de fichiers sur disque (et non en base de données), on lancera : | ||
+ | <code bash> | ||
+ | mkdir -p / | ||
+ | chown www-data: / | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | ==== Lancement des démons ==== | ||
+ | |||
+ | Il faut aussi lancer les démons de phabricator. | ||
+ | |||
+ | Pour qu'ils soient lancés en utilisant un utilisateur différent de root, on le crée et on le défini dans la configuration de pahbricator avant de lancer les démons : | ||
+ | <code bash> | ||
+ | useradd --system -d / | ||
+ | ./ | ||
+ | ./bin/phd start | ||
+ | </ | ||
+ | |||
+ | Pour qu'ils soient lancés automatiquement au démarrage, on ajoute à la crontab : | ||
+ | < | ||
+ | @reboot root / | ||
+ | </ | ||
+ | |||
+ | ==== Gestion des logs des démons ==== | ||
+ | |||
+ | On crée le fichier suivant, pour que logrotate gère les logs des démons qui sont dans un dossier inadapté : | ||
+ | <file yaml / | ||
+ | # Conf pour les logs de phabricator | ||
+ | |||
+ | / | ||
+ | daily | ||
+ | missingok | ||
+ | rotate 7 | ||
+ | compress | ||
+ | notifempty | ||
+ | create 740 phd phd | ||
+ | } | ||
+ | </ | ||
+ | ===== Configuration d' | ||
+ | |||
+ | Afin d' | ||
+ | L’installation est simple : cf [[https:// | ||
+ | |||
+ | Elasticsearch écoute de base sur '' | ||
+ | |||
+ | Après avoir activé le service au démarage (avec '' | ||
+ | |||
+ | Il suffit de changer les configurations de phabricator avec les commandes: | ||
+ | <code bash>/ | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Enfin on execute, pour créer les index : | ||
+ | <code bash>/ | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | A partir de là on peut optimiser elasticsearch, | ||
+ | Cela se fait via curl : | ||
+ | <code bash> | ||
+ | Avec dans notre cas, un fichier mapping.json suivant. | ||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Puis pour reindexer les objects : | ||
+ | <code bash> | ||
+ | / | ||
+ | </ | ||
+ | ===== Sauvegardes ===== | ||
+ | |||
+ | Une commande permet de sauvegarder facilement la base de données de Phabricator : | ||
+ | <code bash> | ||
+ | |||
+ | Le script ''/ | ||
+ | |||
+ | Pour restaurer une sauvegarde : | ||
+ | <code bash> | ||
+ | La restauration efface toutes les données et insère les anciennes. | ||
+ | |||
+ | Le script lancé indirectement via la crontab tous les jours à 3:00 est le suivant : | ||
+ | <file bash / | ||
+ | # | ||
+ | |||
+ | BACKUP_ROOT="/ | ||
+ | PHABRICATOR_ROOT="/ | ||
+ | LOG_FILE="/ | ||
+ | |||
+ | # Redirection vers un fichier de log et affichage | ||
+ | exec > >(tee -a " | ||
+ | |||
+ | IFS=";" | ||
+ | |||
+ | echo " | ||
+ | |||
+ | if [ ! -d ${BACKUP_ROOT} ]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | if [ ! -w ${BACKUP_ROOT} ]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | fi | ||
+ | |||
+ | if [ ! -x ${PHABRICATOR_ROOT}/ | ||
+ | echo " | ||
+ | exit 3 | ||
+ | fi | ||
+ | |||
+ | echo " | ||
+ | find ${BACKUP_ROOT} -type f -ctime +2 -exec echo " -" {} \; -exec rm -rf {} + | ||
+ | |||
+ | echo -e " | ||
+ | ${PHABRICATOR_ROOT}/ | ||
+ | |||
+ | fin=$(date +' | ||
+ | |||
+ | echo "Fin de la sauvegarde, temps total $((fin - debut))s." | ||
+ | </ | ||
+ | |||
+ | Pour gérer les logs on ajoute à la configuration de logrotate le fichier suivant : | ||
+ | <file yaml / | ||
+ | # Conf pour les backups de phabricator | ||
+ | |||
+ | / | ||
+ | weekly | ||
+ | missingok | ||
+ | rotate 4 | ||
+ | compress | ||
+ | notifempty | ||
+ | copytruncate | ||
+ | } | ||
+ | </ |
admin/services/phabricator.1433585947.txt.gz · Dernière modification : 2015/06/06 12:19 de chirac