Outils pour utilisateurs

Outils du site


admin:services:phabricator

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
admin:services:phabricator [2015/06/07 00:57] – Permier jet :) david.sinquinadmin:services:phabricator [2019/11/27 02:05] (Version actuelle) – [Configuration du vhost] Màj david
Ligne 1: Ligne 1:
 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. 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'adresse suivante : https://task.federez.net.
  
 Pour toutes les commandes à lancer qui commencent par ''./'', on se placera dans le dossier d'installation de phabricator, ''/opt/phabricator/phabricator'', sauf autre indication. Pour toutes les commandes à lancer qui commencent par ''./'', on se placera dans le dossier d'installation de phabricator, ''/opt/phabricator/phabricator'', sauf autre indication.
  
 ===== Administration ===== ===== Administration =====
 +==== Modification des Dashboards ====
 +Pour modifier un dashboard, notamment le message "bienvenue", la procédure à suivre et la suivante :
 +  - rechercher Dashboard dans la barre de recherche
 +  - cliquer sur manage dashboard en bout de ligne (c'est l'icone représentant 9 cases (3*3))
 +  - é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 ==== ==== Redémarrage des démons ====
  
Ligne 22: Ligne 31:
  
 Ensuite, pour le supprimer on lance : Ensuite, pour le supprimer on lance :
