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/
# mkdir cachet
# cd  cachet
# git clone https://github.com/cachethq/Cachet.git
Clonage dans 'Cachet'...
# cd Cachet

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/cachet/Cachet/.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/cachet/Cachet/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/cachet/Cachet

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/cachet/Cachet# 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/cachet/Cachet/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
admin/machines_virtuelles/admin/cachet.txt · Dernière modification: 2019/10/08 00:15 par cpm