Comment créer une page de statut avec Cachet sous Debian 8

introduction

Cachet est une page d’état auto-hébergée qui remplace les services hébergés tels que StatusPage.io et Status. .io. Il vous aide à communiquer le temps de disponibilité et les temps d’arrêt de vos applications et à partager des informations sur les pannes.

Il est écrit en PHP, donc si vous avez déjà un serveur LAMP ou LEMP, il est facile à installer. Il a une interface épurée et est conçu pour être réactif afin de pouvoir fonctionner sur tous les appareils. Dans ce tutoriel, nous allons configurer une page d’état avec Cachet sur Debian. La pile logicielle que nous allons utiliser est la suivante:

  • * Cachet * pour la page d’état elle-même

  • * Compositeur * pour gérer les dépendances PHP de Cachet

  • * SQLite * comme base de données pour stocker les données de Cachet

  • * Nginx * pour servir la page de statut

Notez que Cachet ne surveille pas vos sites Web ni vos serveurs en ce qui concerne les temps d’arrêt. Cachet enregistre les incidents, qui peuvent être mis à jour manuellement via l’interface Web ou avec l’API de Cachet. Si vous recherchez des solutions de surveillance, consultez le tutoriel Construction pour la production: applications Web - Surveillance.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Étape 1 - Création de l’utilisateur Cachet

La première chose à faire est de créer un compte utilisateur distinct pour exécuter Cachet. Cela aura l’avantage supplémentaire de la sécurité et de l’isolement.

sudo useradd --create-home --shell /bin/bash cachet

Cette commande créera un utilisateur nommé * cachet * avec un répertoire personnel dans + / home / cachet +, dont le shell sera défini sur + / bin / bash +. La valeur par défaut est + / bin / sh +, mais elle ne fournit pas assez d’informations dans son invite. Ce sera un utilisateur sans mot de passe qui aura des privilèges exclusivement sur les composants que Cachet utilisera.

Maintenant que l’utilisateur est créé, installons les dépendances PHP.

Étape 2 - Installation des dépendances PHP

Ensuite, nous devons installer les dépendances de Cachet, qui comprennent un certain nombre de paquets PHP, ainsi que + wget + et '+ unzip + `, que Composer utilise pour télécharger et décompresser les bibliothèques PHP.

sudo apt-get install \
 php5-fpm php5-curl php5-apcu php5-readline \
 php5-mcrypt php5-apcu php5-cli php5-gd php5-sqlite\
 wget unzip

Vous pouvez en apprendre plus sur chaque paquet individuel depuis la liste officielle des extensions PHP.

Nous allons maintenant configurer + php-fpm +, le FastCGI Process Manager. Nginx l’utilisera pour adresser des requêtes à Cachet.

Commencez par créer le fichier qui hébergera les informations pour Cachet dont + php-fpm + a besoin. Ouvrez + / etc / php5 / fpm / pool.d / cachet.conf + avec + nano + ou votre éditeur favori.

sudo nano /etc/php5/fpm/pool.d/cachet.conf

Coller dans ce qui suit:

/etc/php5/fpm/pool.d/cachet.conf

[cachet]
user = cachet
group = cachet
listen.owner = www-data
listen.group = www-data
listen = /var/run/php5-fpm-cachet.sock
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
request_terminate_timeout = 120s
pm = ondemand
pm.max_children = 5
pm.process_idle_timeout = 10s
pm.max_requests = 500
chdir = /

Enregistrez et fermez le fichier.

Vous pouvez en savoir plus sur ces paramètres dans l’article sur https://www.digitalocean.com/community/tutorials/how-to-host-multiple-websites-securely-with-nginx-and-php-fpm-on-ubuntu -14-04 [Comment héberger plusieurs sites Web en toute sécurité avec Nginx et Php-fpm], mais voici à quoi chaque ligne de ce fichier est destinée:

  • + [cachet] + est le nom du pool. Chaque pool doit avoir un nom unique

  • + user et` + group` sont les utilisateurs Linux et le groupe sous lequel le nouveau pool sera exécuté. C’est la même chose que l’utilisateur que nous avons créé à l’étape 1.

  • + listen.owner + et + listen.group + définissent la propriété de l’écouteur, c.-à-d. le socket du nouveau pool + php-fpm +. Nginx doit pouvoir lire ce socket, nous utilisons donc theb * www-data * utilisateur et groupe.

  • + listen + spécifie un emplacement unique du fichier de socket pour chaque pool.

  • + php_admin_value + vous permet de définir des valeurs de configuration PHP personnalisées. Nous utilisons ici des fonctions qui peuvent exécuter des commandes Linux (+ exec, passthru, shell_exec, system +).

  • + php_admin_flag + est similaire à + ​​php_admin_value +, mais il ne s’agit que d’un commutateur pour les valeurs booléennes, c’est-à-dire + on et` + off`. Nous allons désactiver la fonction PHP + allow_url_fopen + qui permet à un script PHP d’ouvrir des fichiers distants et qui pourrait être utilisé par un attaquant.

  • L’option + pm + vous permet de configurer les performances du pool. Nous l’avons réglé sur + ondemand +, qui fournit un équilibre permettant de limiter l’utilisation de la mémoire et constitue un paramètre par défaut raisonnable. Si vous avez beaucoup de mémoire, vous pouvez le régler sur + statique +. Si vous avez beaucoup de threads à utiliser, alors + dynamic + pourrait être un meilleur choix.

  • L’option + chdir + devrait être + / +, qui est la racine du système de fichiers. Ceci ne devrait pas être changé à moins d’utiliser une autre option importante (+ chroot +).

