Outils pour utilisateurs

Outils du site


admin:machines_virtuelles:admin:cachet

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/

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 :

/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
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/ :

/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)
admin/machines_virtuelles/admin/cachet.txt · Dernière modification : 2021/12/06 11:00 de admin