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. Il est sous licence Zlib/libpng. Le logiciel inclue aussi des bibliothèques sous licences GNU 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
Forges April : forge.april.org/Chapril/paste.chapril.org-privatebin - forge.april.org/Chapril/paste.chapril.org-tools
Aspects techniques
Les données peuvent être stockées en SQL ou en fichier plat. Ici la solution retenue est le 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.
- /etc/apache2/sites-avalailable/paste.chapril.org.conf
<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
Fichier de configuration
Il s'agit du fichier de configuration principal de l'application, par défaut il est à cet endroit /var/www/paste.chapril.org/public_html/cfg/conf.php
Pour nous, son emplacement est /etc/chapril/chapril-paste.conf, mais on y accède dans l'application par un lien symbolique :
ls -la /var/www/paste.chapril.org/public_html/cfg conf.php -> /etc/chapril/chapril-paste.conf
Configuration du fichier
cp conf.sample.php conf.php Dans la section [traffic] dir = PATH "/var/www/paste.chapril.org/data_spec/" Dans la section [model_options] dir = PATH "/var/www/paste.chapril.org/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
Personnalisation
favicon et logo
Les deux fichiers favicon du Chapril (favicon-16x16_chapril.png et favicon-32x32_chapril.png) sont à placer dans le dossier img/
Mise en place d'un fichier de log
Celui-ci permet de voir l'activité plus facilement, on voit pour chaque accès si il y a une lecture (read) ou une création (create) d'un paste avec la date, l'heure et un identifiant. Ce fichier se nomme paste.log et se trouve ici : /var/www/paste.chapril.org/
Pour cela on ajoute une fonction dans le fichier suivant : /var/www/paste.chapril.org/public_html/lib/Data/Filesystem.php
private function logToChapril($message, $id=null)
{
$today = date('Y-m-d H:i:s');
$texte_retour="$today $message \t$id\n";
return (bool) file_put_contents("/var/www/paste.chapril.org/paste.log",$texte_retour,FILE_APPEND|LOCK_EX);
Cette fonction est appelé à plusieurs endroit, lors d'une lecture ou d'une création d'un paste.
Texte sur la page d'accueil
Un texte pour le Chapril est affiché sur la page d'accueil, on le trouve dans le fichier : /var/www/paste.chapril.org/public_html/i18n/fr.json
PasteChaprilOrg est un 'pastebin' (ou gestionnaire d'extraits de texte et de code source) minimaliste et libre, dans lequel le serveur n'a aucune connaissance des données envoyées. Les données sont chiffrées/déchiffrées dans le navigateur par un chiffrement AES 256 bits. Plus d'informations sur la page du projet.
Rapport d’activité
Ce rapport permet de voir l'activité du service avec différentes informations, il est généré chaque mois :
- Nombre total de requêtes http
- Nombre de vraies requêtes http
- Nombre de requêtes bot
- Nombre de requêtes http en erreur
- Nombre de pastes créés ce mois
- Nombre de pastes supprimés ce mois
- Nombre de commentaires ce mois
- Nombre de lectures ce mois
- Nombre de lectures ce mois - les commentaires
- Nombre de pastes dans la base actuellement
- Taille totale de la base des pastes
- Nombre d'ipv4 ayant visité le service
- Nombre d'ipv6 ayant visité le service
- Nombre total d'ip ayant visité le service
- Nombre d'ipv4 utilisatrices du service
- Nombre d'ipv6 utilisatrices du service
- Nombre total d'ip utilisatrices du service
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
1) et le rendre exécutable 2).
Puis créer la tâche cron en ajoutant un fichier pastechaprilorg dans /etc/cron.d avec la ligne suivante :
- /etc/cron.d/pastechaprilorg
6 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/paste.chapril.org/Exploitation/rapport_paste.log 2>&1 20 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/update_redmine_ticket.sh >> /var/log/paste_stats.log
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
Maintenance du fichier chapril.log
Pour nettoyer chaque année le fichier paste.log, voici une solution :
cd /var/www/paste.chapril.org cat paste.log |grep 2024- > paste_2024.log cat paste.log |grep 2025- > paste_2025.log cat paste_2025.log >> paste.log
On ne garde que l'année en cours dans le fichier paste.log
Mise en place de rotation du fichier log :
cd /etc/logrotate.d vim paste
Contenu du fichier paste :
/var/www/paste.chapril.org/paste.log { monthly rotate 12 compress delaycompress missingok notifempty create 644 root root }
Monitoring
Mettre dans le répertoire /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
Modération
Modification de la configuration de base
Pour limiter le nombre de pad et éviter que des pastes restent indéfiniment on modifie le paramètre expiration3) avec pour valeur par défaut un jour et un maximum d’une semaine (au lieu d’un temps illimité).
Édition du fichier de configuration :
vim /etc/chapril/chapril-paste.conf
- /etc/chapril/chapril-paste.conf
[expire] ; expire value that is selected per default ; make sure the value exists in [expire_options] # default = "1week" default = "1day" [expire_options] ; Set each one of these to the number of seconds in the expiration period, ; or 0 if it should never expire 5min = 300 10min = 600 1hour = 3600 1day = 86400 1week = 604800 ;1month = 2592000 ;1year = 31536000 ;never = 0
Supprimer des pastes en ligne de commande
Les fichiers contenant les pastes sont dans le répertoire /var/www/paste.chapril.org/data.
Se placer dans le répertoire data/ et lister les fichiers de type fichier.
ls /var/www/paste.chapril.org/data/ find /var/www/paste.chapril.org/data/ -type f
Trouver les fichiers avec expire_date dans les metadata :
find /var/www/paste.chapril.org/data -type f | tail -n 1000 | xargs -I{} grep expire_date
Nettoyage (la nouvelle configuration évitera d'avoir à faire ces opérations à l'avenir)
# Compter les fichiers qui ont la metadonnée "expire_date" et qui ont une date d'expiration définie # rgrep expire_date ./ |wc -l # Compter les fichiers qui n'ont pas la metadonnée "expire_date" et qui donc n'ont pas d'expiration rgrep -L expire_date ./ |wc -l # Supprimer (xarg rm) les fichiers sans date d'expiration rgrep -L expire_date ./ |xargs rm # Compter les fichiers modifiés il y a plus de 60 jours find ./ -type f -mtime +60 | wc -l # Supprimer (option -delete) les fichiers modifiés il y a plus de 60 jours find ./ -type f -mtime +60 -delete
Commandes utiles
- Compter les pastes
find /var/www/paste.chapril.org/data -type f | wc -l
- Retrouver la date d’un paste avec la commande
dateà partie du timestamp, par exemple :
date -d@1736291828
En retour : mer. 08 janv. 2025 00:17:08 CET.
- Trouver les tâches cron pour Paste :
rgrep paste /etc/cron*
- Surveillance de l'activité du serveur avec goaccess :
Configuration en décommentant les différents formats souhaités
vim /etc/goaccess/goaccess.conf
Utilisation :
cd /var/log/apache2/paste.chapril.org tail -fn 20 paste.chapril.org-access.log | goaccess ou goaccess paste.chapril.org-access.log
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, les dépôts de l'April et de Github ainsi qu’en suivant la procédure indiquée.
- Déployer cette tarball sur le serveur. On envoie la tarball par la commande
scpou on le récupère avecwget. 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 git pull --rebase
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
Puis se mettre sur la branche paste-chapril (git checkout), mettre les deux sources gitub.com et forge.april.org ensemble 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 Chapril 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éé une étiquette (tag), puis une archive *.tar.gz à partir de cette étiquette4) :
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 l’étiquette 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
En cas d'erreur lors du git push origin :
Si on a un message d'erreur
! [rejected] main-chapril -> main-chapril (non-fast-forward) erreur : impossible de pousser des références vers 'https://forge.april.org/Chapril/paste.chapril.org-privatebin.git'
Il faut faire une tirage du dépôt distant vers le dépôt local
`git pull origin`
Tirage par fusion
`git config pull.rebase=false`
Editer chaque fichier en conflit
`git status`
Ecraser la dernière étiquette (tag)
`git tag -f $VERSION`
Pousser le dépôt local vers le dépôt distant
`git push –tags origin`
Déployer sur la VM Lamp la nouvelle version
Se connecter sur la Vm Lamp.
L’étiquette créé dans la précédente section donne lieu à la création d'une 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
Il faut remettre le lien symbolique vers le fichier de configuration /etc/chapril/chapril-paste.conf
cd versions/chapril-paste-${VERSION?}/cfg/ ln -s /etc/chapril/chapril-paste.conf conf.php
Remarque : Une méthode alternative existe pour la récupération de la tarball. Dans le cas où 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 paste-${VERSION?}-chapril.tar.gz 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