Redémarrez + php-fpm + pour que les modifications prennent effet.

sudo systemctl restart php5-fpm

Si vous ne l’avez pas encore fait, activez le service + php-fpm + pour qu’il se lance automatiquement au redémarrage du serveur:

sudo systemctl enable php5-fpm

Maintenant que les paquets PHP généraux sont installés, téléchargez Cachet.

Étape 3 - Téléchargement du Cachet

Le code source de Cachet est hébergé sur GitHub. Cela facilite l’utilisation de Git pour le téléchargement, l’installation et - comme nous le verrons plus tard - le mettre à niveau.

Les quelques étapes suivantes doivent être suivies en tant qu’utilisateur * cachet *, alors passez à cela.

sudo su - cachet

Cloner le code source de Cachet dans un nouveau répertoire appelé + www +.

git clone https://github.com/cachethq/Cachet.git www

Ceci fait, naviguez dans le nouveau répertoire où réside le code source de Cachet.

cd www

À partir de ce moment, vous avez toute l’histoire du développement de Cachet, y compris les branches et les tags Git. Vous pouvez voir la dernière version stable à partir de la page Cachet, mais vous pouvez également afficher les balises Git dans ce répertoire.

Au moment de la publication, la dernière version stable de Cachet était la v2.3.11. Utilisez Git pour vérifier cette version:

git checkout v2.3.11

Ensuite, familiarisons-nous avec le fichier de configuration de Cachet.

Étape 4 - Configuration de Cachet

Cachet nécessite un fichier de configuration appelé + .env +, qui doit être présent pour que Cachet puisse démarrer. Vous pouvez y configurer les variables d’environnement utilisées par Cachet pour sa configuration.

Copions l’exemple de configuration fourni avec Cachet pour une sauvegarde.

cp .env.example .env

Nous allons ajouter ici deux éléments de configuration: l’un pour configurer la base de données et l’autre pour configurer un serveur de messagerie.

Pour la base de données, nous utiliserons SQLite. Il est facile à configurer et ne nécessite pas l’installation de composants de serveur supplémentaires.

Tout d’abord, créez le fichier vide qui hébergera notre base de données:

touch ./database/database.sqlite

Ensuite, ouvrez + .env + avec + nano + ou votre éditeur favori afin de configurer les paramètres de la base de données.

nano .env

Comme nous utiliserons SQLite, nous devrons supprimer beaucoup de paramètres. Localisez le bloc de paramètres commençant par + DB_ +:

Original .env

. . .
DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=cachet
DB_USERNAME=homestead
DB_PASSWORD=secret
DB_PORT=null
DB_PREFIX=null
. . .

Supprimez tout sauf la ligne + DB_DRIVER et changez-le de` + mysql` en + sqlite.

Mise à jour .env

. . .
DB_DRIVER=
. . .

Ensuite, vous devrez renseigner les détails de votre serveur SMTP pour les paramètres + MAIL _ * +:

env
. . .
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ADDRESS=
MAIL_NAME=
. . .

Où:

  • + MAIL_HOST + devrait être l’URL de votre serveur de messagerie.

  • + MAIL_PORT + devrait être le port sur lequel le serveur de messagerie écoute (généralement + 25 +).

  • + MAIL_USERNAME + devrait être le nom d’utilisateur pour la configuration du compte SMTP (généralement l’adresse électronique complète).

  • + MAIL_PASSWORD + devrait être le mot de passe pour la configuration du compte SMTP.

  • + MAIL_ADDRESS + devrait être l’adresse électronique à partir de laquelle les notifications aux abonnés seront envoyées.

  • + MAIL_NAME + est le nom qui apparaîtra dans les courriels envoyés aux abonnés. Notez que toutes les valeurs comportant des espaces doivent être placées entre guillemets doubles.

Pour en savoir plus sur les pilotes de messagerie de Cachet, consultez la page the code source mail.php et https://laravel.com/docs. /5.2/mail[la documentation mail correspondante de Laravel].

Une fois le fichier modifié, enregistrez et quittez. Ensuite, vous devez configurer la base de données de Cachet.

Étape 5 - Migration de la base de données

Les bibliothèques PHP dont dépend Cachet sont gérées par Composer. Tout d’abord, assurez-vous d’être dans le bon répertoire.

cd /home/cachet/www

Ensuite, exécutez Composer et installez les dépendances, en excluant celles utilisées à des fins de développement. Selon la vitesse de votre connexion Internet, cela peut prendre un moment.

composer install --no-interaction --no-dev -o --no-scripts

Créez le schéma de base de données et exécutez les migrations.

php artisan migrate

Tapez + yes + quand on vous le demande. Vous verrez la sortie comme ceci:

Output**************************************
*     Application In Production!     *
**************************************

Do you really wish to run this command? (yes/no) [no]:
>

Migration table created successfully.
Migrated: 2015_01_05_201324_CreateComponentGroupsTable
...
Migrated: 2016_06_02_075012_AlterTableMetricsAddOrderColumn
Migrated: 2016_06_05_091615_create_cache_table

La commande suivante, + php artisan app: install +, effectue une sauvegarde de la base de données, exécute les migrations et génère automatiquement la clé d’application (c’est-à-dire la valeur + APP_KEY + dans + .env +) que Cachet utilise pour tout son chiffrement.

Terminez l’installation.

php artisan app:install

La sortie ressemblera à ceci:

OutputClearing settings cache...
Settings cache cleared!
. . .
Clearing cache...
Application cache cleared!
Cache cleared!

Dernière étape proactive, supprimez le cache de Cachet pour éviter 500 erreurs.

