Table des matières
Affichage du statut des services avec 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/
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 :
- /var/www/status.chapril.org/.env
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
Configuration NginX
On place dans /etc/nginx/sites-available/
:
- /etc/nginx/sites-available/status.chapril.org
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
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&subset={{ $font_subset }}" rel="stylesheet" type="text/css">
par le code css qui va bieng :
<style> @font-face { font-family: 'Open Sans'; font-style: normal; font-weight: 300; src: local('Open Sans Light'), local('OpenSans-Light'), url(/fonts/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(/fonts/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(/fonts/k3k702ZOKiLJc3WVjuplzNqQynqKV_9Plp7mupa0S4g.ttf) format('truetype'); } </style>
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
<a href="https://gravatar.com"><img src="{{ $current_user->gravatar }}" class="img-responsive img-thumbnail" title="{{ trans('forms.user.gravatar') }}" data-toggle="tooltip"></a>
Dans resources/views/dashboard/partials/sidebar.blade.php
, virer
<a href="{{ url('dashboard/user') }}"> <span class="avatar"><img src="{{ $current_user->gravatar }}"></span> </a>
Dans resources/views/dashboard/team/index.blade.php
, virer
<img src="{{ $member->gravatar }}">
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)