-<code bash>./bin/remove destroy ''PHID-…''</code>+<code bash>./bin/remove destroy 'PHID-…'</code>
 Et on valide malgré le message. Et on valide malgré le message.
 +
 +
 +Sinon autre possibilité de manière plus globale : utiliser conduit (l'api de phabricator).
 +https://task.federez.net/conduit/method/phid.lookup/
 +
 +On tape le nom (par example ["T15"]) au format json et le tour est joué.
  
 ===== Mise à jour ===== ===== Mise à jour =====
Ligne 29: Ligne 44:
 Pour mettre à jour, on peut suivre la partie de la doc d'installation qui en parle. Pour mettre à jour, on peut suivre la partie de la doc d'installation qui en parle.
  
-Cela revient à faire (en faisant par sécurité une coupure un peu plus longue) +On peut aussi laisser faire le script de mis à jour automatique suivant 
-<code bash>+<file bash /usr/local/sbin/phabricator_update> 
 +#!/bin/bash 
 + 
 +GIT_ROOT="/opt/phabricator" 
 +LOG_FILE="/var/log/phabricator_update.log" 
 + 
 +# Redirection vers un fichier de log et affichage 
 +exec > >(tee -a "${LOG_FILE}") 2>&
 + 
 +IFS=";" read date date_fr debut <<<$(LANG="fr_FR.UTF-8" date +'%F_%T;%a %d %b à %T;%s'
 + 
 +echo "Début de la mise à jour le ${date_fr}." 
 + 
 +if [ ! -d ${GIT_ROOT} ]; then 
 + echo "Dossier d'installation inexistant" >&
 + exit 1 
 +fi 
 + 
 +if [ ! -w ${GIT_ROOT} ]; then 
 + echo "Droits insuffisants pour écrire dans le dossier d'installation de Phabricator" >&
 + exit 2 
 +fi 
 + 
 +if [ ! -x ${GIT_ROOT}/phabricator/bin/storage ]; then 
 + echo "Impossible de trouver le script de mise à jour de la BdD pour Phabricator" >&
 + exit 3 
 +fi 
 + 
 +echo -n "Désactivation du VHOST : "
 a2dissite task.conf a2dissite task.conf
 service apache2 reload service apache2 reload
-cd /opt/phabricator/phabricator/+echo "OK" 
 + 
 +echo -n "Désactivation des démons : " 
 +cd ${GIT_ROOT}/phabricator/
 ./bin/phd stop ./bin/phd stop
-cd ../arcanist/ && git pull +echo "OK" 
-cd ../libphutil/ && git pull + 
-cd ../phabricator/ && git pull +echo "Mise à jour des dépôts git : " 
-./bin/storage upgrade --user root --password password+echo -n "- arcanist :" 
 +cd ${GIT_ROOT}/arcanist/ 
 +git pull 
 +echo "OK" 
 +echo -n "- libphutil :" 
 +cd ${GIT_ROOT}/libphutil/ 
 +git pull 
 +echo "OK" 
 +echo -n "- phabricator :" 
 +cd ${GIT_ROOT}/phabricator/ 
 +git pull 
 +echo "OK" 
 + 
 +echo -n "Mise à jour des schéma de la BdD :" 
 +cd ${GIT_ROOT}/phabricator/ 
 +./bin/storage upgrade --user 'phabricator_adm' --password '?iJ&u4x^98i^Fx<+' --force 
 +echo "OK" 
 + 
 +echo -n "Réactivation des démons : "
 ./bin/phd start ./bin/phd start
 +echo "OK"
 +
 +echo -n "Réactivation du VHOST : "
 a2ensite task.conf a2ensite task.conf
 service apache2 reload service apache2 reload
-</code> +echo "OK"
  
 +fin=$(date +'%s')
  
 +echo "Fin de la mise à jour, temps total $((fin - debut))s."
 +</file>
  
 +Il est appelé par le script suivant via la crontab :
 +<file bash /usr/local/sbin/phabricator_backup_and_update>
 +#!/bin/bash
 +
 +/usr/local/sbin/phabricator_backup
 +if [ $? -eq 0 ]; then
 + /usr/local/sbin/phabricator_update
 +fi
 +
 +</file>
 +
 +Pour gérer les logs, on crée un fichier de configuration pour logrotate comme suit :
 +<file yaml /etc/logrotate.d/phabricator_update>
 +# Conf pour les màj de phabricator
 +
 +/var/log/phabricator_backup.log
 +/var/log/phabricator_update.log {
 +    weekly
 +    missingok
 +    rotate 4
 +    compress
 +    notifempty
 +    copytruncate
 +}
 +</file>
 ===== Installation ===== ===== Installation =====
  
Ligne 54: Ligne 149:
 Le choix de MySQL et et non de MariaDB vient du fait que le premier était déjà installé sur baldrick. 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'utiliser la version des dépôts debian de phabricator (disponible uniquement pour [[https://packages.debian.org/stretch/phabricator|stretch]] et sid actuellement) pour une gestion plus simple des mise à jour si le paquet est bien tenu à jour+Il pourrait être intéressant dans le futur d'utiliser la version des dépôts debian de Phabricator (disponible uniquement pour [[https://packages.debian.org/stretch/phabricator|stretch]] et sid actuellement)pour une maintenance plus simple.
  
 ==== Installation des logiciels ==== ==== Installation des logiciels ====
  
-Pour PHP, les modules mbstring, iconv et pcntl sont activés par défaut dans le paquet php5 de jessie, il n'y a donc rien de particulier à faire pour les installer en plus de PHP.+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 php5-apcu et php5-gd ont été installés.+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'authentification), on peut lancer : +Pour installer d'un coup tous les paquets utiles, (y compris php5-ldap, utilisé pour l'authentification), on peut lancer :
 <code bash> <code bash>
-apt-get install apache2 libapache2-mod-php5 php5 git php5-mysql php5-curl \ +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
-    php5-apcu php5-gd php5-ldap mysql-server python-pygments+
 </code> </code>
  
Ligne 75: Ligne 169:
 git clone https://github.com/phacility/phabricator.git git clone https://github.com/phacility/phabricator.git
 </code> </code>
 +
  
 ==== Configuration de PHP ==== ==== Configuration de PHP ====
Ligne 81: Ligne 176:
 <file apache /etc/php5/apache2/php.ini>date.timezone = Europe/Paris</file> <file apache /etc/php5/apache2/php.ini>date.timezone = Europe/Paris</file>
  
-==== Configuration du VHOST ====+==== Configuration du vhost ====
  
 On s'occupe d'abord d'obtenir un certificat TLS pour le site. On s'occupe d'abord d'obtenir un certificat TLS pour le site.
  
-On crée ensuite le VHOST en créant le fichier suivant :+On crée ensuite le vhost en créant le fichier suivant :
 <file apache /etc/apache2/sites-available/task.conf> <file apache /etc/apache2/sites-available/task.conf>
-<VirtualHost *:80+# Redirections vers task.federez.net 
-  ServerName task.federez.net +<VirtualHost *:443
-  ServerAlias task.federez.org +  ServerName phabricator.federez.net 
-  ServerAlias todo.federez.net todo.federez.org +  ServerAlias todo.federez.net 
-  ServerAlias phabricator.federez.net phabricator.federez.org  + 
-  ServerSignature Off+  RedirectMatch permanent ^/(?!.well-known/)(.+)$ https://task.federez.net/ 
 + 
 +  SSLEngine on 
 +  SSLCertificateFile /etc/letsencrypt/live/nonagon.federez.net/fullchain.pem 
 +  SSLCertificateKeyFile /etc/letsencrypt/live/nonagon.federez.net/privkey.pem
  
-  Redirect permanent https://task.federez.net/+  ErrorLog ${APACHE_LOG_DIR}/phabricator-redir.error.log 
 +  CustomLog ${APACHE_LOG_DIR}/phabricator-redir.access.log combined
 </VirtualHost> </VirtualHost>
  
 <VirtualHost *:443> <VirtualHost *:443>
   ServerName task.federez.net   ServerName task.federez.net
-  ServerAlias task.federez.org task.federez.fr 
-  ServerAlias todo.federez.net todo.federez.org todo.federez.fr 
-  ServerAlias phabricator.federez.net phabricator.federez.org  phabricator.federez.fr 
   ServerSignature Off   ServerSignature Off
  
   <Directory /opt/phabricator/phabricator/webroot>   <Directory /opt/phabricator/phabricator/webroot>
 +      AllowOverride None
       Require all granted       Require all granted
   </Directory>   </Directory>
Ligne 113: Ligne 211:
   LimitRequestBody 33554432   LimitRequestBody 33554432
  
-  php_value post_max_size 32M +  php_value post_max_size 32M 
-  php_value opcache.validate_timestamps 0 +  php_value opcache.validate_timestamps 0 
-  php_value memory_limit 512M+  php_value memory_limit 512M
  
-  # Règles pour Phabricator 
   RewriteEngine on   RewriteEngine on
-  RewriteRule ^/rsrc/(.*)                           [L,QSA] +  RewriteRule ^/rsrc/(.*)                             [L,QSA] 
-  RewriteRule ^/favicon.ico                         [L,QSA] +  RewriteRule ^/favicon.ico                           [L,QSA
-  RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]+  RewriteRule ^/ws/(.*)       ws://localhost:22280/$1   [P,L
 +  RewriteRule ^(.*)$          /index.php?__path__=$1    [B,L,QSA]
  
-  ErrorLog ${APACHE_LOG_DIR}/phabricator.error.log +  ErrorLog ${APACHE_LOG_DIR}/phabricator-ssl.error.log 
-  CustomLog ${APACHE_LOG_DIR}/phabricator.access.log combined+  CustomLog ${APACHE_LOG_DIR}/phabricator-ssl.access.log combined
  
   SSLEngine on   SSLEngine on
-  SSLCertificateFile /etc/ssl/federez/federez_task.crt +  SSLCertificateFile /etc/letsencrypt/live/nonagon.federez.net/fullchain.pem 
-  SSLCertificateKeyFile /etc/ssl/private/federez.key +  SSLCertificateKeyFile /etc/letsencrypt/live/nonagon.federez.net/privkey.pem 
-  SSLCertificateChainFile /etc/ssl/federez/federez_task_chain.crt + 
-  SSLCACertificateFile /etc/ssl/certs/StartCom_Certification_Authority.pem+  ProxyPass /ws "http://127.0.0.1:22280/" 
 +  ProxyPassReverse /ws "http://127.0.0.1:22280/"
 </VirtualHost> </VirtualHost>
 +
 </file> </file>
  
Ligne 138: Ligne 238:
  
  
-==== Configuration de la BdD ====+==== Configuration de la base de données ====
  
-On crée un utilisateur en BdD (via le compte root) :+On crée un utilisateur en base de données (via le compte root) :
 <code mysql> <code mysql>
-CREATE USER 'user'@'localhost' IDENTIFIED BY 'passwd'; +CREATE USER 'user'@'IP' IDENTIFIED BY 'passwd'; 
-GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW ON `phabricator\_%`.* TO 'user'@'localhost';+GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, SHOW VIEW ON `phabricator\_%`.* TO 'user'@'IP'; 
 +CREATE USER 'user_adm'@'IP' IDENTIFIED BY 'passwd'; 
 +GRANT ALL PRIVILEGES ON `phabricator\_%`.* TO 'user_adm'@'IP';
 </code> </code>
  
-On configure ensuite les accès à la BdD pour phabricator :+On configure ensuite les accès à la base de données pour phabricator :
 <code bash> <code bash>
 ./bin/config set mysql.user 'user' ./bin/config set mysql.user 'user'
 ./bin/config set mysql.pass 'passwd' ./bin/config set mysql.pass 'passwd'
-./bin/storage upgrade --user 'root' --password 'password'+./bin/config set mysql.host 'hôte' 
 +./bin/storage upgrade --user 'root' --password 'password' --host 'hôte'
 </code> </code>
  
Ligne 159: Ligne 262:
 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. 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 BdD, on change la configuration par défaut pour avoir :+Pour la base de données, on change la configuration par défaut pour avoir :
 <file autoconf /etc/mysql/my.cnf> <file autoconf /etc/mysql/my.cnf>
 max_allowed_packet = 48M max_allowed_packet = 48M
Ligne 173: Ligne 276:
 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. 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 BdD), on lancera :+Cependant, si l'on veut autoriser le stockage de fichiers sur disque (et non en base de données), on lancera :
 <code bash> <code bash>
-mkdir /data/phabricator+mkdir -p /data/phabricator
 chown www-data: /data/phabricator chown www-data: /data/phabricator
 ./bin/config set  "storage.local-disk.path" /data/phabricator ./bin/config set  "storage.local-disk.path" /data/phabricator
Ligne 182: Ligne 285:
 ==== Lancement des démons ==== ==== Lancement des démons ====
  
-Il faut aussi lancer les démons de phabricator (ils sont lancés automatiquement lors d'un redémarrage) +Il faut aussi lancer les démons de phabricator.
-<code bash>./bin/phd start</code>+
  
 +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 /opt/phabricator/phd -c "Phabricator Daemons" -s /usr/sbin/nologin phd
 +./bin/config set phd.user phd
 +./bin/phd start
 +</code>
 +
 +Pour qu'ils soient lancés automatiquement au démarrage, on ajoute à la crontab :
 +<code>
 +@reboot root /opt/phabricator/phabricator/bin/phd start
 +</code>
 +
 +==== 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 /etc/logrotate.d/phabricator>
 +# Conf pour les logs de phabricator
 +
 +/var/tmp/phd/log/daemons.log {
 +    daily
 +    missingok
 +    rotate 7
 +    compress
 +    notifempty
 +    create 740 phd phd
 +}
 +</file>
 +===== Configuration d'elasticsearch (option non retenue à FedeRez) =====
 +
 +Afin d'obtenir de meilleur résultats de recherche, il est possible de se baser sur elasticsearch.
 +L’installation est simple : cf [[https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html|la doc officielle]]
 +
 +Elasticsearch écoute de base sur ''0.0.0.0''. Afin d'augmenter la sécurité, on peut dé-commenter la ligne ''network.host: "127.0.0.1"'' dans ''/etc/elasticsearch/elasticsearch.yml''
 +
 +Après avoir activé le service au démarage (avec ''systemctl enable elasticsearch'') et lancé le service (avec ''systemctl start elasticsearch''), on peut l'activer dans phabricator.
 +
 +Il suffit de changer les configurations de phabricator avec les commandes: 
 +<code bash>/opt/phabricator/phabricator/bin/config set search.elastic.host "http://localhost:9200"
 +/opt/phabricator/phabricator/bin/config set search.elastic.namespace "phabricator"
 +</code>
 +
 +Enfin on execute, pour créer les index :
 +<code bash>/opt/phabricator/phabricator/bin/search init
 +/opt/phabricator/phabricator/bin/search index --all
 +</code>
 +
 +A partir de là on peut optimiser elasticsearch, changer la langue, rajouter des synonymes.
 +Cela se fait via curl :
 +<code bash>curl -XPUT 'http://127.0.0.1:9200/_template/template_phabricator' -d @mapping_phab.json</code>
 +Avec dans notre cas, un fichier mapping.json suivant.
 +<code javascript>
 +{
 +    "template": "phabricator",
 +    "settings": {
 +        "analysis": {
 +            "filter": {
 +                "trigrams_filter": {
 +                    "type":     "ngram",
 +                    "min_gram": 3,
 +                    "max_gram": 3
 +                },
 +                "french_elision": {
 +                    "type":         "elision",
 +                    "articles": [ "l", "m", "t", "qu", "n", "s",
 +                                  "j", "d", "c", "jusqu", "quoiqu",
 +                                  "lorsqu", "puisqu"
 +                                ]
 +                },
 +                "french_stop": {
 +                    "type":       "stop",
 +                    "stopwords":  "_french_"
 +                },
 +                "french_stemmer": {
 +                    "type":       "stemmer",
 +                    "language":   "french"
 +                }
 +            },
 +            "analyzer": {
 +                "french_no_trigrams": {
 +                    "type":      "custom",
 +                    "tokenizer": "standard",
 +                    "filter":   [
 +                        "french_elision",
 +                        "lowercase",
 +                        "french_stop",
 +                        "french_stemmer"
 +                    ]
 +                },
 +                "french_trigrams": {
 +                    "type":      "custom",
 +                    "tokenizer": "standard",
 +                    "filter":   [
 +                        "french_elision",
 +                        "lowercase",
 +                        "french_stop",
 +                        "french_stemmer",
 +                        "trigrams_filter"
 +                    ]
 +                }
 +            }
 +        }
 +    },
 +    "mappings": {
 +        "PROJ": {
 +            "properties": {
 +                "field": {
 +                    "properties": {
 +                        "corpus": {
 +                            "type": "string",
 +                    "analyzer": "french_trigrams"
 +                        }
 +                    }
 +                }
 +            }
 +        },
 +        "TASK": {
 +            "properties": {
 +                "field": {
 +                    "properties": {
 +                        "corpus": {
 +                            "type": "string",
 +                    "analyzer": "french_trigrams"
 +                        }
 +                    }
 +                }
 +            }
 +        },
 +        "USER": {
 +            "properties": {
 +                "field": {
 +                    "properties": {
 +                        "corpus": {
 +                            "type": "string",
 +                    "analyzer": "french_no_trigrams"
 +                        }
 +                    }
 +                }
 +            }
 +        }
 +    }
 +}
 +</code>
 +
 +Puis pour reindexer les objects :
 +<code bash>
 +/opt/phabricator/phabricator/bin/search index --all
 +</code>
 ===== Sauvegardes ===== ===== Sauvegardes =====
  
Ligne 196: Ligne 445:
 La restauration efface toutes les données et insère les anciennes. La restauration efface toutes les données et insère les anciennes.
  
-Le script lancé via la crontab tous les jours à 3:00 est le suivant :+Le script lancé indirectement via la crontab tous les jours à 3:00 est le suivant :
 <file bash /usr/local/sbin/phabricator_backup> <file bash /usr/local/sbin/phabricator_backup>
 #!/bin/bash #!/bin/bash
Ligne 235: Ligne 484:
  
 echo "Fin de la sauvegarde, temps total $((fin - debut))s." echo "Fin de la sauvegarde, temps total $((fin - debut))s."
 +</file>
 +
 +Pour gérer les logs on ajoute à la configuration de logrotate le fichier suivant :
 +<file yaml /etc/logrotate.d/phabricator_backup>
 +# Conf pour les backups de phabricator
 +
 +/var/log/phabricator_backup.log {
 +    weekly
 +    missingok
 +    rotate 4
 +    compress
 +    notifempty
 +    copytruncate
 +}
 </file> </file>
admin/services/phabricator.1433631469.txt.gz · Dernière modification : 2015/06/07 00:57 de david.sinquin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki