====== 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)