services:paste.chapril.org
Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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.1 | services: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: | ||
| + | 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: | ||
| + | Cette documentation est technique mais se veut accessible avec de bonnes connaissances, | ||
| + | |||
| + | Ce service est basé sur le logiciel Privatebin. | ||
| + | Celui-ci est écrit en PHP et JavaScript. | ||
| + | Il est sous licence Zlib/ | ||
| + | Le logiciel inclut aussi des bibliothèques sous licences GNU GPLv2 (Rawinflate), | ||
| + | |||
| + | Retrouvez la page de présentation du service sur le site [[https:// | ||
| + | |||
| + | Site principal : [[https:// | ||
| + | Source et téléchargement : [[https:// | ||
| + | Machine virtuelle Chapril pour ce service : **lamp.cluster.chapril.org**\\ | ||
| + | Page principale du service Paste Chapril: [[https:// | ||
| + | Dépôt de l’April : [[https:// | ||
| + | |||
| + | ==== 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: | ||
| + | |||
| + | Création d'un utilisateur (non indispensable mais fait pour le Chapril). | ||
| + | <code bash> | ||
| + | useradd pastechaprilorg | ||
| + | usermod -a -G www-data pastechaprilorg | ||
| + | </ | ||
| + | |||
| + | Ajouter le module '' | ||
| + | <code bash> | ||
| + | apt-get install php7.0-gd | ||
| + | </ | ||
| + | |||
| + | ===== Installation ===== | ||
| + | |||
| + | ==== Déploiement du code ==== | ||
| + | |||
| + | <code bash> | ||
| + | cd /var/www/ | ||
| + | wget https:// | ||
| + | tar xf x.x.x.tar.gz && rm x.x.x.tar.gz | ||
| + | mv PrivateBin-x.x.x paste.chapril.org | ||
| + | chown www-data: | ||
| + | </ | ||
| + | |||
| + | ==== Fichiers de logs ==== | ||
| + | |||
| + | <code bash> | ||
| + | cd / | ||
| + | mkdir paste.chapril.org | ||
| + | </ | ||
| + | |||
| + | ==== Configuration d' | ||
| + | |||
| + | Créer le fichier ''/ | ||
| + | <file apache / | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | < | ||
| + | AllowOverride All | ||
| + | </ | ||
| + | |||
| + | | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Activation de la configuration ==== | ||
| + | |||
| + | <code bash> | ||
| + | a2ensite paste.chapril.org.conf | ||
| + | systemctl reload apache2 | ||
| + | </ | ||
| + | |||
| + | ===== Configuration ===== | ||
| + | |||
| + | ==== Fichier de configuration ==== | ||
| + | |||
| + | Il s'agit du fichier de configuration principal de l' | ||
| + | Par défaut il est à cet endroit : ''/ | ||
| + | |||
| + | Pour nous, son emplacement est ''/ | ||
| + | <code bash> | ||
| + | ls -la / | ||
| + | conf.php -> / | ||
| + | </ | ||
| + | |||
| + | Configuration du fichier : | ||
| + | <code bash> | ||
| + | cp conf.sample.php conf.php | ||
| + | </ | ||
| + | |||
| + | Dans la section '' | ||
| + | <code ini> | ||
| + | dir = PATH "/ | ||
| + | </ | ||
| + | |||
| + | Dans la section '' | ||
| + | <code ini> | ||
| + | dir = PATH "/ | ||
| + | </ | ||
| + | |||
| + | ==== Création d’un répertoire pour les données et affectation des droits ==== | ||
| + | |||
| + | <code bash> | ||
| + | cd / | ||
| + | mkdir data | ||
| + | chown www-data: | ||
| + | chmod -R u+rwX / | ||
| + | </ | ||
| + | |||
| + | ==== Création d’un répertoire pour les versions et affectation des droits ==== | ||
| + | |||
| + | <code bash> | ||
| + | cd / | ||
| + | mkdir versions | ||
| + | chown www-data: | ||
| + | chmod -R u+rwX / | ||
| + | </ | ||
| + | |||
| + | ===== Personnalisation ===== | ||
| + | |||
| + | ==== Favicon et logo ==== | ||
| + | |||
| + | Les deux fichiers //favicon// du Chapril ('' | ||
| + | |||
| + | ==== Mise en place d'un fichier de log ==== | ||
| + | |||
| + | Celui-ci permet de voir l' | ||
| + | Ce fichier se nomme '' | ||
| + | |||
| + | Pour cela on ajoute une fonction dans le fichier suivant : ''/ | ||
| + | <code php> | ||
| + | private function logToChapril($message, | ||
| + | { | ||
| + | $today = date(' | ||
| + | $texte_retour=" | ||
| + | return (bool) file_put_contents("/ | ||
| + | </ | ||
| + | |||
| + | Cette fonction est appelée à plusieurs endroits, lors d'une lecture ou d'une création d'un //paste//. | ||
| + | |||
| + | ==== Texte sur la page d' | ||
| + | |||
| + | Un texte pour le Chapril est affiché sur la page d' | ||
| + | On le trouve dans le fichier : ''/ | ||
| + | |||
| + | '' | ||
| + | Les données sont chiffrées ou déchiffrées dans le navigateur par un chiffrement AES 256 bits. | ||
| + | Plus d' | ||
| + | |||
| + | < | ||
| + | La seule modification par rapport au texte d' | ||
| + | </ | ||
| + | |||
| + | ===== Rapport d’activité ===== | ||
| + | |||
| + | Ce rapport permet de voir l' | ||
| + | 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 '' | ||
| + | |||
| + | <code bash> | ||
| + | mkdir / | ||
| + | mkdir / | ||
| + | </ | ||
| + | |||
| + | Copier dans ce répertoire le script '' | ||
| + | |||
| + | Puis créer la tâche Cron en ajoutant un fichier '' | ||
| + | <file - / | ||
| + | 6 0 1 * * root / | ||
| + | 20 0 1 * * root / | ||
| + | </ | ||
| + | |||
| + | ==== Création d’un dossier de projet ==== | ||
| + | |||
| + | Créer le répertoire ''/ | ||
| + | <code bash> | ||
| + | mkdir / | ||
| + | touch rapport_paste.log | ||
| + | </ | ||
| + | |||
| + | ==== Maintenance du fichier chapril.log ==== | ||
| + | |||
| + | Pour nettoyer chaque année le fichier '' | ||
| + | <code bash> | ||
| + | cd / | ||
| + | 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' | ||
| + | |||
| + | Mise en place de rotation du fichier log : | ||
| + | <code bash> | ||
| + | cd / | ||
| + | vim paste | ||
| + | </ | ||
| + | |||
| + | Contenu du fichier '' | ||
| + | < | ||
| + | / | ||
| + | monthly | ||
| + | rotate 12 | ||
| + | compress | ||
| + | delaycompress | ||
| + | missingok | ||
| + | notifempty | ||
| + | create 644 root root | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Monitoring ===== | ||
| + | |||
| + | Mettre dans le répertoire ''/ | ||
| + | |||
| + | <code bash> | ||
| + | function usage() { | ||
| + | echo "Usage : $0" | ||
| + | } | ||
| + | |||
| + | # | ||
| + | if [ " | ||
| + | usage | ||
| + | else | ||
| + | lastVersion=$(curl -s https:// | ||
| + | currentVersion=$(cd / | ||
| + | #echo $lastVersion | ||
| + | #echo $currentVersion | ||
| + | if [ $currentVersion = $lastVersion ]; then | ||
| + | echo " | ||
| + | result=0 | ||
| + | else | ||
| + | echo " | ||
| + | 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 '' | ||
| + | |||
| + | Édition du fichier de configuration : | ||
| + | <code bash> | ||
| + | vim / | ||
| + | </ | ||
| + | |||
| + | <file toml / | ||
| + | [expire] | ||
| + | ; expire value that is selected per default | ||
| + | ; make sure the value exists in [expire_options] | ||
| + | # default = " | ||
| + | default = " | ||
| + | |||
| + | [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 ''/ | ||
| + | |||
| + | Se placer dans le répertoire '' | ||
| + | <code bash> | ||
| + | ls / | ||
| + | find / | ||
| + | </ | ||
| + | |||
| + | Trouver les fichiers avec '' | ||
| + | <code bash> | ||
| + | find / | ||
| + | </ | ||
| + | |||
| + | Nettoyage ((La nouvelle configuration évitera d' | ||
| + | <code bash> | ||
| + | # Compter les fichiers qui ont la metadonnée " | ||
| + | # rgrep expire_date ./ |wc -l | ||
| + | |||
| + | # Compter les fichiers qui n'ont pas la metadonnée " | ||
| + | rgrep -L expire_date ./ |wc -l | ||
| + | |||
| + | # Supprimer (xarg rm) les fichiers sans date d' | ||
| + | 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 | ||
| + | find ./ -type f -mtime +60 -delete | ||
| + | </ | ||
| + | |||
| + | ==== Commandes utiles ==== | ||
| + | |||
| + | Compter les //pastes// : | ||
| + | <code bash> | ||
| + | find / | ||
| + | </ | ||
| + | |||
| + | Retrouver la date d’un //paste// avec la commande '' | ||
| + | <code bash> | ||
| + | date -d@1736291828 | ||
| + | </ | ||
| + | |||
| + | En retour : '' | ||
| + | |||
| + | Trouver les tâches Cron pour Paste : | ||
| + | <code bash> | ||
| + | rgrep paste /etc/cron* | ||
| + | </ | ||
| + | |||
| + | Surveillance de l' | ||
| + | |||
| + | Configuration en décommentant les différents formats souhaités : | ||
| + | <code bash> | ||
| + | vim / | ||
| + | </ | ||
| + | |||
| + | Utilisation : | ||
| + | <code bash> | ||
| + | cd / | ||
| + | tail -fn 20 paste.chapril.org-access.log | goaccess | ||
| + | </ | ||
| + | |||
| + | Utilisation alternative : | ||
| + | <code bash> | ||
| + | cd / | ||
| + | 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' | ||
| + | - Déployer cette //tarball// sur le serveur((On envoie la //tarball// par la commande '' | ||
| + | |||
| + | < | ||
| + | On doit aussi envoyer la nouvelle version à la forge April avec un étiquette contenant le mot '' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Si on est deux et à distance, pour travailler on peut partager un //screen// : le premier utilisateur se connecte en faisant '' | ||
| + | </ | ||
| + | |||
| + | ==== Générer le « livrable » en local ==== | ||
| + | |||
| + | < | ||
| + | Cette étape se déroule de préférence sur le poste de travail de l' | ||
| + | </ | ||
| + | |||
| + | === La première fois === | ||
| + | |||
| + | <code bash> | ||
| + | mkdir -p ~/ | ||
| + | cd ~/ | ||
| + | git clone https:// | ||
| + | git remote add upstream https:// | ||
| + | git fetch --all | ||
| + | </ | ||
| + | |||
| + | === Les fois suivantes === | ||
| + | |||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | git fetch --all | ||
| + | git pull --rebase | ||
| + | </ | ||
| + | |||
| + | Trouver l’étiquette de la version qui nous intéresse. | ||
| + | C’est probablement le dernier qui nous intéresse, donc on peut l' | ||
| + | <code bash> | ||
| + | git tag --sort=v: | ||
| + | </ | ||
| + | |||
| + | Le '' | ||
| + | On pourrait aussi mettre '' | ||
| + | Stockons le numéro de version qui nous intéresse dans une variable, ici la version '' | ||
| + | <code bash> | ||
| + | export VERSION=1.7.x | ||
| + | </ | ||
| + | |||
| + | Puis se mettre sur la branche '' | ||
| + | C'est alors qu'il faut résoudre les éventuels conflits. | ||
| + | |||
| + | < | ||
| + | TODO : décrire grossièrement la procédure de résolution des conflits ('' | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | 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. | ||
| + | |||
| + | <code bash> | ||
| + | git log --oneline -n 10 | ||
| + | </ | ||
| + | |||
| + | Maintenant on créé une étiquette (//tag//), puis une archive '' | ||
| + | <code bash> | ||
| + | git tag ${VERSION? | ||
| + | git archive --prefix=paste-${VERSION? | ||
| + | </ | ||
| + | |||
| + | On envoie la nouvelle version locale et l’étiquette vers la forge April avec la commande '' | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | === En cas d' | ||
| + | |||
| + | Si on a un message d' | ||
| + | < | ||
| + | ! [rejected] | ||
| + | erreur : impossible de pousser des références vers ' | ||
| + | </ | ||
| + | |||
| + | Il faut faire une tirage du dépôt distant vers le dépôt local : | ||
| + | <code bash> | ||
| + | git pull origin | ||
| + | </ | ||
| + | |||
| + | Tirage par fusion : | ||
| + | <code bash> | ||
| + | git config pull.rebase=false | ||
| + | </ | ||
| + | |||
| + | Éditer chaque fichier en conflit : | ||
| + | <code bash> | ||
| + | git status | ||
| + | </ | ||
| + | |||
| + | Écraser la dernière étiquette (//tag//) : | ||
| + | <code bash> | ||
| + | git tag -f $VERSION | ||
| + | </ | ||
| + | |||
| + | Pousser le dépôt local vers le dépôt distant : | ||
| + | <code bash> | ||
| + | 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 [[https:// | ||
| + | |||
| + | Stockons une fois de plus le numéro de version qui nous intéresse dans une variable, ici la version '' | ||
| + | x'' | ||
| + | <code bash> | ||
| + | export VERSION=1.7.x | ||
| + | </ | ||
| + | |||
| + | On extrait alors dans un dossier dédié, dans lequel on doit recopier le fichier '' | ||
| + | |||
| + | <code bash> | ||
| + | cd / | ||
| + | wget -O versions/ | ||
| + | https:// | ||
| + | sudo -u www-data tar \ | ||
| + | --one-top-level=versions/ | ||
| + | --strip-components=1 \ | ||
| + | -xavf versions/ | ||
| + | </ | ||
| + | |||
| + | Il faut remettre le lien symbolique vers le fichier de configuration ''/ | ||
| + | |||
| + | <code bash> | ||
| + | cd versions/ | ||
| + | ln -s / | ||
| + | </ | ||
| + | |||
| + | Une méthode alternative existe pour la récupération de la // | ||
| + | Dans le cas où la commande '' | ||
| + | <code bash> | ||
| + | scp paste-${VERSION? | ||
| + | </ | ||
| + | |||
| + | On peut maintenant faire la bascule, tout simplement en remplaçant le lien symbolique '' | ||
| + | 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 / | ||
| + | rm -f public_html ; ln -s versions/ | ||
| + | </ | ||
| + | |||
| + | On vérifie que l’application fonctionne toujours correctement en visitant [[https:// | ||
| + | |||
| + | Si besoin, on peut rapidement faire un retour arrière à la version précédente (version '' | ||
| + | <code bash> | ||
| + | rm -f public_html ; ln -s versions/ | ||
| + | </ | ||
