Table des matières
Service paste.chapril.org
Introduction
Cette documentation explique comment installer un service, en l’occurrence le paste, sur une nouvelle machine virtuelle de l'infrastructure du Chapril. Ce service fait parti d'un ensemble de services du Chapril, une partie de sa mise en place est donc similaire aux autres services. Même si l'ensemble de la procédure est traitée, c'est la partie plus spécifique à ce service qui sera la plus détaillée. Par exemple, la création d'une machine virtuelle renvoie sur une autre page et n'est pas détaillée ici. Cette documentation est technique mais se veut accessible avec de bonnes connaissances notamment en ce qui concerne la ligne de commande.
Ce service est basé sur le logiciel Privatebin. Celui-ci est écrit en PHP et JS est sous licence Zlib/libpng. Le logiciel inclue aussi des librairies sous licences GPLv2 (rawinflate), BSD 3-clause (Showdown), MIT (base64.js version 1.7, Bootstrap, Identicon, random_compat, composer, kjua, base-x), Apache (prettify.js) and CC-BY (favicon, icon, logo).
Retrouvez la page de présentation du service sur le site www.chapril.org : www.chapril.org/-services-.html
Site principal : privatebin.info
Source et téléchargement : github.com/PrivateBin/PrivateBin
Machine virtuelle Chapril pour ce service : lamp.cluster.chapril.org
Page principale du service paste Chapril: paste.chapril.org
Aspects techniques
Les données peuvent être stockées en SQL ou en fichier plat, ici la solution retenue est fichier plat.
Préparation
Création de la VM avec la procédure Création d'une machine virtuelle « bling ».
création d'un utilisateur (non indispensable mais fait pour chapril)
useradd pastechaprilorg usermod -a -G www-data pastechaprilorg
Ajouter le module php7.0-gd
apt-get install php7.0-gd
Installation
Déploiement du code
cd /var/www/ wget https://github.com/PrivateBin/PrivateBin/archive/x.x.x.tar.gz tar xf x.x.x.tar.gz && rm x.x.x.tar.gz mv PrivateBin-x.x.x paste.chapril.org chown www-data:www-data -R /var/www/paste.chapril.org
Fichiers de logs
cd /var/log/apache2/ mkdir paste.chapril.org
Configuration d'apache2
Créer le fichier /etc/apache2/sites-avalailable/paste.chapril.org.conf avec le contenu ci-dessous
<VirtualHost *:80> ServerName paste.chapril.org ServerAdmin webmaster@localhost DocumentRoot /var/www/paste.chapril.org/ php_admin_value open_basedir "/var/www/paste.chapril.org/" <Directory "/var/www/paste.chapril.org/"> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/paste.chapril.org/paste.chapril.org-error.log CustomLog ${APACHE_LOG_DIR}/paste.chapril.org/paste.chapril.org-access.log combined-proxy </VirtualHost>
Activation de la configuration
a2ensite paste.chapril.org.conf systemctl reload apache2
Configuration
cd /var/www/paste.chapril.org/cfg cp conf.sample.php conf.php Dans la section [traffic] du fichier conf.php dir = PATH "/var/www/paste.chapril.org/data" Dans la section [purge] du fichier conf.php dir = PATH "data" Dans la section [model_options] du fichier conf.php dir = PATH "data"
Création d'un répertoire pour les données et affectation des droits
cd /var/www/paste.chapril.org mkdir data chown www-data:www-data data chmod -R u+rwX /var/www/paste.chapril.org/data
Création d'un répertoire pour les versions et affectation des droits
cd /var/www/paste.chapril.org mkdir versions chown www-data:www-data versions chmod -R u+rwX /var/www/paste.chapril.org/versions
Rapport d'activité
Créer le répertoire rapport_activite dans /srv/paste.chapril.org/tools
mkdir /srv/paste.chapril.org/tools mkdir /srv/paste.chapril.org/tools/rapport_activite
Copier dans ce répertoire le script rapport_activite.sh https://forge.april.org/Chapril/paste.chapril.org-tools/src/branch/master/rapport_activite/rapport_activite.sh et le rendre executable. (Si nécessaire se mettre sur la dernière branche)
puis créer la tache cron en ajoutant un fichier pastechaprilorg dans /etc/cron.d avec la ligne suivante
1 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/paste.chapril.org/Exploitation/rapport_paste.log 2>&1
Création d'un dossier de projet
Créer le répertoire /srv/paste.chapril.org/Exploitation Avec dedans un fichier rapport_paste.log
mkdir /srv/paste.chapril.org/Exploitation touch rapport_paste.log
Monitoring
Mettre dans le dossier /usr/lib/nagios/plugins un fichier check_pastechaprilorg_update et une copie dans /srv/paste.chapril.org/tools/monitoring
function usage() { echo "Usage : $0" } # if [ "$#" -ne 0 ]; then usage else lastVersion=$(curl -s https://privatebin.info/|grep Current|cut -d' ' -f3|cut -d'<' -f1) currentVersion=$(cd /var/www/paste.chapril.org && git branch | grep '*'|cut -c 11-100 ) #echo $lastVersion #echo $currentVersion if [ $currentVersion = $lastVersion ]; then echo "OK" result=0 else echo "WARNING : new version available, current is $currentVersion, last is $lastVersion." result=1 fi fi exit $result
Installation d'une mise à jour
Mise à jour de paste
La mise à jour se passe en deux temps :
- Générer le livrable sous forme de tarball (la nouvelle version) sur le poste de travail de l'animsys, cela en utilisant git et les dépots de l'April et de Github et en suivant la procédure indiquée.
- Déployer ce tarball sur le serveur, on envoie le tarball par la commande scp ou on le récupère avec wget, puis on suit également la procédure indiquée.
Remarques :
- On doit aussi envoyer la nouvelle version à la forge April avec un étiquette contenant le mot “chapril”.
- Si on est deux et à distance, pour travailler on peut partager un screen, le premier utilisateur se connecte en faisant
screen -x
le deuxième en faisantscreen
Générer le "livrable" en local
La première fois
mkdir -p ~/code/chapril/paste-chapril cd ~/code/chapril/paste-chapril/ git clone https://forge.april.org/Chapril/paste.chapril.org-privatebin.git . # ne pas oublier le "." ici git remote add upstream https://github.com/PrivateBin/PrivateBin.git git fetch --all
Les fois suivantes
cd ~/code/chapril/paste-chapril git fetch --all
Trouver le tag de la version qui nous intéresse. C'est probablement le dernier qui nous intéresse, donc on peut l'obtenir avec cette commande :
git tag --sort=v:refname | tail -n 1
Le tail -n 1
est optionnel, on pourrait aussi mettre tail -n 1
pour voir les cinq derniers.
Stockons le numéro de version qui nous intéresse dans une variable, ici la version 1.7.x pour l'exemple :
export VERSION=1.7.x
Soit, se mettre sur la branche paste-chapril (git checkout), puis mettre les deux sources ensemble gitub.com et forge.april.org en conservant les personnalisations de forge.april.org (git rebase). C'est alors qu'il faut résoudre les éventuels conflits.
cd ~/code/chapril/paste-chapril git checkout main-chapril git rebase ${VERSION?}
Une fois les conflits résolus, on vérifie si les commits Chaprils sont présents
Pour cela, voir dans les dernières lignes si les trois commits de personnalisation sont présents
git log --oneline -n 10
Maintenant on créé un tag, puis une archive tar.gz à partir de ce tag :
(L'archive pourrait aussi être récupérée sur la forage April après le push du nouveau tag)
git tag ${VERSION?}-chapril git archive --prefix=paste-${VERSION?}-chapril/ -o /tmp/paste-${VERSION?}-chapril.tar.gz ${VERSION?}-chapril
On envoie la nouvelle version locale et le tag vers la forge April avec la commande push
.
Des identifiants utilisateur de la forge April sont demandés.
git push origin # Pousser les changements vers la forge April git push --tags origin # Pousser le tag aussi vers la forge April
Déployer sur la VM Lamp la nouvelle version
Se connecter sur la Vm Lamp.
Le tag créé dans la précédente section donne lieu à la création d'un tarball téléchargeable sur la page des tags de la forge.
Stockons une fois de plus le numéro de version qui nous intéresse dans une variable, ici la version 1.7. x pour l'exemple :
export VERSION=1.7.x
On extrait alors dans un dossier dédié, dans lequel on doit recopier le fichier conf.php spécifique de Chapril (on ne le copie pas, on créé plutôt un lien symbolique parce qu'on aime créer du lien :) )
cd /var/www/paste.chapril.org/ wget -O versions/paste-${VERSION?}-chapril.tar.gz \ https://forge.april.org/Chapril/paste.chapril.org-privatebin/archive/${VERSION?}-chapril.tar.gz sudo -u www-data tar \ --one-top-level=versions/chapril-paste-${VERSION?} \ --strip-components=1 \ -xavf versions/paste-${VERSION?}-chapril.tar.gz cd versions/chapril-paste-${VERSION?}/cfg/ ln -s /etc/chapril/chapril-paste.conf conf.php
Remarque : Méthode alternative pour la récupération du tarball. Dans le cas ou la commande wget précédente ne marche pas, on peut envoyer le fichier de la machine locale vers la vm lamp avec la commande suivante :
scp ${VERSION?}-chapril.tar.gz root@lamp.cluster.chapril.org:/var/www/paste.chapril.org/versions/
On peut maintenant faire la bascule, tout simplement en remplaçant le lien symbolique public_html pour qu'il pointe vers le nouveau dossier. Cela se fait avec la commande de suppression du lien symbolique actuel, puis création du lien symbolique vers la nouvelle version :
cd /var/www/paste.chapril.org/ rm -f public_html ; ln -s versions/chapril-paste-${VERSION?} public_html
On vérifie que l'application fonctionne toujours correctement en visitant paste.chapril.org.
Si besoin, on peut rapidement faire un retour arrière à la version précédente (version 1.7.x ici), suppression du lien symbolique et création du lien symbolique vers la version précédente avec la commande suivante (remplacer x par le numéro de la version à restaurer) :
rm -f public_html ; ln -s versions/chapril-paste-1.7.x public_html