rm -rf bootstrap/cache/*

Maintenant que la base de données est prête, nous pouvons configurer la file d’attente de Cachet.

Étape 6 - Configuration de la file d’attente des tâches

Cachet utilise une file d’attente pour planifier les tâches devant s’exécuter de manière asynchrone, telles que l’envoi d’e-mails. La méthode recommandée consiste à utiliser Supervisor, un gestionnaire de processus fournissant une interface cohérente permettant de surveiller et de contrôler les processus.

Tout d’abord, assurez-vous de vous déconnecter de la session de l’utilisateur * cachet * et de revenir à votre utilisateur sudo non root.

exit

Installer superviseur.

sudo apt-get install supervisor

Créez ensuite le fichier qui contiendra les informations nécessaires à Supervisor de Cachet. Ouvrez + / etc / supervisor / conf.d / cachet.conf +.

sudo nano /etc/supervisor/conf.d/cachet.conf

Ce fichier indique à Supervisor comment exécuter et gérer son processus. Pour en savoir plus sur Supervisor, consultez l’article Comment installer et gérer Superviseur sur VPS Ubuntu et Debian.

Et ajoutez le contenu suivant. Assurez-vous de mettre à jour le répertoire et le nom d’utilisateur de Cachet si vous avez utilisé des onces différentes.

/etc/supervisor/conf.d/cachet.conf

[program:cachet-queue]
command=php artisan queue:work --daemon --delay=1 --sleep=1 --tries=3
directory=
redirect_stderr=true
autostart=true
autorestart=true
user=

Enregistrez et fermez le fichier, puis redémarrez Supervisor.

sudo systemctl restart supervisor

Activez le service Supervisor pour qu’il se lance automatiquement au redémarrage du serveur.

sudo systemctl enable supervisor

La base de données et la file d’attente des tâches sont prêtes; Le composant suivant à configurer est le serveur Web.

Étape 7 - Configuration de Nginx

Nous utiliserons Nginx en tant que proxy de serveur Web qui communiquera avec + php-fpm +. La section des conditions préalables contient des tutoriels sur la configuration de Nginx avec un certificat TLS émis par Let’s Encrypt.

Ajoutons le fichier de configuration Nginx nécessaire pour Cachet. Ouvrez + / etc / nginx / sites-available / cachet.conf + avec + nano + ou avec votre éditeur favori.

sudo nano /etc/nginx/sites-available/cachet.conf

Ceci est le texte intégral du fichier, que vous devez copier et coller. Assurez-vous de remplacer + example.com + par votre nom de domaine. La fonction de chaque section est décrite plus en détail ci-dessous.

/etc/nginx/sites-available/cachet.conf

server {
   server_name  ;
   listen 80;
   return 301 https://$server_name$request_uri;
}

server {
   listen 443;
   server_name  ;

   root ;
   index index.php;

   ssl on;
   ## Location of the Let's Encrypt certificates
   ssl_certificate /etc/letsencrypt/live//fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live//privkey.pem;

   ## From https://cipherli.st/
   ## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
   ssl_ecdh_curve secp384r1;
   ssl_session_cache shared:SSL:10m;
   ssl_session_tickets off;
   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.8.8 8.8.4.4 valid=300s;
   resolver_timeout 5s;
   ## Disable preloading HSTS for now.  You can use the commented out header line that includes
   ## the "preload" directive if you understand the implications.
   #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
   add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
   add_header X-Frame-Options DENY;
   add_header X-Content-Type-Options nosniff;
   ssl_buffer_size 1400;

   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   location / {
       try_files $uri /index.php$is_args$args;
   }

   location ~ \.php$ {
       include fastcgi_params;
       fastcgi_pass unix:;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_index index.php;
       fastcgi_keep_conn on;
   }
}

Voici ce que fait chaque section de ce fichier.

Le premier bloc + serveur + redirige tout le trafic HTTP vers HTTPS:

Cachet.conf partiel

server {
   server_name ;
   listen 80;
   return 301 https://$server_name$request_uri;
}

. . .

Le deuxième bloc + serveur + contient des informations spécifiques sur cette configuration, telles que les détails SSL et la configuration + php-fpm +.

La directive + root + indique à Nginx où se trouve le répertoire racine de Cachet. C’est devrait pointer vers le répertoire + public et puisque nous avons cloné Cachet dans` + / home / cachet / www / + , il devient finalement + root / home / cachet / www / public; + `.

Cachet.conf partiel

. . .
server {
   listen 443;
   server_name  ;

   root ;
   index index.php;
   . . .
}

Les certificats SSL résident dans le répertoire Let’s Encrypt, qui doit être nommé d’après votre nom de domaine:

Cachet.conf partiel

. . .
server {
   . . .
   ssl on;
   ## Location of the Let's Encrypt certificates
   ssl_certificate /etc/letsencrypt/live//fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
   . . .
}

Le reste des options SSL provient directement de Nginx et Let’s Tutoriel de chiffrement:

Cachet.conf partiel

. . .
server {
   . . .
   ## From https://cipherli.st/
   ## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
   ssl_ecdh_curve secp384r1;
   ssl_session_cache shared:SSL:10m;
   ssl_session_tickets off;
   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.8.8 8.8.4.4 valid=300s;
   resolver_timeout 5s;
   ## Disable preloading HSTS for now.  You can use the commented out header line that includes
   ## the "preload" directive if you understand the implications.
   #add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
   add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
   add_header X-Frame-Options DENY;
   add_header X-Content-Type-Options nosniff;
   ssl_buffer_size 1400;

   ssl_dhparam /etc/ssl/certs/dhparam.pem;
   . . .
}

La section + location ~ \ .php $ + indique à Nginx comment gérer les fichiers PHP. La partie la plus importante est de pointer sur le fichier de socket Unix que nous avons utilisé lorsque nous avons créé + / etc / php5 / fpm / pool.d / cachet.conf +. Plus précisément, il s’agit de + / var / run / php5-fpm-cachet.sock +.

Cachet.conf partiel

. . .
server {
   . . .
   location / {
       try_files $uri /index.php$is_args$args;
   }

   location ~ \.php$ {
       include fastcgi_params;
       fastcgi_pass unix:;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_index index.php;
       fastcgi_keep_conn on;
   }
}

Enregistrez et fermez le fichier si vous ne l’avez pas déjà fait.

Maintenant que la configuration Cachet pour Nginx est créée, créez un lien symbolique vers le répertoire + sites-enabled +, car c’est ici que Nginx recherche et sélectionne les fichiers de configuration à utiliser:

sudo ln -s /etc/nginx/sites-available/cachet.conf /etc/nginx/sites-enabled/cachet.conf

Redémarrez Nginx pour que les modifications prennent effet.

sudo systemctl restart nginx

Et activez le service Nginx pour qu’il se lance automatiquement au redémarrage du serveur.

sudo systemctl enable nginx

C’est ça! Si vous naviguez maintenant vers le nom de domaine dans votre navigateur, vous verrez la page de configuration de Cachet. Passons à travers.

Étape 8 - Fin de la configuration initiale de Cachet

Le reste de la configuration de Cachet s’effectue via l’interface graphique de votre navigateur. Cela implique de définir le nom du site et le fuseau horaire, ainsi que de créer le compte administrateur. Il existe trois étapes (configuration de l’environnement, de la page d’état et du compte d’administrateur). Vous pouvez toujours modifier la configuration ultérieurement dans le tableau de bord des paramètres de Cachet.

Configuration de l’environnement

La première étape de configuration est la configuration de l’environnement.

Les champs doivent être remplis comme suit:

  • * Le pilote de cache * devrait être * ACP (u) *.

  • * Le pilote de session * devrait être * ACP (u) *.

  • * Le pilote de messagerie * doit être * SMTP *.

  • * Mail Host * devrait être votre adresse de serveur de messagerie.

  • * Mail From Address * doit être l’adresse électronique à partir de laquelle les notifications aux abonnés seront envoyées.

  • * Nom d’utilisateur de messagerie * doit être le nom d’utilisateur pour la configuration du compte SMTP (généralement votre adresse e-mail complète).

  • * Mail Password * devrait être le mot de passe pour la configuration du compte SMTP.

Cliquez sur * Suivant * pour passer à l’étape suivante.

Configuration de la page d’état

Dans cette section, vous configurez le nom du site, le domaine du site, le fuseau horaire et la langue.

Les champs doivent être remplis comme suit:

  • * Nom du site: * Le nom qui apparaîtra dans votre tableau de bord.

  • * Domaine du site: * Le nom de domaine complet que vous avez choisi pour Cachet.

  • * Sélectionnez votre fuseau horaire: * Choisissez un fuseau horaire en fonction de votre public. Un bon choix par défaut est de choisir UTC.

  • * Sélectionnez votre langue: * Choisissez la langue utilisée par l’interface de Cachet.

  • * Afficher le support pour Cachet: * Si vous sélectionnez cette option, un message * Powered by Cachet * apparaîtra au bas de la page de votre tableau de bord public.

Cliquez sur * Suivant * pour passer à l’étape suivante.

Configuration du compte administrateur

Enfin, configurez le compte administrateur. Choisissez votre nom d’utilisateur et entrez une adresse électronique valide et un mot de passe fort.

Cliquez sur * Complete Setup * pour enregistrer toutes les modifications.

Configuration complète

Sur la page Complete Setup, vous serez informé que Cachet a été configuré avec succès. Vous pouvez maintenant cliquer sur le bouton * Accéder au tableau de bord * pour vous connecter avec vos identifiants d’administrateur et visiter la page du tableau de bord de Cachet.

Cachet est maintenant entièrement configuré et fonctionnel. La dernière étape concerne la mise à niveau future de Cachet.

Étape 9 - Mise à niveau de Cachet

L’utilisation de Git facilite grandement la mise à niveau lorsqu’une nouvelle version de Cachet est disponible. Tout ce que vous avez à faire est de vérifier cette balise pertinente, puis d’exécuter les migrations de la base de données.

Commencez par basculer vers l’utilisateur * cachet * et accédez au répertoire d’installation de Cachet.

sudo su - cachet
cd /home/cachet/www

Vous pouvez éventuellement activer la page de maintenance.

php artisan down

Récupérez le dernier code Cachet auprès de GitHub.

git fetch --all

Et lister tous les tags.

git tag -l

Vous verrez toutes les balises actuelles commençant par la lettre + v +. Vous remarquerez peut-être que certains sont en version bêta ou en version Release Candidate (RC). Parce que c’est un serveur de production, vous pouvez les ignorer. Vous pouvez également visiter la page des communiqués de Cachet pour voir quelle est la dernière balise.

Lorsque vous trouvez la balise que vous souhaitez utiliser pour la mise à niveau, utilisez Git pour la vérifier. Par exemple, si vous deviez effectuer une mise à niveau vers la version 2.4.0, vous utiliseriez:

git checkout

Retirez le cache de Cachet avant de continuer.

rm -rf bootstrap/cache{,t}/*

Ensuite, mettez à niveau les dépendances Composer, qui contiennent généralement des correctifs de bogues, des améliorations de performances et de nouvelles fonctionnalités.

composer install --no-interaction --no-dev -o --no-scripts

Enfin, lancez les migrations.

php artisan app:update

Si vous avez activé la page de maintenance, vous pouvez maintenant réactiver l’accès.

php artisan up

La nouvelle version de Cachet sera opérationnelle.

Conclusion

Vous avez configuré Cachet avec SSL soutenu par SQLite et vous savez comment le maintenir avec Git. Vous pouvez choisir d’autres bases de données, comme MySQL ou PostgreSQL. Pour explorer plus d’options de Cachet, consultez la https://docs.cachethq.io/v1.0/docs/welcome&official la documentation officielle de Cachet].