====== Affichage du statut des services avec Cachet ====== Doc officielle : https://docs.cachethq.io/docs/installing-cachet ===== Prérequis ===== * enregistrement DNS, * reverse proxy + TLS sur le bastion, * serveur httpd fonctionnel en local. ===== Installation des fichiers ===== # cd /var/www/ # git clone https://github.com/cachethq/Cachet.git status.chapril.org Clonage dans 'status.chapril.org'... # cd status.chapril.org On liste les versions disponibles : # git tag -l [...] v2.3.9 Et on prend la dernière stable : # git checkout v2.3.9 ===== Installation des dépendances ===== La doc officielle de Cachet fait passer par ''composer'' pour la résolution des dépendances. Et vu la liste du bouzin, c'est bienvenu. On l'installe donc : # apt install composer On installe aussi php-mbstring : # apt install php-mbstring Puis on lance le bouzin : # composer install --no-plugins --no-scripts --no-dev -o Les bibliothèques téléchargées vont dans le fichier ''vendor/'' J'ai jeté un oeil rapide aux 62 fichiers LICENSE ; elles sont casher. ===== Configuration et base de données ===== Pour la base de données : # mysql MariaDB [(none)]> CREATE USER 'cachet' IDENTIFIED BY 'secret';Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> CREATE DATABASE cachet; MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, CREATE, ALTER, INDEX, EXECUTE ON cachet.* TO 'cachet'; Ensuite la configuration du logiciel : APP_ENV=production APP_DEBUG=false APP_URL=https://status.chapril.org/ APP_KEY=secret DB_DRIVER=mysql DB_HOST=localhost DB_DATABASE=cachet DB_USERNAME=cachet DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync CACHET_EMOJI=false MAIL_DRIVER=sendmail MAIL_HOST=localhost MAIL_PORT=25 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ADDRESS=contact@chapril.org MAIL_NAME=Équipe Chapril MAIL_ENCRYPTION=tls On peut ensuite définir une clé secrète : php artisan key:generate Et initialiser la base de données : php artisan app:install Ne jamais modifier APP_KEY une fois en production. Tous les hashs et objets chiffrés seraient inopérants. ===== Configuration NginX ===== On place dans ''/etc/nginx/sites-available/'' : server { listen 80; access_log /var/log/nginx/status.chapril.org-access.log; error_log /var/log/nginx/status.chapril.org-error.log; server_name status.chapril.org; root /var/www/status.chapril.org/public; index index.php; location / { try_files $uri /index.php$is_args$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; fastcgi_keep_conn on; } } Puis on active le site : ln -sf /etc/nginx/sites-available/status.chapril.org /etc/nginx/sites-enabled/status.chapril.org Et on teste la conf NginX : nginx -t Avant de restarter : /etc/init.d/nginx reload Enfin il faut changer les permissions car on a tout fait ça en root : chown www-data:www-data /var/www/status.chapril.org Et enfin on se rend sur http://status.chapril.org pour finir la conf. ===== Dégooglisation de Cachet ===== Comme d'hab, les webdevs sont des fainéants qui ne rapatrient pas leurs assets, il va donc falloir le faire pour eux. ==== Rapatriement des fontes google ==== On a deux occurrences de fonts.googleapis.com dans resources/views/dashboard/partials/head.blade.php (template pour l'interface privée) et dans resources/views/layout/master.blade.php (template pour l'interface publique). On effectue la requête : root@admin:/var/www/cachet/Cachet# curl 'https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&subset=latin,latin-ext' @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 300; src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v14/DXI1ORHCpsQm3Vp6mXoaTdqQynqKV_9Plp7mupa0S4g.ttf) format('truetype'); } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 400; src: local('Open Sans Regular'), local('OpenSans-Regular'), url(https://fonts.gstatic.com/s/opensans/v14/u-WUoqrET9fUeobQW7jkRaCWcynf_cDxXwCLxiixG1c.ttf) format('truetype'); } @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 700; src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzNqQynqKV_9Plp7mupa0S4g.ttf) format('truetype'); } Puis on rapatrie les fontes : wget https://fonts.gstatic.com/s/opensans/v14/k3k702ZOKiLJc3WVjuplzNqQynqKV_9Plp7mupa0S4g.ttf https://fonts.gstatic.com/s/opensans/v14/u-WUoqrET9fUeobQW7jkRaCWcynf_cDxXwCLxiixG1c.ttf https://fonts.gstatic.com/s/opensans/v14/DXI1ORHCpsQm3Vp6mXoaTdqQynqKV_9Plp7mupa0S4g.ttf Reste à les héberger et à ajouter les css aux templates. mv *.ttf public/fonts Puis on remplace dans les deux templates le code par le code css qui va bieng : Enfin on efface les caches : rm -f storage/framework/views/*.php ==== Rapatriement du script Cloudflare ==== On constate l'étendue des dégats avec root@admin:/var/www/status.chapril.org# grep cdnjs * -R Et il faut rapatrier tout ça. Je ne parle même pas des trucs tiers du dossier ''vendors''. mkdir public/mycdn && cd public/mycdn wget https://cdnjs.cloudflare.com/ajax/libs/zxcvbn/2.0.2/zxcvbn.min.js https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.8.0/codemirror.css https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.8.0/codemirror.min.js https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.8.0/mode/twig/twig.min.js Puis éditer les différents fichiers listés sachant que le chemin d'accès est ''/mycdn/''. vi -p public/build/dist/js/all-b2c62d4294.js resources/views/dashboard/templates/edit.blade.php resources/views/dashboard/templates/add.blade.php resources/assets/js/password-strength.js Enfin on efface le cache : rm -f /var/www/status.chapril.org/storage/framework/views/*.php ==== Dégravatarisation ==== 1. Dans ''app/Models/User.php'', poutrer la définition de return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5($this->email), $size); par exemple remplacer par return '';. 2. Dans ''resources/views/dashboard/user/index.blade.php'', virer Dans ''resources/views/dashboard/partials/sidebar.blade.php'', virer Dans ''resources/views/dashboard/team/index.blade.php'', virer Et le remplacer par ce que vous voulez. Encore une fois on vire les caches : rm -f storage/framework/views/*.php ===== Ajout d'une adresse courriel pour les notifications ===== Les inscriptions aux notifications ont été désactivées volontaire suite à des inscriptions de type spam. Elle peut être activée temporairement quand une personne en fait la demande. ==== Réactivation temporaire via nginx ==== Pour réactiver temporairement l'inscription aux notifications, il faut aller sur la VM admin puis modifier le fichier /etc/nginx/sites-available/status.chapril.org pour mettre en commentaire les lignes suivantes : location /subscribe { return 403 ; } Puis reloader nginx : systemctl reload nginx Demander à la personne de s'abonner via https://status.chapril.org/subscribe et de confirmer son abonnement en utilisant le lien reçu par courriel. Ensuite, enlever les commentaires dans le fichier nginx de status.chapril.org et faire un reload de nginx. ==== Ajout d'une adresse via l'interface d'admin et MariaDb ==== Une autre possibilité à « Ajouter un abonné » via l'interface d'admin dans l'onglet « Abonnés ». La personne recevra un courriel avec un lien de confirmation. Mais le lien « Verify Your Subscription » sera en 403 Forbidden car l'url /subscribe est interdite via nginx, même chose si on clique sur Modifier dans l'interface d'admin. Pour corriger, il faut modifier dans la base de données : mysql cachet MariaDB [cachet]> select * from subscribers ; Récupérer les valeurs pour la personne (exemple : id = 83, created_at = 2021-12-06 10:11:37, le champ verified_at étant à NULL). Mettre à jour le champ verified_at (mettre la même valeur que created_at) : MariaDB [cachet]> update subscribers set verified_at = "2021-12-06 10:11:37" where id = 83 ; Query OK, 1 row affected (5.213 sec)