====== Service drop.chapril.org ====== ===== Introduction ===== Création de la VM avec la procédure [[admin:procedures:creation_machine_virtuelle|Création d'une machine virtuelle « bling »]]. ===== Préparation ===== Pour le stockage, nous utilisons un second disque. Il est ajouté à la VM via l'interface ''virt-manager''. Création de la partition de stockage : fdisk /dev/vdb Choisir ''n'' puis les choix par défaut. Création du //Volume Group// et //Logic Volume// : pvcreate /dev/vdb1 vgcreate drop-data-vg /dev/vdb1 lvcreate -L 49G -n data drop-data-vg Création du FS et du répertoire de montage : mke2fs -L drop -e remount-ro -m 0 /dev/mapper/drop--data--vg-data mkdir /var/drop/ Ajout dans ''/etc/fstab'' du point de montage : /dev/mapper/drop--data--vg-data /var/drop ext4 noexec,nosuid,nodev,errors=remount-ro 0 0 Essai de montage : mount /var/drop/ Ajout d'un dossier pour le stockage futur des fichiers : mkdir /var/drop/files chown -R app:app /var/drop/files Installation de NodeJS et NPM : apt install -y nodejs npm Ajout d'un utilisateur pour exécuter l'application : useradd -s /bin/false app ===== Installation ===== Récupération du code : mkdir /srv/drop/www chown -R app:app /srv/drop/ sudo -u app git clone https://github.com/mozilla/send.git /srv/drop/www cd /srv/drop/www/ sudo -u app git checkout v3.0.21 Récupération des dépendances et complication : sudo -u app npm install sudo -u app npm run build Création du service dans ''/etc/systemd/system/drop.service'' : [Unit] Description=drop After=network.target [Service] Type=simple User=app WorkingDirectory=/srv/drop ExecStart=npm run prod Restart=always [Install] WantedBy=multi-user.target Démarrage et activation du service : systemctl start drop.service systemctl enable drop.service ===== Personnalisation ===== À faire. ==== Favicon ==== Remplacement des fichiers suivants : assets/favicon-16x16.png assets/favicon-32x32.png public/favicon.ico Puis : sudo -u app npm run build systemctl restart drop ==== Titre de page ==== Remplacement dans le fichier ''server/stats.js'' : - title: 'Firefox Send', + title: 'DropChaprilOrg', Puis : sudo -u app npm run build systemctl restart drop ==== Fichier CSS Chapril ==== L'ajout du fichier CSS Chapril est fait via le Nginx sur la VM ''bastion'' : include /etc/nginx/chapril-banner-location; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_pass http://192.168.1.110:1443; subs_filter '' ''; sub_filter_once on; } ==== Bannière Chapril ==== FirefoxSend est pleinement du NodeJS. C'est à dire que les pages sont complètement générées par du Javascript. Ce code Javascript supprime supprime le code déjà existant, ce qui rend très difficile l'insertion de code de façon contrôlée. Suite à différents échecs, il a été décidé de modifier le code de FirefoxSend pour y mettre directement le code de la bannière. Ça se passe dans le fichier ''app/ui/header.js''. createElement() { - const title = - platform() === 'android' - ? html` - - - - - - - ` - : html` - - ${this.state.translate('title')} - - - - - `; return html`
- ${title} ${this.account.render()} + +
+
+ + + +
+
+
`; }
==== Pied de page ==== Ça se passe dans le fichier ''app/ui/footer.js''. - const translate = this.state.translate; - const browser = browserName(); - const feedbackUrl = `https://qsurvey.mozilla.com/s3/Firefox-Send-Product-Feedback?ver=${version}&browser=${browser}`; return html` `; } ==== Encart de promo ==== Ça se passe dans le fichier ''app/ui/promo.js''. class Promo extends Component { constructor(name, state) { @@ -15,24 +15,8 @@ class Promo extends Component { createElement() { return html` -
- Firefox - - ${this.state.translate('trailheadPromo')}${' '} - ${this.state.translate('learnMore')} - -
-
+ class="send-promo w-full flex-row items-center content-center justify-center bg-white text-grey-80 px-4 py-3 flex border-b border-grey-banner leading-normal dark:bg-grey-90 dark:text-grey-20 dark:border-grey-80" + > `; } } diff --git a/package-lock.json b/package-lock.json
Retirer le ''py-3'' dans la balise ''send-promo'' afin de supprimer l'espace au dessus de la bannière Chapril. ==== Texte d'accueil ==== Ça se passe dans le fichier ''public/locales/fr/send.ftl''. -introDescription = { -send-brand } vous permet de partager des fichiers chiffrés de bout en bout ainsi qu’un lien qui expire automatiquement. Ainsi, vous pouvez garder ce que vous partagez en privé et vous assurer que vos contenus ne restent pas en ligne pour toujours. +introDescription = DropChaprilOrg vous permet de partager des fichiers chiffrés de bout en bout ainsi qu’un lien qui expire automatiquement. Ainsi, vous pouvez garder ce que vous partagez en privé et vous assurer que vos contenus ne restent pas en ligne pour toujours. ===== Configuration ===== ==== Journaux ==== Les journaux du démon drop sont envoyés dans ''journald''. Ils contiennent quelques informations relatives au démarrage. Pour les consulter on utilise : journalctl -u drop Les journaux d'accès sont générés par Apache 2 qui fonctionne en tant que proxy inverse. Les journaux sont envoyés dans le dossier ''/var/log/apache2/drop.chapril.org/''. Logrotate est configuré pour créer un fichier de journaux par mois et ne conserver que 4 mois. La configuration se trouve dans ''/etc/logrotate.d/apache2/'' et est la suivante : /var/log/apache2/*.log /var/log/apache2/*/*.log { monthly missingok rotate 4 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if invoke-rc.d apache2 status > /dev/null 2>&1; then \ invoke-rc.d apache2 reload > /dev/null 2>&1; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript } ==== Cron ==== Comme indiqué dans le [[https://agir.april.org/issues/4405|ticket n°4405]], un bug fait que les fichiers expirés sont bien retirés de la base Redis mais pas du système de fichier local. En attendant une correction officielle, solution de contournement avec un fichier Cron : # Suppression des fichiers expirés (tous les jours à 00h30). 30 0 * * * root /usr/bin/find /var/drop/files/ -mtime +5 -delete >> /var/log/drop.chapril.org/dropchaprilorg_purge.log 2>&1 De plus, Redis doit être configuré de manière à transmettre des notifications en cas d'expiration des clés : --- a/redis/redis.conf +++ b/redis/redis.conf @@ -1063,7 +1063,7 @@ latency-monitor-threshold 0 # By default all notifications are disabled because most users don't need # this feature and the feature has some overhead. Note that if you don't # specify at least one of K or E, no events will be delivered. -notify-keyspace-events "" +notify-keyspace-events Ex Et le script ''/srv/drop.chapril.org/tools/cleaning/remove_expired_files.py'' est lancé en tant que //daemon// de la façon suivante : cp /srv/drop.chapril.org/tools/cleaning/drop-remove-expired-files.service /etc/systemd/system/drop-remove-expired-files.service systemctl enable drop-remove-expired-files.service systemctl start drop-remove-expired-files.service ===== Modération ===== Il n'y a pas d'interface d'administration graphique. En cas de demande de retrait de fichier, identifier l'identifiant du fichier dans l'URL. Par exemple, pour ''https://drop.chapril.org/download/c255369c68c0f7d7/#SR9oUMJrKQeVUdr0hqzwQQ'' l'identifiant est ''c255369c68c0f7d7''. Se connecter en SSH sur le serveur et supprimer le fichier de l'index : redis-cli DEL c255369c68c0f7d7 ===== Rapport d'activité mensuelle automatique ===== FIXME À faire. ===== Gestion des mises à jour ===== Le code de la version officielle ce trouve sur GitHub : https://github.com/mozilla/send/. Il est situé dans la branche ''master'', les versions sont des étiquettes (//tags//) sur cette même branche. Pour détecter les mises à jour, la supervision vérifie l'apparition d'une nouvelle étiquette sur GitHub (''/usr/lib/nagios/plugins/check_dropchaprilorg_update''). Pour chaque nouvelle version, nous créons une branche qui a comme nom le nom de l’étiquette préfixé par ''chapril-''. Par exemple pour l’étiquette ''vX.Y.Z'' notre branche est ''chapril-vX.Y.Z''. Ces branches permettent de garder les personnalisations pour Chapril. Sur le serveur, le dépôt Git est configuré pour utiliser deux dépôts distants : * ''mozilla'' : le dépôt GitHub officiel ; * ''origin'' : la forge de l'april. Mise à jour depuis le dépôt distant de Mozilla : cd /srv/drop.chapril.org/www/ git pull mozilla Mise à jour de la branche ''master'' : git checkout origin/master git merge mozilla/master git checkout -b master_updated git push origin master_updated:master Mettre à jour les étiquettes : git push --tags origin Créer une nouvelle branche et répéter nos modifications de personnalisation : git checkout -b chapril-v3.0.22 v3.0.22 git cherry-pick a00127f4a8^..9c4a8bfa26 # résoudre éventuels conflits git push origin chapril-v3.0.22 git checkout chapril-v3.0.22 Déployer la nouvelle version : git checkout chapril-v3.0.22 sudo -u app npm install sudo -u app npm run build systemctl restart drop