Outils pour utilisateurs

Outils du site


services:paste.chapril.org

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
services:paste.chapril.org [2026/04/11 17:40] – supprimée - modification externe (Date inconnue) 127.0.0.1services:paste.chapril.org [2026/04/11 17:40] (Version actuelle) – ↷ Page déplacée de admin:services:paste.chapril.org à services:paste.chapril.org pitchum
Ligne 1: Ligne 1:
 +====== Service paste.chapril.org ======
  
 +===== Introduction =====
 +
 +Cette documentation explique comment installer un service, en l’occurrence le //paste//, sur une nouvelle machine virtuelle de l’[[admin:schema_infra:start|infrastructure du Chapril]].
 +Ce service fait partie 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 [[admin:procedures:creation_machine_virtuelle|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 JavaScript.
 +Il est sous licence Zlib/libpng.
 +Le logiciel inclut 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'') et CC-BY (//favicon//, icône et logotype).
 +
 +Retrouvez la page de présentation du service sur le site [[https://www.chapril.org|www.chapril.org]] : [[https://www.chapril.org/-services-.html|www.chapril.org/-services-.html]].
 +
 +Site principal : [[https://privatebin.info|privatebin.info]]\\ 
 +Source et téléchargement : [[https://github.com/PrivateBin/PrivateBin|github.com/PrivateBin/PrivateBin]]\\ 
 +Machine virtuelle Chapril pour ce service : **lamp.cluster.chapril.org**\\
 +Page principale du service Paste Chapril: [[https://paste.chapril.org/|paste.chapril.org]]\\
 +Dépôt de l’April : [[https://forge.april.org/Chapril/paste.chapril.org-privatebin/|forge.april.org/Chapril/paste.chapril.org-privatebin]] - [[https://forge.april.org/Chapril/paste.chapril.org-tools|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 [[admin:procedures:creation_machine_virtuelle|Création d'une machine virtuelle « bling »]].
 +
 +Création d'un utilisateur (non indispensable mais fait pour le Chapril).
 +<code bash>
 +useradd pastechaprilorg
 +usermod -a -G www-data pastechaprilorg
 +</code>
 +
 +Ajouter le module ''php7.0-gd'' :
 +<code bash>
 +apt-get install php7.0-gd
 +</code>
 +
 +===== Installation =====
 +
 +==== Déploiement du code ====
 +
 +<code bash>
 +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
 +</code>
 +
 +==== Fichiers de logs ====
 +
 +<code bash>
 +cd /var/log/apache2/
 +mkdir paste.chapril.org
 +</code>
 +
 +==== Configuration d'apache2 ====
 +
 +Créer le fichier ''/etc/apache2/sites-avalailable/paste.chapril.org.conf'' avec le contenu ci-dessous.
 +<file apache /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>
 +</file>
 +
 +==== Activation de la configuration ====
 +
 +<code bash>
 +a2ensite paste.chapril.org.conf
 +systemctl reload apache2
 +</code>
 +
 +===== 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 :
 +<code bash>
 +ls -la /var/www/paste.chapril.org/public_html/cfg
 +conf.php -> /etc/chapril/chapril-paste.conf
 +</code>
 +
 +Configuration du fichier :
 +<code bash>
 +cp conf.sample.php conf.php
 +</code>
 +
 +Dans la section ''[traffic]'' :
 +<code ini>
 +dir = PATH "/var/www/paste.chapril.org/data_spec/"
 +</code>
 +
 +Dans la section ''[model_options]'' :
 +<code ini>
 +dir = PATH "/var/www/paste.chapril.org/data/"
 +</code>
 +
 +==== Création d’un répertoire pour les données et affectation des droits ====
 +
 +<code bash>
 +cd /var/www/paste.chapril.org/
 +mkdir data  
 +chown www-data:www-data data
 +chmod -R u+rwX /var/www/paste.chapril.org/data
 +</code>
 +
 +==== Création d’un répertoire pour les versions et affectation des droits ====
 +
 +<code bash>
 +cd /var/www/paste.chapril.org/
 +mkdir versions
 +chown www-data:www-data versions
 +chmod -R u+rwX /var/www/paste.chapril.org/versions
 +</code>
 +
 +===== 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''.
 +<code 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);
 +</code>
 +
 +Cette fonction est appelée à plusieurs endroits, 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 ou déchiffrées dans le navigateur par un chiffrement AES 256 bits.
 +Plus d'informations sur la page du projet.
 +
 +<note>
 +La seule modification par rapport au texte d'origine est //open source// transformé ici en //libre//.
 +</note>
 +
 +===== 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/''.
 +
 +<code bash>
 +mkdir /srv/paste.chapril.org/tools
 +mkdir /srv/paste.chapril.org/tools/rapport_activite
 +</code>
 +
 +Copier dans ce répertoire le script ''rapport_activite.sh''((Fichier distant : ''https://forge.april.org/Chapril/paste.chapril.org-tools/src/branch/master/rapport_activite/rapport_activite.sh''.)) et le rendre exécutable((Si nécessaire se mettre sur la dernière branche.)).
 +
 +Puis créer la tâche Cron en ajoutant un fichier ''pastechaprilorg'' dans ''/etc/cron.d/'' avec les lignes suivantes :
 +<file - /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
 +</file>
 +
 +==== Création d’un dossier de projet ====
 +
 +Créer le répertoire ''/srv/paste.chapril.org/Exploitation'' avec dedans un fichier ''rapport_paste.log''.
 +<code bash>
 +mkdir /srv/paste.chapril.org/Exploitation
 +touch rapport_paste.log
 +</code>
 +
 +==== Maintenance du fichier chapril.log ====
 +
 +Pour nettoyer chaque année le fichier ''paste.log'', voici une solution :
 +<code bash>
 +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
 +</code>
 +
 +On ne garde que l'année en cours dans le fichier ''paste.log''.
 +
 +Mise en place de rotation du fichier log :
 +<code bash>
 +cd /etc/logrotate.d/
 +vim paste
 +</code>
 +
 +Contenu du fichier ''paste'' :
 +<code>
 +/var/www/paste.chapril.org/paste.log {
 + monthly
 + rotate 12
 + compress
 + delaycompress
 + missingok
 + notifempty
 + create 644 root root
 +}
 +</code>
 +
 +===== 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/''.
 +
 +<code bash>
 +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
 +
 +</code>
 +
 +===== 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 ''expiration''((Voir la doc [[https://github.com/PrivateBin/PrivateBin/wiki/Configuration#expiration|github.com/PrivateBin/PrivateBin/wiki/Configuration#expiration]] pour tous les paramètres.)) 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 :
 +<code bash>
 +vim /etc/chapril/chapril-paste.conf
 +</code>
 +
 +<file toml /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
 +</file>
 +
 +==== 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.
 +<code bash>
 +ls /var/www/paste.chapril.org/data/
 +find /var/www/paste.chapril.org/data/ -type f
 +</code>
 +
 +Trouver les fichiers avec ''expire_date'' dans les métadonnées :
 +<code bash>
 +find /var/www/paste.chapril.org/data -type f | tail -n 1000 | xargs -I{} grep expire_date
 +</code>
 +
 +Nettoyage ((La nouvelle configuration évitera d'avoir à faire ces opérations à l'avenir.)) :
 +<code bash>
 +# 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
 +</code>
 +
 +==== Commandes utiles ====
 +
 +Compter les //pastes// :
 +<code bash>
 +find /var/www/paste.chapril.org/data -type f | wc -l
 +</code>
 +
 +Retrouver la date d’un //paste// avec la commande ''date'' à partir du //timestamp//, par exemple :
 +<code bash>
 +date -d@1736291828
 +</code>
 +
 +En retour : ''mer. 08 janv. 2025 00:17:08 CET''.
 +
 +Trouver les tâches Cron pour Paste :
 +<code bash>
 +rgrep paste /etc/cron*
 +</code>
 +
 +Surveillance de l'activité du serveur avec ''goaccess''.
 +
 +Configuration en décommentant les différents formats souhaités :
 +<code bash>
 +vim /etc/goaccess/goaccess.conf
 +</code>
 +
 +Utilisation :
 +<code bash>
 +cd /var/log/apache2/paste.chapril.org/
 +tail -fn 20 paste.chapril.org-access.log | goaccess
 +</code>
 +
 +Utilisation alternative :
 +<code bash>
 +cd /var/log/apache2/paste.chapril.org/
 +goaccess paste.chapril.org-access.log
 +</code>
 +
 +===== 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 ''scp'' ou on le récupère avec ''wget'' puis on suit également la procédure indiquée.)).
 +
 +<note>
 +On doit aussi envoyer la nouvelle version à la forge April avec un étiquette contenant le mot ''chapril''.
 +</note>
 +
 +<note>
 +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 faisant ''screen''.
 +</note>
 +
 +==== Générer le « livrable » en local ====
 +
 +<note>
 +Cette étape se déroule de préférence sur le poste de travail de l'animsys, pas sur le serveur.
 +</note>
 +
 +=== La première fois ===
 +
 +<code bash>
 +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
 +</code>
 +
 +=== Les fois suivantes ===
 +
 +<code bash>
 +cd ~/code/chapril/paste-chapril
 +git fetch --all
 +git pull --rebase
 +</code>
 +
 +Trouver l’étiquette de la version qui nous intéresse.
 +C’est probablement le dernier qui nous intéresse, donc on peut l'obtenir avec cette commande :
 +<code bash>
 +git tag --sort=v:refname | tail -n 1
 +</code>
 +
 +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 :
 +<code bash>
 +export VERSION=1.7.x
 +</code>
 +
 +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.
 +
 +<note>
 +TODO : décrire grossièrement la procédure de résolution des conflits (''edit'', ''git add'' et ''git rebase --continue'').
 +</note>
 +
 +<code bash>
 +cd ~/code/chapril/paste-chapril/
 +git checkout main-chapril
 +git rebase ${VERSION?}
 +</code>
 +
 +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.
 +
 +<code bash>
 +git log --oneline -n 10
 +</code>
 +
 +Maintenant on créé une étiquette (//tag//), puis une archive ''*.tar.gz'' à partir de cette étiquette((L'archive pourrait aussi être récupérée sur la forge de l’April après le //push// de la nouvelle étiquette.)) :
 +<code bash>
 +git tag ${VERSION?}-chapril
 +git archive --prefix=paste-${VERSION?}-chapril/ -o /tmp/paste-${VERSION?}-chapril.tar.gz ${VERSION?}-chapril
 +</code>
 +
 +On envoie la nouvelle version locale et l’étiquette vers la forge April avec la commande ''push''.
 +Des identifiants utilisateurs de la forge April sont demandés.
 +
 +<code bash>
 +git push origin # Pousser les changements vers la forge April
 +git push --tags origin # Pousser le tag aussi vers la forge April
 +</code>
 +
 +=== En cas d'erreur lors du git push origin ===
 +
 +Si on a un message d'erreur :
 +<code>
 +! [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'
 +</code>
 +
 +Il faut faire une tirage du dépôt distant vers le dépôt local :
 +<code bash>
 +git pull origin
 +</code>
 +
 +Tirage par fusion :
 +<code bash>
 +git config pull.rebase=false
 +</code>
 +
 +Éditer chaque fichier en conflit :
 +<code bash>
 +git status
 +</code>
 +
 +Écraser la dernière étiquette (//tag//) :
 +<code bash>
 +git tag -f $VERSION
 +</code>
 +
 +Pousser le dépôt local vers le dépôt distant :
 +<code bash>
 +git push --tags origin
 +<code>
 +
 +==== 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 [[https://forge.april.org/Chapril/paste.chapril.org-privatebin/tags|page des étiquettes du dépôt]].
 +
 +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 :
 +<code bash>
 +export VERSION=1.7.x
 +</code>
 +
 +On extrait alors dans un dossier dédié, dans lequel on doit recopier le fichier ''conf.php'' spécifique au Chapril ((On ne le copie pas ; on créé plutôt un lien symbolique parce qu'on aime créer du lien. :-) )).
 +
 +<code bash>
 +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
 +</code>
 +
 +Il faut remettre le lien symbolique vers le fichier de configuration ''/etc/chapril/chapril-paste.conf''.
 +
 +<code bash>
 +cd versions/chapril-paste-${VERSION?}/cfg/
 +ln -s /etc/chapril/chapril-paste.conf conf.php
 +</code>
 +
 +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 :
 +<code bash>
 +scp paste-${VERSION?}-chapril.tar.gz lamp.cluster.chapril.org:/var/www/paste.chapril.org/versions/
 +</code>
 +
 +On peut maintenant faire la bascule, tout simplement en remplaçant le lien symbolique ''public_html'' pour qu’il pointe vers le nouveau répertoire.
 +Cela se fait avec la commande de suppression du lien symbolique actuel, puis création du lien symbolique vers la nouvelle version :
 +<code bash>
 +cd /var/www/paste.chapril.org/
 +rm -f public_html ; ln -s versions/chapril-paste-${VERSION?} public_html
 +</code>
 +
 +On vérifie que l’application fonctionne toujours correctement en visitant [[https://paste.chapril.org/|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) :
 +<code bash>
 +rm -f public_html ; ln -s versions/chapril-paste-1.7.x public_html
 +</code>