One place for hosting & domains

      Comment installer et configurer Zabbix et configurer des serveurs à distance sur Ubuntu 20.04


      L’auteur a choisi le Computer History Museum comme bénéficiaire d’une donation dans le cadre du programme Write for Donations.

      Introduction

      Zabbix est un logiciel de surveillance open-source pour les réseaux et les applications. Il permet de surveiller en temps réel des milliers de métriques collectées à partir de serveurs, de machines virtuelles, de périphériques réseau et d’applications web. Ces métriques peuvent vous aider à déterminer la santé actuelle de votre infrastructure informatique et à détecter les problèmes liés aux composants matériels ou logiciels avant que les clients ne se plaignent. Les informations utiles sont stockées dans une base de données afin que vous puissiez analyser les données au fil du temps et améliorer la qualité des services fournis ou planifier la mise à niveau de votre équipement.

      Zabbix utilise plusieurs options pour rassembler des métriques, notamment la surveillance sans agent des services aux utilisateurs et l’architecture client-serveur. Pour collecter les métriques du serveur, il utilise un petit agent sur le client surveillé pour rassembler les données et les envoyer au serveur Zabbix. Zabbix prend en charge la communication cryptée entre le serveur et les clients connectés, de sorte que vos données sont protégées lorsqu’elles circulent sur des réseaux non sécurisés.

      Le serveur Zabbix stocke ses données dans une base de données relationnelle alimentée par MySQL ou PostgreSQL. Vous pouvez également stocker des données historiques dans des bases de données NoSQL comme Elasticsearch et TimescaleDB. Zabbix fournit une interface web qui vous permet de visualiser les données et de configurer les paramètres du système.

      Dans ce tutoriel, vous allez configurer Zabbix sur deux machines Ubuntu 20.04. L’un sera configuré comme le serveur Zabbix, et l’autre comme un client que vous surveillerez. Le serveur Zabbix utilisera une base de données MySQL pour enregistrer les données de surveillance et utilisera Nginx pour servir l’interface web.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de :

      • Deux serveurs Ubuntu 20.04 configurés en suivant le Guide de configuration initiale du serveur pour Ubuntu 20.04, comprenant un non root user avec des privilèges sudo et un pare-feu configuré avec ufw. Sur un serveur, vous installerez Zabbix ; ce tutoriel fera référence à ce dernier comme étant le serveur Zabbix. Il surveillera votre second serveur ; ce second serveur sera appelé le second serveur Ubuntu.

      • Le serveur qui fera fonctionner le serveur Zabbix nécessite l’installation de Nginx, MySQL et PHP. Suivez les étapes 1 à 3 de notre guide LAMP Stack Ubuntu 20.04 pour les configurer sur votre serveur Zabbix.

      • Un nom de domaine enregistré. Tout au long de ce tutoriel, nous utiliserons your_domain. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement avec Freenom, ou utiliser le bureau d’enregistrement de domaine de votre choix.

      • Les deux enregistrements DNS suivants ont été configurés pour votre serveur Zabbix. Si vous utilisez DigitalOcean, veuillez consulter notre documentation DNS pour plus de détails sur la façon de les ajouter.

        • Un enregistrement A avec your_domain pointant sur l’adresse IP publique de votre serveur Zabbix.
        • Un enregistrement A avec www.your_domain​​​​​​ pointant sur l’adresse IP publique de votre serveur Zabbix.

      En outre, comme le serveur Zabbix est utilisé pour accéder à des informations précieuses sur votre infrastructure auxquelles vous ne voudriez pas que des utilisateurs non autorisés accèdent, il est important que vous gardiez votre serveur sécurisé en installant un certificat TLS/SSL. Ceci est facultatif mais fortement encouragé. Si vous souhaitez sécuriser votre serveur, suivez les instructions du guide Let’s Encrypt sur Ubuntu 20.04 après l’étape 3 de ce tutoriel.

      Étape 1 – Installer le serveur Zabbix

      Tout d’abord, vous devez installer Zabbix sur le serveur sur lequel vous avez installé MySQL, Nginx et PHP. Connectez-vous à cette machine en tant que non-root user :

      • ssh sammy@zabbix_server_ip_address

      Zabbix est disponible dans le gestionnaire de packages d’Ubuntu, mais il est dépassé. Utilisez donc le dépôt officiel de Zabbix pour installer la dernière version stable. Téléchargez et installez le paquet de configuration du dépôt :

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      Vous verrez le résultat suivant :

      Output

      Selecting previously unselected package zabbix-release. (Reading database ... 64058 files and directories currently installed.) Preparing to unpack zabbix-release_5.0-1+focal_all.deb ... Unpacking zabbix-release (1:5.0-1+focal) ... Setting up zabbix-release (1:5.0-1+focal) ...

      Mettez à jour l’index des packages afin que le nouveau dépôt soit inclus :

      Ensuite, installez le serveur Zabbix et le frontend web avec le support de la base de données MySQL :

      • sudo apt install zabbix-server-mysql zabbix-frontend-php

      Installez également l’agent Zabbix, qui vous permettra de recueillir des données sur l’état du serveur Zabbix lui-même.

      • sudo apt install zabbix-agent

      Avant de pouvoir utiliser Zabbix, vous devez créer une base de données contenant les données que le serveur Zabbix collectera auprès de ses agents. Vous pouvez le faire lors de la prochaine étape.

      Étape 2 – Configurer la base de données MySQL pour Zabbix

      Vous devez créer une nouvelle base de données MySQL et la remplir avec quelques informations de base afin de la rendre compatible avec Zabbix. Vous créerez également un utilisateur spécifique pour cette base de données afin que Zabbix ne se connecte pas à MySQL avec le compte root.

      Connectez-vous à MySQL en tant que root user :

      Créez la base de données Zabbix avec le support des caractères UTF-8 :

      • create database zabbix character set utf8 collate utf8_bin;

      Créez ensuite un utilisateur que le serveur Zabbix utilisera, donnez-lui accès à la nouvelle base de données et définissez le mot de passe de l’utilisateur :

      • create user zabbix@localhost identified by 'your_zabbix_mysql_password';
      • grant all privileges on zabbix.* to zabbix@localhost;

      Cela prend soin de l’utilisateur et de la base de données. Sortez de la console de la base de données.

      Ensuite, vous devez importer le schéma et les données initiales. L’installation de Zabbix vous a fourni un fichier qui permet de configurer cela.

      Exécutez la commande suivante pour configurer le schéma et importer les données dans la base de données zabbix. Utilisez zcat car les données dans le fichier sont compressées :

      • zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

      Entrez le mot de passe pour l’utilisateur MySQL zabbix que vous avez configuré lorsque vous y avez été invité.

      L’exécution de cette commande peut prendre une minute ou deux. Si vous voyez l’erreur ERROR 1045 (28000): Access denied for userzabbix@ 'localhost' (using password: YES) alors assurez-vous que vous avez utilisé le bon mot de passe pour l’utilisateur zabbix.

      Pour que le serveur Zabbix puisse utiliser cette base de données, vous devez définir le mot de passe de la base de données dans le fichier de configuration du serveur Zabbix. Ouvrez le fichier de configuration dans votre éditeur de texte préféré. Ce tutoriel utilisera nano :

      • sudo nano /etc/zabbix/zabbix_server.conf

      Cherchez la section suivante du dossier :

      /etc/zabbix/zabbix_server.conf

      ...
      ### Option: DBPassword                           
      #       Database password. Ignored for SQLite.   
      #       Comment this line if no password is used.
      #                                                
      # Mandatory: no                                  
      # Default:                                       
      # DBPassword=
      ...
      

      Ces commentaires dans le dossier expliquent comment se connecter à la base de données. Vous devez définir la valeur du DBPassword dans le fichier au mot de passe de l’utilisateur de votre base de données.   Ajoutez cette ligne après ces commentaires pour configurer la base de données :

      /etc/zabbix/zabbix_server.conf

      ...
      DBPassword=your_zabbix_mysql_password
      ...
      

      Enregistrez et fermez zabbix_server.conf en appuyant sur CTRL+X, puis sur Y et enfin sur ENTER si vous utilisez nano.

      Vous avez maintenant configuré le serveur Zabbix pour vous connecter à la base de données. Ensuite, vous configurerez le serveur web Nginx pour servir le frontend Zabbix.

      Étape 3 – Configurer Nginx pour Zabbix

      Pour configurer Nginx automatiquement, installez le paquet de configuration automatique :

      • sudo apt install zabbix-nginx-conf

      Vous obtiendrez ainsi le fichier de configuration/etc/zabbix/nginx.conf, ainsi qu’un lien vers celui-ci dans le répertoire de configuration de Nginx /etc/nginx/conf.d/zabbix.conf.

      Ensuite, vous devez apporter des modifications à ce dossier. Ouvrez le fichier de configuration :

      • sudo nano /etc/zabbix/nginx.conf

      Le fichier contient une configuration de bloc serveur Nginx générée automatiquement. Il contient deux lignes qui déterminent le nom du serveur et le port sur lequel il écoute :

      /etc/zabbix/nginx.conf

      server {
      #        listen          80;
      #        server_name     example.com;
      ...
      

      Décommentez les deux lignes, et remplacez example.com par votre nom de domaine. Vos paramètres ressembleront à ceci :

      /etc/zabbix/nginx.conf

      server {
              listen          80;
              server_name     your_domain;
      ...
      

      Enregistrez et fermez le fichier. Ensuite, procédez à un test pour vous assurer qu’il n’y a aucune erreur de syntaxe dans aucun de vos fichiers Nginx et relancez la configuration :

      • sudo nginx -t
      • sudo nginx -s reload

      Maintenant que Nginx est configuré pour servir le frontend de Zabbix, vous allez apporter quelques modifications à votre configuration PHP afin que l’interface web de Zabbix fonctionne correctement.

      Note : Comme mentionné dans la section « Prérequis », il est recommandé d’activer SSL/TLS sur votre serveur. Si vous souhaitez le faire, suivez notre tutoriel Ubuntu 20.04 Let’s Encrypt avant de passer à l’étape 4 afin d’obtenir un certificat SSL gratuit pour Nginx. Ce processus détectera automatiquement le blocage de votre serveur Zabbix et le configurera pour le HTTPS. Après avoir obtenu vos certificats SSL/TLS, vous pouvez revenir et compléter ce tutoriel.

      Étape 4 – Configurer PHP pour Zabbix

      L’interface web de Zabbix est écrite en PHP et nécessite quelques réglages spéciaux du serveur PHP. Le processus d’installation de Zabbix a créé un fichier de configuration PHP-FPM qui contient ces paramètres. Il se trouve dans le répertoire /etc/zabbix et est chargé automatiquement par PHP-FPM. Vous devez apporter une petite modification à ce dossier, alors ouvrez-le avec ce qui suit :

      • sudo nano /etc/zabbix/php-fpm.conf

      Le fichier contient les paramètres PHP qui répondent aux exigences nécessaires pour l’interface web Zabbix. Toutefois, le réglage du fuseau horaire est commenté par défaut. Pour être sûr que Zabbix utilise la bonne heure, vous devez définir le fuseau horaire approprié :

      /etc/zabbix/php-fpm.conf

      ...
      php_value[max_execution_time] = 300
      php_value[memory_limit] = 128M
      php_value[post_max_size] = 16M
      php_value[upload_max_filesize] = 2M
      php_value[max_input_time] = 300
      php_value[max_input_vars] = 10000
      ; php_value[date.timezone] = Europe/Riga
      

      Décommentez la ligne de fuseau horaire mise en évidence dans le bloc de code précédent et changez-la pour votre fuseau horaire. Vous pouvez utiliser cette liste de fuseaux horaires pris en charge pour trouver celui qui vous correspond. Maintenant, enregistrez et fermez le fichier.

      Redémarrez PHP-FPM pour appliquer ces nouveaux paramètres :

      • sudo systemctl restart php7.4-fpm.service

      Vous pouvez maintenant démarrer le serveur Zabbix :

      • sudo systemctl start zabbix-server

      Ensuite, vérifiez si le serveur Zabbix fonctionne correctement :

      • sudo systemctl status zabbix-server

      Vous verrez le résultat suivant :

      Output

      ● zabbix-server.service - Zabbix Server Loaded: loaded (/lib/systemd/system/zabbix-server.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 05:59:32 UTC; 36s ago Process: 27026 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS) ...

      Enfin, permettez au serveur de démarrer au moment du démarrage :

      • sudo systemctl enable zabbix-server

      Le serveur est configuré et connecté à la base de données. Ensuite, mettez en place le frontend web.

      Étape 5 – Configurer les paramètres de l’interface web Zabbix

      L’interface web vous permet de voir les rapports et d’ajouter des hôtes que vous souhaitez surveiller, mais elle nécessite une configuration initiale avant de pouvoir être utilisée. Lancez votre navigateur et allez à l’adresse http://zabbix_server_name ou https://zabbix_server_name si vous avez configuré Let’s Encrypt. Sur le premier écran, vous verrez un message de bienvenue. Cliquez sur Next step pour continuer.

      Sur l’écran suivant, vous verrez le tableau qui énumère toutes les conditions préalables à l’exécution de Zabbix.

      Conditions préalables

      Toutes les valeurs de ce tableau doivent être correctes, vérifiez donc qu’elles le sont. N’oubliez pas de faire défiler vers le bas et d’examiner toutes les conditions préalables. Une fois que vous avez vérifié que tout est prêt, cliquez sur Next step pour continuer.

      L’écran suivant demande des informations sur la connexion à la base de données.

      Connexion à la BD

      Vous avez parlé de votre base de données au serveur Zabbix, mais l’interface web Zabbix a également besoin d’un accès à la base de données pour gérer les hôtes et lire les données. Saisissez donc les identifiants MySQL que vous avez configurés à l’étape 2. Cliquez sur Next step pour continuer.

      Sur l’écran suivant, vous pouvez laisser les options à leurs valeurs par défaut.

      Détails du serveur Zabbix

      Le Name est facultatif ; il est utilisé dans l’interface web pour distinguer un serveur d’un autre dans le cas où vous avez plusieurs serveurs de surveillance. Cliquez sur Next step pour continuer.

      L’écran suivant affichera le résumé de pré-installation afin que vous puissiez confirmer que tout est correct.

      Résumé

      Cliquez sur Next step pour passer à l’écran final.

      La configuration de l’interface web est maintenant terminée. Ce processus crée le fichier de configuration /usr/share/zabbix/conf/zabbix.conf.php, que vous pouvez sauvegarder et utiliser à l’avenir. Cliquez sur Finish pour passer à l’écran de connexion.   L’utilisateur par défaut est Admin et le mot de passe est zabbix.

      Avant de vous connecter, installez l’agent Zabbix sur votre deuxième serveur Ubuntu.

      Étape 6 – Installer et configurer l’agent Zabbix

      Vous devez maintenant configurer le logiciel d’agent qui enverra les données de surveillance au serveur Zabbix.

      Connectez-vous au deuxième serveur Ubuntu :

      • ssh sammy@second_ubuntu_server_ip_address

      Tout comme sur le serveur Zabbix, exécutez les commandes suivantes pour installer le package de configuration du dépôt :

      • wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
      • sudo dpkg -i zabbix-release_5.0-1+focal_all.deb

      Ensuite, mettez à jour l’index des packages :

      Installez ensuite l’agent Zabbix :

      • sudo apt install zabbix-agent

      Bien que Zabbix supporte le cryptage par certificat, la mise en place d’une autorité de certification dépasse le cadre de ce tutoriel. Mais vous pouvez utiliser des clés pré-partagées (PSK) pour sécuriser la connexion entre le serveur et l’agent.

      D’abord, générez une PSK :

      • sudo sh -c "openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk"

      Montrez la clé en utilisant le chat pour que vous puissiez la copier quelque part :

      • cat /etc/zabbix/zabbix_agentd.psk

      La clé ressemblera à quelque chose comme ça :

      Output

      75ad6cb5e17d244ac8c00c96a1b074d0550b8e7b15d0ab3cde60cd79af280fca

      Gardez-la pour plus tard ; vous en aurez besoin pour configurer l’hôte.

      Maintenant, modifiez les paramètres de l’agent Zabbix pour établir sa connexion sécurisée au serveur Zabbix. Ouvrez le fichier de configuration de l’agent dans votre éditeur de texte :

      • sudo nano /etc/zabbix/zabbix_agentd.conf

      Chaque paramètre de ce dossier est documenté par des commentaires informatifs tout au long du dossier, mais vous ne devez modifier que certains d’entre eux.

      Vous devez d’abord modifier l’adresse IP du serveur Zabbix. Trouvez la section suivante :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: Server
      #       List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
      #       Incoming connections will be accepted only from the hosts listed here.
      #       If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
      #       and '::/0' will allow any IPv4 or IPv6 address.
      #       '0.0.0.0/0' can be used to allow any IPv4 address.
      #       Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
      #
      # Mandatory: yes, if StartAgents is not explicitly set to 0
      # Default:
      # Server=
      
      Server=127.0.0.1
      ...
      

      Changez la valeur par défaut pour l’IP de votre serveur Zabbix :

      /etc/zabbix/zabbix_agentd.conf

      ...
      Server=zabbix_server_ip_address
      ...
      

      Par défaut, le serveur Zabbix se connecte à l’agent. Mais pour certains contrôles (par exemple, la surveillance des journaux), une connexion inverse est nécessaire. Pour un fonctionnement correct, vous devez spécifier l’adresse du serveur Zabbix et un nom d’hôte unique.

      Trouvez la section qui configure les contrôles actifs et modifiez les valeurs par défaut :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ##### Active checks related
      
      ### Option: ServerActive
      #       List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
      #       If port is not specified, default port is used.
      #       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
      #       If port is not specified, square brackets for IPv6 addresses are optional.
      #       If this parameter is not specified, active checks are disabled.
      #       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
      #
      # Mandatory: no
      # Default:
      # ServerActive=
      
      ServerActive=zabbix_server_ip_address
      
      ### Option: Hostname
      #       Unique, case sensitive hostname.
      #       Required for active checks and must match hostname as configured on the server.
      #       Value is acquired from HostnameItem if undefined.
      #
      # Mandatory: no
      # Default:
      # Hostname=
      
      Hostname=Second Ubuntu Server
      ...
      

      Ensuite, trouvez la section qui configure la connexion sécurisée au serveur Zabbix et activez le support des clés pré-partagées. Trouvez la section TLSConnect, qui ressemble à ceci :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSConnect
      #       How the agent should connect to server or proxy. Used for active checks.
      #       Only one value can be specified:
      #               unencrypted - connect without encryption
      #               psk         - connect using TLS and a pre-shared key
      #               cert        - connect using TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSConnect=unencrypted
      ...
      

      Ajoutez ensuite cette ligne pour configurer le support des clés pré-partagées :

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSConnect=psk
      ...
      

      Ensuite, localisez la section TLSAccept, qui ressemble à ceci :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSAccept
      #       What incoming connections to accept.
      #       Multiple values can be specified, separated by comma:
      #               unencrypted - accept connections without encryption
      #               psk         - accept connections secured with TLS and a pre-shared key
      #               cert        - accept connections secured with TLS and a certificate
      #
      # Mandatory: yes, if TLS certificate or PSK parameters are defined (even for 'unencrypted' connection)
      # Default:
      # TLSAccept=unencrypted
      ...
      

      Configurez les connexions entrantes pour prendre en charge les clés pré-partagées en ajoutant cette ligne :

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSAccept=psk
      ...
      

      Ensuite, trouvez la section TLSPSKIdentity, qui ressemble à ceci :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKIdentity
      #       Unique, case sensitive string used to identify the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKIdentity=
      ...
      

      Choisissez un nom unique pour identifier votre clé pré-partagée en ajoutant cette ligne :

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKIdentity=PSK 001
      ...
      

      Vous l’utiliserez comme identifiant PSK lorsque vous ajouterez votre hôte via l’interface web Zabbix.

      Définissez ensuite l’option qui pointe vers votre clé pré-partagée créée précédemment. Repérez l’option TLSPSKFile :

      /etc/zabbix/zabbix_agentd.conf

      ...
      ### Option: TLSPSKFile
      #       Full pathname of a file containing the pre-shared key.
      #
      # Mandatory: no
      # Default:
      # TLSPSKFile=
      ...
      

      Ajoutez cette ligne pour pointer l’agent Zabbix vers votre fichier PSK que vous avez créé :

      /etc/zabbix/zabbix_agentd.conf

      ...
      TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
      ...
      

      Enregistrez et fermez le fichier. Vous pouvez maintenant redémarrer l’agent Zabbix et le configurer pour qu’il démarre au moment du démarrage :

      • sudo systemctl restart zabbix-agent
      • sudo systemctl enable zabbix-agent

      Pour faire bonne mesure, vérifiez que l’agent Zabbix fonctionne correctement :

      • sudo systemctl status zabbix-agent

      Vous verrez le statut suivant, indiquant que l’agent est en cours d’exécution :

      Output

      ● zabbix-agent.service - Zabbix Agent Loaded: loaded (/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-12 08:19:54 UTC; 25s ago ...

      L’agent écoutera au port 10050 pour les connexions à partir du serveur. Configurez l’UFW pour permettre les connexions à ce port :

      Pour en savoir plus sur UFW, consultez le tutoriel Comment configurer un pare-feu avec UFW sur Ubuntu 20.04.

      Votre agent est maintenant prêt à envoyer des données au serveur Zabbix. Mais pour l’utiliser, vous devez y accéder à partir de la console web du serveur. Dans l’étape suivante, vous allez compléter la configuration.

      Étape 7 – Ajouter le nouvel hôte au serveur Zabbix

      L’installation d’un agent sur un serveur que vous souhaitez surveiller ne représente que la moitié du processus. Chaque hôte que vous souhaitez surveiller doit être enregistré sur le serveur Zabbix, ce que vous pouvez faire via l’interface web.

      Connectez-vous à l’interface web du serveur Zabbix en naviguant à l’adresse http://zabbix_server_name ou https://zabbix_server_name :

      L'écran de connexion Zabbix

      Lorsque vous vous êtes connecté, cliquez sur Configuration et ensuite sur Hosts dans la barre de navigation de gauche. Cliquez ensuite sur le bouton Create host dans le coin supérieur droit de l’écran. Cela ouvrira la page de configuration de l’hôte.

      Créer un hôte

      Ajustez le Host name et l’adresse IP pour refléter le nom d’hôte et l’adresse IP de votre second serveur Ubuntu, puis ajoutez l’hôte à un groupe. Vous pouvez sélectionner un groupe existant, par exemple des serveurs Linux ou créer votre propre groupe. L’hôte peut faire partie de plusieurs groupes. Pour ce faire, entrez le nom d’un groupe existant ou nouveau dans le champ de saisie Groups et sélectionnez la valeur souhaitée dans la liste proposée.

      Avant d’ajouter le groupe, cliquez sur l’onglet Templates.

      Ajout d'un modèle à l'hôte

      Tapez Template OS Linux by Zabbix agent dans le champ Search, puis sélectionnez-le dans la liste pour ajouter ce modèle à l’hôte.

      Ensuite, naviguez jusqu’à l’onglet Encryption. Sélectionnez PSK pour les connexions vers l’hôte et les connexions depuis l’hôte. Définissez ensuite l’identité PSK à PSK 001, qui est la valeur de la TLSPSKIdentity de l’agent Zabbix que vous avez configuré précédemment. Définissez ensuite la valeur PSK à la clé que vous avez générée pour l’agent Zabbix. C’est celle qui est stockée dans le fichier /etc/zabbix/zabbix_agentd.psk sur la machine de l’agent. 

      Configurer le cryptage

      Enfin, cliquez sur le bouton Add au bas du formulaire pour créer l’hôte.

      Vous verrez votre nouvel hôte dans la liste. Attendez une minute et rechargez la page pour voir les étiquettes vertes indiquant que tout fonctionne bien et que la connexion est cryptée.

      Zabbix montre votre nouvel hôte

      Si vous avez des serveurs supplémentaires à surveiller, connectez-vous à chaque hôte, installez l’agent Zabbix, générez un PSK, configurez l’agent et ajoutez l’hôte à l’interface web en suivant les mêmes étapes que celles que vous avez suivies pour ajouter votre premier hôte.

      Le serveur Zabbix surveille maintenant votre deuxième serveur Ubuntu. Maintenant, configurez des notifications par courrier électronique pour être informé des problèmes.

      Étape 8 – Configurer les notifications par courrier électronique

      Zabbix supporte automatiquement plusieurs types de notifications : courriel, OTRS, Slack, Télégramme, SMS, etc. Vous pouvez voir la liste complète des intégrations sur le site de Zabbix. 

      À titre d’exemple, ce tutoriel permettra de configurer les notifications pour le Type de support de courrier électronique.

      Cliquez sur Administration, puis sur Media types dans la barre de navigation de gauche. Vous verrez la liste de tous les types de médias. Il existe deux options préconfigurées pour les courriels : pour la notification en texte clair et pour les notifications en HTML. Dans ce tutoriel, vous utiliserez la notification en texte clair. Cliquez sur Email. 

      Ajustez les options SMTP en fonction des paramètres fournis par votre service de courrier électronique. Ce tutoriel utilise les capacités SMTP de Gmail pour configurer les notifications par e-mail. Si vous souhaitez obtenir plus d’informations sur la configuration, voir Comment utiliser le serveur SMTP de Google. 

      Note : Si vous utilisez la vérification en 2 étapes avec Gmail, vous devez générer un mot de passe d’application pour Zabbix. Vous n’aurez à saisir un mot de passe d’application qu’une seule fois lors de l’installation. Vous trouverez des instructions sur la manière de générer ce mot de passe dans le Centre d’aide Google.

      Si vous utilisez Gmail, tapez smtp.gmail.com pour le champ du serveur SMTP, 465 pour le champ du port du serveur SMTP, gmail.com pour SMTP helo, et votre courriel pour le SMTP email. Choisissez ensuite SSL/TLS pour la Connection security et Username and password pour Authentification. Entrez votre adresse Gmail comme Username et le mot de passe de l’application que vous avez généré à partir de votre compte Google comme mot de passe.

      Mise en place du type de support de courrier électronique

      Sous l’onglet Message templates, vous pouvez voir la liste des messages prédéfinis pour les différents types de notifications. Enfin, cliquez sur le bouton Update au bas du formulaire pour mettre à jour les paramètres du courrier électronique.

      Vous pouvez maintenant tester l’envoi de notifications. Pour ce faire, cliquez sur le lien Test souligné dans la ligne correspondante.

      Vous verrez une fenêtre pop-up. Saisissez votre adresse électronique dans le champ de saisie Send to et cliquez sur le bouton Test . Vous verrez un message sur l’envoi réussi et vous recevrez un message test.

      Tester le courrier électronique

      Fermez la fenêtre pop-up en cliquant sur le bouton Cancel.

      Maintenant, créez un nouvel utilisateur. Cliquez sur Administration et ensuite sur Users dans la barre de navigation de gauche. Vous verrez la liste des utilisateurs. Cliquez ensuite sur le bouton Create user dans le coin supérieur droit de l’écran. Cela ouvrira la page de configuration de l’utilisateur :

      Créer un utilisateur

      Entrez le nouveau nom d’utilisateur dans le champ de saisie Alias et créez un nouveau mot de passe. Ensuite, ajoutez l’utilisateur au groupe de l’administrateur. Tapez Zabbix administrators dans le champ Groups et sélectionnez-le dans la liste proposée.

      Une fois que vous avez ajouté le groupe, cliquez sur l’onglet Media et cliquez sur le lien souligné Add (et non le bouton Add en dessous). Vous verrez une fenêtre pop-up.

      Ajouter un courriel

      Sélectionnez l’option Email du menu déroulant Type. Saisissez votre adresse électronique dans le champ Send to. Vous pouvez laisser les autres options aux valeurs par défaut. Cliquez sur le bouton Add en bas pour soumettre. 

      Naviguez maintenant vers l’onglet Permissions. Sélectionnez Zabbix Super Admin dans le menu déroulant User type. 

      Enfin, cliquez sur le bouton Add au bas du formulaire pour créer l’utilisateur.

      Note : Utiliser le mot de passe par défaut n’est pas sûr. Afin de modifier le mot de passe de l’utilisateur intégré Admin, cliquez sur l’alias dans la liste des utilisateurs. Cliquez ensuite sur Change password, entrez un nouveau mot de passe et confirmez les changements en cliquant sur le bouton Update.

      Vous devez maintenant activer les notifications. Cliquez sur l’onglet Configuration, puis sur Actions dans la barre de navigation de gauche.  Vous verrez une action pré-configurée, qui est responsable de l’envoi des notifications à tous les administrateurs de Zabbix. Vous pouvez revoir et modifier les paramètres en cliquant sur son nom. Pour les besoins de ce tutoriel, utilisez les paramètres par défaut. Pour activer l’action, cliquez sur le lien en rouge Disabled dans la colonne Status.

      Vous êtes maintenant prêt à recevoir des alertes. Dans l’étape suivante, vous en générerez un pour tester votre configuration de notification.

      Étape 9 – Génération d’une alerte de test

      Au cours de cette étape, vous générerez une alerte de test pour vous assurer que tout est connecté. Par défaut, Zabbix garde une trace de l’espace disque disponible sur votre serveur. Il détecte automatiquement tous les supports de disque et ajoute les contrôles correspondants. Cette découverte est exécutée toutes les heures, vous devez donc attendre un certain temps pour que la notification soit déclenchée.

      Créez un fichier temporaire suffisamment important pour déclencher l’alerte d’utilisation du système de fichiers de Zabbix. Pour ce faire, connectez-vous à votre deuxième serveur Ubuntu si vous n’êtes pas déjà connecté :

      • ssh sammy@second_ubuntu_server_ip_address

      Ensuite, déterminez l’espace libre dont vous disposez sur le serveur. Vous pouvez utiliser la commande df pour le savoir :

      La commande df indiquera l’utilisation de l’espace disque de votre système de fichiers, et le -h rendra la sortie lisible à l’oeil humain. Vous verrez une sortie comme celle-ci :

      Output

      Filesystem Size Used Avail Use% Mounted on /dev/vda1 78G 1.4G 77G 2% /

      Dans ce cas, l’espace libre est de 77G. Votre espace libre peut être différent.

      Utilisez la commande fallocate, qui vous permet de pré-allouer ou de désallouer de l’espace à un fichier, pour créer un fichier qui occupe plus de 80 % de l’espace disque disponible. Cela sera suffisant pour déclencher l’alerte :

      • fallocate -l 70G /tmp/temp.img

      Après environ une heure, Zabbix déclenchera une alerte concernant la quantité d’espace disque disponible et exécutera l’action que vous avez configurée, en envoyant le message de notification. Vous pouvez vérifier dans votre boîte de réception si le message provient du serveur Zabbix. Vous verrez un message du type :

      Problem started at 09:49:08 on 2020.06.12
      Problem name: /: Disk space is low (used > 80%)
      Host: Second Ubuntu Server
      Severity: Warning
      Operational data: Space used: 71.34 GB of 77.36 GB (92.23 %)
      Original problem ID: 106
      

      Vous pouvez également accéder à l’onglet monitoring et ensuite au Dashboard pour voir la notification et ses détails. 

      Tableau de bord principal

      Maintenant que vous savez que les alertes fonctionnent, supprimez le fichier temporaire que vous avez créé afin de récupérer votre espace disque :

      Au bout d’une minute, Zabbix enverra le message de récupération et l’alerte disparaîtra du tableau de bord principal.

      Conclusion

      Dans ce tutoriel, vous avez appris à mettre en place une solution de surveillance simple et sécurisée qui vous aidera à surveiller l’état de vos serveurs. Il peut désormais vous avertir des problèmes, et vous avez la possibilité d’analyser les processus qui se produisent dans votre infrastructure informatique.

      Pour en savoir plus sur la mise en place d’une infrastructure de surveillance, consultez notre page thématique sur la surveillance.



      Source link

      Überwachen des Serverzustands mit Checkmk unter Ubuntu 18.04


      Der Autor hat den Open Internet/Free Speech Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

      Einführung

      Als Systemadministrator ist es eine bewährte Vorgehensweise, den aktuellen Zustand Ihrer Infrastruktur und Diensten zu kennen. Im Idealfall möchten Sie ausfallende Festplatten oder Anwendungsausfälle möglichst vor den Benutzern erkennen. Überwachungs-Tools wie Checkmk helfen Administratoren, diese Probleme zu erkennen und für einwandfreien Serverbetrieb zu sorgen.

      Im Allgemeinen kann Überwachungssoftware die Hardware, die Betriebszeit und den Servicestatus Ihrer Server verfolgen und Warnmeldungen ausgeben, wenn ein Fehler auftritt. In einem sehr einfachen Szenario würden Sie von einem Überwachungssystem alarmiert, wenn Dienste ausfallen. In einem robusteren Szenario würden Sie kurz nach dem Auftreten verdächtiger Anzeichen benachrichtigt werden, z. B. bei erhöhter Speichernutzung oder einer ungewöhnlichen Anzahl von TCP-Verbindungen.

      Es gibt verschiedene kostenlose und kommerzielle Überwachungslösungen mit unterschiedlichen Komplexitätsgraden und Funktionalitäten. Häufig ist die Installation, Konfiguration und Verwaltung dieser Tools kompliziert und zeitaufwändig.

      Checkmk ist jedoch eine robuste und installationsfreundliche Überwachungslösung. Als in sich geschlossenes Softwarepaket kombiniert es Nagios (populärer Open-Source-Alarmierungsdienst) mit Add-Ons zur Erfassung, Überwachung und grafischen Darstellung von Daten. Außerdem ist eine Weboberfläche von Checkmk mit dabei: ein umfassendes Tool, das viele der von Nagios bekannten Mängel ausgleicht. Es bietet ein benutzerfreundliches Dashboard, ein voll funktionsfähiges Benachrichtigungssystem und ein Repository mit einfach zu installierenden Überwachungsagenten für viele Linux-Distributionen. Ohne die Checkmk Weboberfläche müssten wir für verschiedene Aufgaben verschiedene Ansichten verwenden. All diese Funktionen zu konfigurieren, wäre ohne umfangreiche Dateiänderungen nicht möglich.

      In diesem Leitfaden richten wir Checkmk auf einem Ubuntu 18.04 Server ein und überwachen zwei separate Hosts. Wir überwachen sowohl den Ubuntu-Server selbst als auch einen separaten CentOS 7-Server. Das gleiche Prinzip lässt sich anwenden, um eine beliebige Anzahl weiterer Hosts zu einer Überwachungskonfiguration hinzuzufügen.

      Voraussetzungen

      • Ein Ubuntu 18.04-Server mit einem regulären non-root user mit sudo-Berechtigungen. In diesem Tutorial zur Server-Ersteinrichtung erfahren Sie, wie Sie den Server richtig vorbereiten.
      • Ein CentoOS7 Server mit einem regulären non-root user mit sudo-Berechtigungen. In diesem Tutorial zur Server-Ersteinrichtung erfahren Sie, wie Sie den Server richtig vorbereiten.

      Schritt 1 — Installieren von Checkmk unter Ubuntu

      Um unsere Überwachungsseite nutzen zu können, müssen wir zunächst Checkmk auf dem Ubuntu-Server installieren. Dadurch erhalten wir alle benötigten Tools. Checkmk liefert offizielle, sofort einsatzbereite Ubuntu-Paketdateien zur Installation des Softwarepakets.

      Für die neueste Version der Repository-Listen aktualisieren wir als erstes die Paketeliste:

      Auf der Paketelistenseite können die Pakete durchsucht werden. Im Seitenmenü kann unter anderem Ubuntu 18.04 ausgewählt werden.

      Laden Sie jetzt das Paket herunter:

      • wget https://checkmk.com/support/1.6.0p8/check-mk-raw-1.6.0p8_0.bionic_amd64.deb

      Installieren Sie dann das neu heruntergeladene Paket:

      • sudo apt install -y ./check-mk-raw-1.6.0p8_0.bionic_amd64.deb

      Dieser Befehl installiert das Checkmk-Paket mit allen erforderlichen Abhängigkeiten, u. a. auch den Apache-Webserver, der für den Webzugriff auf die Überwachungsoberfläche verwendet wird.

      Nach Abschluss der Installation können wir auf den Befehl omd zugreifen. Versuchen Sie es:

      Der Befehl omd gibt Folgendes aus:

      Output

      Usage (called as root): omd help Show general help . . . General Options: -V <version> set specific version, useful in combination with update/create omd COMMAND -h, --help show available options of COMMAND

      Der Befehl omd kann alle Checkmk Instanzen auf unserem Server verwalten. Er kann alle Überwachungsdienste auf einmal starten und anhalten. Außerdem nutzen wir ihn zur Erstellung unserer Checkmk Instanz. Zuerst müssen wir allerdings die Firewall-Einstellungen aktualisieren, um den externen Zugriff auf Standard-Web-Ports zu ermöglichen.

      Schritt 2 — Anpassen der Firewall-Einstellungen

      Bevor wir mit Checkmk arbeiten können, muss der externe Zugriff auf den Webserver in der Firewall-Konfiguration erlaubt werden. Wenn Sie die einzelnen Schritte zur Konfiguration der Firewall in den Voraussetzungen befolgt haben, haben Sie eine UFW-Firewalleinrichtung, die den Serverzugriff einschränkt.

      Während der Installation registriert sich Apache bei UFW, damit der Apache-Zugriff ganz einfach über die Firewall aktiviert und deaktiviert werden kann.

      Verwenden Sie den folgenden Befehl, um den Zugriff auf Apache zu ermöglichen:

      Überprüfen Sie die Änderungen:

      Sie sehen, dass Apache unter den erlaubten Diensten genannt ist:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      Das ermöglicht uns den Zugriff auf die Checkmk Weboberfläche.

      Im nächsten Schritt erstellen wir die erste Checkmk Überwachungsinstanz.

      Schritt 3 — Erstellen einer Checkmk Überwachungsinstanz

      Checkmk nutzt das Prinzip von Instanzen oder einzelnen Installationen, um verschiedene Checkmk-Kopien auf einem Server zu isolieren. In den meisten Fällen genügt eine Kopie von Checkmk, und so werden wir die Software auch in diesem Leitfaden konfigurieren.

      Zuerst müssen wir unserer neuen Instanz einen Namen geben. Wir verwenden in dem gesamten Text monitoring. Geben Sie Folgendes ein, um die Instanz zu erstellen:

      • sudo omd create monitoring

      Das Tool omd richtet alles automatisch für uns ein. Die Befehlsausgabe sieht etwa wie folgt aus:

      Output

      Adding /opt/omd/sites/monitoring/tmp to /etc/fstab. Creating temporary filesystem /omd/sites/monitoring/tmp...OK Restarting Apache...OK Created new site monitoring with version 1.6.0p8.cre. The site can be started with omd start monitoring. The default web UI is available at http://your_ubuntu_server/monitoring/ The admin user for the web applications is cmkadmin with password: your-default-password (It can be changed with 'htpasswd -m ~/etc/htpasswd cmkadmin' as site user.) Please do a su - monitoring for administration of this site.

      In dieser Ausgabe sind URL-Adresse, Standard-Benutzername und Passwort für den Zugriff auf unsere Überwachungsoberfläche hervorgehoben. Die Instanz ist jetzt erstellt, muss aber noch gestartet werden. Geben Sie Folgendes ein, um die Instanz zu starten:

      • sudo omd start monitoring

      Jetzt werden alle erforderlichen Tools und Dienste sofort gestartet. Am Ende sehen wir eine Ausgabe, die bestätigt, dass alle unsere Dienste erfolgreich gestartet wurden:

      Output

      Starting mkeventd...OK Starting rrdcached...OK Starting npcd...OK Starting nagios...OK Starting apache...OK Initializing Crontab...OK

      Die Instanz wird ausgeführt.

      Öffnen Sie http://your_ubuntu_server_ip/monitoring/ im Webbrowser, um auf die Checkmk-Instanz zuzugreifen. Sie werden zur Eingabe eines Passworts aufgefordert. Verwenden Sie die auf dem Bildschirm voreingestellten Standardanmeldeinformationen. Wir werden diese später ändern.

      Der Checkmk-Bildschirm öffnet sich mit einem Dashboard, auf dem der Status aller unserer Dienste und Server aufgelistet ist. Es bietet zudem praktische Diagramme, die der Erde ähneln. Direkt nach der Installation sind diese leer. Wir werden uns aber in Kürze den Status unserer Dienste und Systeme anzeigen lassen.

      Leeres Checkmk Dashboard

      Im nächsten Schritt ändern wir das Standard-Passwort, um die Seite über diese Oberfläche zu sichern.

      Schritt 4 — Ändern des Administratorpassworts

      Während der Installation generiert Checkmk ein Zufallspasswort für den administrativen Benutzer cmkadmin. Das Passwort ist meist kurz und nicht sicher und sollte nach der Installation geändert werden. Wir können es über die Weboberfläche ändern.

      Öffnen Sie zuerst die Seite Users im Menü WATO – Configuration links. Die Liste zeigt alle Benutzer, die derzeit Zugriff auf die Seite Checkmk haben. Bei einer neuen Installation sind es nur zwei Benutzer. Der erste, automation, ist für die Verwendung mit Automatisierungstools vorgesehen. Der zweite ist der Benutzer cmkadmin, mit dem wir uns auf der Seite anmelden.

      Liste der Checkmk-Benutzer

      Klicken Sie auf das Stift-Symbol neben dem cmkadmin-Benutzer, um die Benutzerangaben, einschließlich des Passworts zu ändern.

      Bearbeitungsformular für administrative Checkmk-Benutzer

      Aktualisieren Sie das Passwort, fügen Sie eine Administrator-E-Mailadresse ein und nehmen Sie alle weiteren gewünschten Änderungen vor.

      Nach Speichern der Änderungen werden wir aufgefordert, uns erneut mit den neuen Zugangsdaten anzumelden. Tun Sie das und kehren Sie dann zum Dashboard zurück, auf dem wir noch etwas ausführen müssen, um unsere neue Konfiguration vollständig anwenden zu können.

      Öffnen Sie erneut die Seite Users im Menü WATO – Configuration links. Die orange Schaltfläche oben links mit der Bezeichnung 1 Change zeigt uns an, dass wir einige Änderungen an der Konfiguration von Checkmk vorgenommen haben, die wir noch speichern und aktivieren müssen. Das geschieht jedes Mal, wenn wir die Konfiguration des Überwachungssystems ändern, nicht nur nach der Bearbeitung der Anmeldedaten eines Benutzers. Um ausstehende Änderungen zu speichern und zu aktivieren, müssen wir auf diese Schaltfläche klicken und zustimmen, die aufgeführten Änderungen mit der Option Activate affected auf dem folgenden Bildschirm zu aktivieren.

      Liste der Checkmk-Benutzer nach Änderungen Ansicht Aktivieren der Konfigurationsänderungen bestätigenErfolgreich aktivierte Konfigurationsänderungen

      Nachdem die Änderungen aktiviert sind, werden die Daten des neuen Benutzers in die Konfigurationsdateien geschrieben und von allen Systemkomponenten verwendet. Checkmk benachrichtigt automatisch die einzelnen Komponenten des Überwachungssystems, lädt sie bei Bedarf neu und verwaltet alle notwendigen Konfigurationsdateien.

      Die Checkmk Installation ist jetzt einsatzbereit. Im nächsten Schritt fügen wir unserem Überwachungssystem den ersten Host hinzu.

      Schritt 5 — Überwachen des ersten Hosts

      Wir sind jetzt bereit, den ersten Host zu überwachen. Hierzu installieren wir zunächst check-mk-agent auf dem Ubuntu-Server. Dann beschränken wir den Zugriff auf die Überwachungsdaten mit xinetd.

      Die mit Checkmk installierten Komponenten sind für Empfang, Speicherung und Darstellung von Überwachungsdaten verantwortlich. Sie liefern die Daten nicht selbst.

      Um die eigentlichen Daten zu sammeln, verwenden wir den Checkmk Agent. Der Checkmk Agent, der speziell für diese Aufgabe entwickelt wurde, ist in der Lage, alle wichtigen Systemkomponenten auf einmal zu überwachen und diese Informationen an die Checkmk-Instanz zurückzumelden.

      Installieren des Agenten

      Der erste Host, der überwacht wird, ist your_ubuntu_server, also der Server, auf dem wir die Checkmk-Instanz installiert haben. 

      Zunächst müssen wir den Checkmk Agent installieren. Pakete für alle wichtigen Distributionen, wie z. B. Ubuntu, sind direkt auf der Weboberfläche verfügbar. Öffnen Sie die Seite Monitoring Agents im Menü WATO – Configuration links. Sie sehen die verfügbaren Agent-Downloads mit den beliebtesten Paketen unter dem ersten Abschnitt Packaged agents.

      Liste der verfügbaren Überwachungsagenten-Pakete

      Das Paket check-mk-agent_1.6.0p8-1_all.deb ist geeignet für Debian-basierte Distributionen, einschließlich Ubuntu. Kopieren Sie den Download-Link für dieses Paket aus dem Webbrowser und laden Sie das Paket unter dieser Adresse herunter.

      • wget http://your_ubuntu_server_ip/monitoring/check_mk/agents/check-mk-agent_1.6.0p8-1_all.deb

      Installieren Sie das Paket nach dem Herunterladen:

      • apt install -y ./check-mk-agent_1.6.0p8-1_all.deb

      Überprüfen Sie, ob der Agent erfolgreich installiert wurde:

      Der Befehl gibt einen sehr langen Text aus, der unverständlich wirkt, aber alle wichtigen Informationen über das System kombiniert.

      Output

      <<<check_mk>>> Version: 1.6.0p8 AgentOS: linux . . . ["monitoring"] <<<job>>> <<<local>>>

      Checkmk nutzt die Ausgabe dieses Befehls, um die Statusdaten der überwachten Hosts zu sammeln. Mit xinetd beschränken wir den Zugriff auf die Überwachungsdaten.

      Zugriffsbeschränkungen auf Überwachungsdaten mit xinetd

      Standardmäßig werden die Daten von check_mk_agent mit Hilfe von xinetd bereitgestellt, einem Mechanismus, der Daten beim Zugriff auf einen bestimmten Netzwerk-Port ausgibt. Das bedeutet, dass wir auf check_mk_agent mit Hilfe von telnet auf Port 6556 (Standard-Port für Checkmk) von jedem Computer im Internet zugreifen können, sofern die Firewall-Konfiguration dies nicht untersagt.

      Wichtige Informationen über Server sollten aus Sicherheitsgründen nicht im Internet veröffentlicht werden. Wir sollten nur Hosts, die Checkmk ausführen und von uns überwacht werden, den Datenzugriff erlauben, damit nur unser Überwachungssystem diese sammeln kann.

      Wenn Sie dem Tutorial zur Server-Ersteinrichtung gefolgt sind, darunter den Schritten zur Einrichtung einer Firewall, ist der Zugriff auf den Checkmk Agent standardmäßig blockiert. Es ist jedoch empfehlenswert, diese Zugriffsbeschränkungen direkt in der Dienstkonfiguration vorzunehmen und sich bei deren Überwachung nicht allein auf die Firewall zu verlassen.

      Um den Zugriff auf die Agentendaten zu beschränken, müssen wir die Konfigurationsdatei unter /etc/xinetd.d/check_mk bearbeiten. Öffnen Sie die Konfigurationsdatei in einem beliebigen Editor. Um Nano zu verwenden, geben Sie Folgendes ein:

      • sudo nano /etc/xinetd.d/check_mk

      Suchen Sie nach diesem Abschnitt:

      /etc/xinetd.d/check_mk

      . . .
      # configure the IP address(es) of your Nagios server here:
      #only_from      = 127.0.0.1 10.0.20.1 10.0.20.2
      . . .
      

      Die Einstellung only_from schränkt den Zugang auf bestimmte IP-Adressen ein. Da wir nun daran arbeiten, den gleichen Server zu überwachen, auf dem Checkmk ausgeführt wird, ist es in Ordnung, nur localhost das Verbinden zu erlauben. Entfernen Sie den Kommentar und aktualisieren Sie die Konfigurationseinstellung in:

      /etc/xinetd.d/check_mk

      . . .
      # configure the IP address(es) of your Nagios server here:
      only_from      = 127.0.0.1
      . . .
      

      Speichern und schließen Sie die Datei.

      Der xinetd Daemon muss neu gestartet werden, damit die Änderungen übernommen werden. Tun Sie das jetzt:

      • sudo systemctl restart xinetd

      Der Agent wird nun ausgeführt und ist darauf beschränkt, nur lokale Verbindungen zu akzeptieren. Wir können jetzt die Überwachung für diesen Host mit Hilfe von Checkmk konfigurieren.

      Konfigurieren des Host auf der Checkmk Weboberfläche

      Um einen neuen zu überwachenden Host hinzuzufügen, gehen wir in das Menü Hosts im Menü WATO – Configuration links. Hier klicken Sie auf Create new host. Wir werden nach einigen Informationen über den Host gefragt.

      Erstellen eines neuen Hosts in Checkmk

      Der Hostname ist der bekannte Name, den Checkmk für die Überwachung verwenden wird. Es kann sich um einen vollwertigen Domänennamen handeln, muss aber nicht. In diesem Beispiel nennen wir den Host monitoring, genau wie der Name der Checkmk-Instanz selbst. Da monitoring auf unsere IP-Adresse nicht aufgelöst werden kann, müssen wir auch die IP-Adresse unseres Servers angeben. Und da der lokale Host überwacht wird, lautet die IP einfach 127.0.0.1. Markieren Sie das Feld IPv4 Address, um die manuelle IP-Eingabe zu aktivieren und geben Sie den Wert in das Textfeld ein.

      Die Standardkonfiguration des Abschnitts Data Sources benötigt Checkmk Agent, um die Überwachungsdaten bereitzustellen. Die Einstellung Segment Networking wird verwendet, um Hosts in Remote-Netzwerken zu kennzeichnen, die eine höhere erwartete Latenz haben, was keine Fehlfunktion darstellt. Da es sich um einen lokalen Host handelt, ist die Standardeinstellung auch hier in Ordnung.

      Um den Host zu speichern und zu konfigurieren, welche Dienste überwacht werden, klicken Sie auf die Schaltfläche Save & go to services.

      Liste der verfügbaren Dienste zur Überwachung

      Checkmk führt eine automatische Bestandsaufnahme durch. Das bedeutet, dass es die Ausgabe des Agenten sammelt und entschlüsselt, um festzustellen, welche Arten von Diensten überwacht werden können. Alle verfügbaren Dienste zur Überwachung finden sich in der Liste, einschließlich der CPU-Speichernutzung und des freien Festplattenspeicherplatzes.

      Um die Überwachung aller ermittelten Dienste zu aktivieren, müssen wir unter dem Abschnitt Undecided services (currently not monitored) auf die Schaltfläche Monitor klicken. Dadurch wird die Seite aktualisiert, aber alle Dienste werden im Abschnitt Monitored services aufgelistet. Das zeigt uns, dass sie tatsächlich überwacht werden.

      So wie bei der Änderung unseres Benutzerpassworts müssen diese neuen Änderungen gespeichert und aktiviert werden, bevor sie live gehen. Betätigen Sie die Schaltfläche 2 changes und nehmen Sie die Änderungen über die Schaltfläche Activate affected an. Danach wird die Host-Überwachung ausgeführt.

      Sie können nun mit den Serverdaten arbeiten. Sehen Sie sich das Haupt-Dashboard über den Menüpunkt Overview/Main Overview links an.

      Arbeiten mit Überwachungsdaten

      Sehen wir uns das Haupt-Dashboard über den Menüpunkt Overview/Main Overview links an:

      Überwachungs-Dashboard mit allen fehlerfreien Diensten

      Die Erdkugel ist komplett grün und die Tabelle zeigt an, dass ein Host problemlos funktioniert. Wir können (über das Menü links) die vollständige Host-Liste in der Ansicht Hosts/All hosts sehen, die jetzt einen einzelnen Host enthält.

      Liste der Hosts mit allen fehlerfreien Diensten

      Dort sehen wir, wie viele Dienste fehlerfrei funktionieren (grün dargestellt), wie viele gestört sind und wie viele noch zu überprüfen sind. Nachdem wir auf den Hostnamen geklickt haben, sehen wir die Liste aller Dienste mit ihrem vollständigen Status und ihren Perf-O-Meters. Perf-O-Meter zeigt die Leistung eines einzelnen Dienstes im Verhältnis zu dem, was Checkmk als guten Zustand betrachtet.

      Details eines Host-Dienstestatus

      Alle Dienste, die diagrammfähige Daten liefern, zeigen ein Diagrammsymbol neben ihrem Namen. Über dieses Symbol lassen sich die mit dem Dienst verknüpften Diagramme öffnen. Da die Host-Überwachung noch neu ist, zeigen die Diagramme noch fast nichts. Nach einiger Zeit liefern sie jedoch wertvolle Informationen darüber, wie sich unsere Dienstleistung verändert.

      Diagramme zur Darstellung der CPU-Last auf dem Server

      Wenn einer der Dienste ausfällt oder wiederhergestellt wird, wird diese Information im Dashboard angezeigt. Ausgefallene Dienste werden mit einer roten Fehleranzeige gekennzeichnet und sind auch im Erddiagramm sichtbar.

      Dashboard mit einem Host mit Problemen

      Nach erfolgreicher Wiederherstellung wechselt die Anzeige auf Grün für ordnungsgemäßen Betrieb. Das Ereignisprotokoll rechts zeigt jedoch alle vergangenen Störungen an.

      Dashboard mit einem Host, der nach den Problemen wiederhergestellt wurde

      Nachdem wir uns das Dashboard jetzt etwas genauer angesehen haben, fügen wir einen zweiten Host zu unserer Überwachungsinstanz hinzu.

      Schritt 6 — Überwachung eines zweiten CentOS Hosts

      Überwachung ist vor allem für mehrere Hosts sehr nützlich. Wir fügen zu unserer Checkmk-Instanz einen zweiten Server hinzu. Dieser läuft unter CentOS 7.

      Wie bei unserem Ubuntu-Server ist die Installation von Checkmk Agent erforderlich, um Überwachungsdaten auf CentOS zu sammeln. Dieses Mal benötigen wir jedoch ein rpm Paket von der Seite Monitoring Agents auf der Weboberfläche, das so genannte check-mk-agent-1.6.0p8-1.noarch.rpm.

      Zuerst müssen wir jedoch xinetd installieren, das standardmäßig nicht auf der CentOS Installation verfügbar ist. Wir erinnern uns: Xinetd ist ein Daemon, der dafür verantwortlich ist, die von check_mk_agent bereitgestellten Überwachungsdaten über das Netzwerk verfügbar zu machen.

      Auf Ihrem CentOS-Server installieren Sie zuerst xinetd:

      • sudo yum install -y xinetd

      Jetzt können wir das für unseren CentOS-Server benötigte Überwachungsagenten-Paket herunterladen und installieren:

      • sudo yum install -y http://your_ubuntu_server_ip/monitoring/check_mk/agents/check-mk-agent-1.6.0p8-1.noarch.rpm

      Wie zuvor können wir überprüfen, ob der Agent richtig funktioniert, indem wir check_mk_agent ausführen:

      Die Ausgabe ist ähnlich wie die vom Ubuntu-Server. Jetzt beschränken wir den Zugriff auf den Agenten.

      Zugriff einschränken

      Dieses Mal überwachen wir keinen lokalen Host. Deshalb muss xinetd Verbindungen vom Ubuntu-Server erlauben, auf dem Checkmk installiert ist, um Daten zu sammeln. Um das zu erlauben, öffnen Sie zunächst Ihre Konfigurationsdatei:

      • sudo vi /etc/xinetd.d/check_mk

      Hier sehen Sie die Konfiguration für Ihren check_mk Dienst, die spezifiziert, wie auf Checkmk Agent über den xinetd Daemon zugegriffen werden kann. Suchen Sie nach den folgenden zwei kommentierten Zeilen:

      /etc/xinetd.d/check_mk

      . . .
      # configure the IP address(es) of your Nagios server here:
      #only_from      = 127.0.0.1 10.0.20.1 10.0.20.2
      . . .
      

      Entfernen Sie den Kommentar der zweiten Zeile und ersetzen Sie die lokalen IP-Adressen durch your_ubuntu_server_ip:

      /etc/xinetd.d/check_mk

      . . .
      # configure the IP address(es) of your Nagios server here:
      only_from      = your_ubuntu_server_ip
      . . .
      

      Speichern und schließen Sie die Datei. indem Sie :x und dann ENTER eingeben. Starten Sie den xinetd Dienst neu mit:

      • sudo systemctl restart xinetd

      Wir können jetzt fortfahren, um Checkmk so zu konfigurieren, dass er unseren CentOS 7-Host überwacht.

      Konfigurieren des neuen Host in Checkmk

      Um zusätzliche Hosts zu Checkmk hinzuzufügen, nutzen wir das gleiche Hosts Menü wie zuvor. Dieses Mal nennen wir den Host centos, konfigurieren seine IP-Adresse und wählen WAN (high-latency) unter dem Auswahlfeld Networking Segment, da sich der Host in einem anderen Netzwerk befindet. Wenn wir den Punkt überspringen und ihn als lokal belassen würden, würde uns Checkmk bald darauf aufmerksam machen, dass der Host nicht funktioniert, da erwartet würde, dass er auf Agentenanfragen wesentlich schneller reagierte als über das Internet möglich.

      Bildschirm Erstellen einer zweiten Host-Konfiguration

      Klicken Sie auf Save & go to services, um die für die Überwachung auf dem CentOS-Server verfügbaren Dienste anzuzeigen. Die Liste ist der des ersten Hosts sehr ähnlich. Auch diesmal müssen wir auf Monitor klicken und die Änderungen mit der orangen Schaltfläche oben links aktivieren.

      Nach Aktivierung der Änderungen können wir überprüfen, dass der Host auf der Seite All hosts überwacht wird. Gehen Sie dorthin. Es sind jetzt zwei Hosts, monitoring und centos, sichtbar.

      Liste der Hosts mit zwei überwachten Hosts

      Sie überwachen nun einen Ubuntu-Server und einen CentOS-Server mit Checkmk. Es ist möglich, noch mehr Hosts zu überwachen. Die einzige Einschränkung ist die Serverleistung. Wenn es sich jedoch nicht um mehrere hundert Hosts handelt, sollte dies kein Problem darstellen. Das Verfahren ist für jeden weiteren Host identisch. Checkmk Agenten in deb und rpm Paketen arbeiten auf Ubuntu, CentOS und den meisten anderen Linux-Distributionen.

      Zusammenfassung

      In diesem Leitfaden haben wir Ihnen gezeigt, wie Sie zwei Server mit zwei verschiedenen Linux-Distributionen einrichten: Ubuntu und CentOS. Wir haben dann Checkmk zur Überwachung der Server installiert und konfiguriert und uns die leistungsfähige Weboberfläche von Checkmk näher angesehen.

      Checkmk ermöglicht das einfache Einrichten eines kompletten, vielseitigen Überwachungssystems, das den Aufwand der manuellen Konfiguration in eine einfach zu bedienende Weboberfläche mit vielen Optionen und Funktionen verwandelt. Mit diesen Tools können Sie mehrere Hosts überwachen, E-Mail-, SMS- oder Push-Benachrichtigungen für Probleme einrichten, zusätzliche Kontrollen für weitere Dienste einrichten, Erreichbarkeit und Leistung überwachen usw.

      Um mehr über Checkmk zu erfahren, sehen Sie sich auch die offizielle Dokumentation an.



      Source link

      Comment servir des applications Flask avec Gunicorn et Nginx sur Ubuntu 20.04


      Introduction

      Dans ce guide, vous allez construire une application Python en utilisant le micro-framework Flask sur Ubuntu 20.04. L’essentiel de cet article portera sur la configuration du serveur d’application Gunicorn et sur la manière de lancer l’application et de configurer Nginx pour qu’il agisse comme un proxy inversé en amont.

      Conditions préalables

      Avant de démarrer ce guide, vous devriez avoir :

      • Un serveur avec Ubuntu 20.04 installé et un utilisateur non root avec des privilèges sudo. Suivez notre guide de configuration initiale du serveur pour vous aider.
      • Nginx installé, en suivant les étapes 1 et 2 de Comment installer Nginx sur Ubuntu 20.04.
      • Un nom de domaine configuré pour pointer vers votre serveur. Vous pouvez en acheter un sur Namecheap ou en obtenir un gratuitement sur Freenom.  Vous pouvez apprendre comment pointer des domaines vers DigitalOcean en suivant la documentation pertinente sur les domaines et le DNS. Veillez à créer les enregistrements DNS suivants :

        • Un enregistrement A avec your_domain pointant sur l’adresse IP publique de votre serveur.
        • Un enregistrement A avec www.your_domain​​​​​​ pointant à l’adresse IP publique de votre serveur.
      • Être familiarisé avec la spécification WSGI, que le serveur Gunicorn utilisera pour communiquer avec votre application Flask. Cette discussion couvre le WSGI plus en détail.

      Étape 1 — Installation des composants depuis les référentiels Ubuntu

      Notre première étape consistera à installer tous les éléments dont nous avons besoin depuis les référentiels Ubuntu. Cela inclut pip, le gestionnaire de paquets Python, qui gérera nos composants Python. Nous obtiendrons également les fichiers de développement Python nécessaires pour construire certains des composants de Gunicorn.

      Tout d’abord, nous allons mettre à jour l’index local des paquets et installer les paquets qui nous permettront de construire notre environnement Python. Ceux-ci comprendront python3-pip, ainsi que quelques autres paquets et outils de développement nécessaires pour un environnement de programmation robuste :

      • sudo apt update
      • sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

      Une fois ces paquets en place, passons à la création d’un environnement virtuel pour notre projet.

      Étape 2 — Création d’un environnement virtuel Python

      Ensuite, nous allons configurer un environnement virtuel pour isoler notre application Flask des autres fichiers Python du système.

      Commencez par installer le paquet python3-venv, qui installera le module venv :

      • sudo apt install python3-venv

      Ensuite, créons un répertoire parent pour notre projet Flask. Déplacez-vous dans le répertoire après l’avoir créé :

      • mkdir ~/myproject
      • cd ~/myproject

      Créez un environnement virtuel pour stocker les exigences Python de votre projet Flask en tapant :

      • python3 -m venv myprojectenv

      Cela installera une copie locale de Python et pip dans un répertoire appelé myprojectenv dans le répertoire de votre projet.

      Avant d’installer des applications dans l’environnement virtuel, vous devez l’activer. Faites-le en tapant :

      • source myprojectenv/bin/activate

      Votre invite changera pour indiquer que vous travaillez maintenant dans l’environnement virtuel. Cela ressemblera à ce qui suit (myprojectenv)user@host:~/myproject$.

      Étape 3 — Configuration d’une application Flask

      Maintenant que vous êtes dans votre environnement virtuel, vous pouvez installer Flask et Gunicorn et commencer à concevoir votre application.

      Tout d’abord, installons wheel avec l’instance locale de pip pour nous assurer que nos paquets s’installeront même s’il leur manque des archives de wheel :

      Note


      Quelle que soit la version de Python que vous utilisez, lorsque l’environnement virtuel est activé, vous devez utiliser la commande pip (et non pip3).

      Ensuite, installons Flask et Gunicorn :

      • pip install gunicorn flask

      Création d’un exemple d’application

      Maintenant que vous disposez de Flask, vous pouvez créer une application simple. Flask est un microframework. Il n’inclut pas de nombreux outils que des frameworks plus complets pourraient inclure, et existe principalement sous la forme d’un module que vous pouvez importer dans vos projets pour vous aider à initialiser une application web.

      Bien que votre application puisse être plus complexe, nous allons créer notre app Flask dans un seul fichier, appelé myproject.py :

      • nano ~/myproject/myproject.py

      Le code de l’application se trouvera dans ce fichier. Il importera Flask et instanciera un objet Flask. Vous pouvez l’utiliser pour définir les fonctions qui doivent être exécutées lorsqu’un itinéraire spécifique est demandé :

      ~/myproject/myproject.py

      from flask import Flask
      app = Flask(__name__)
      
      @app.route("/")
      def hello():
          return "<h1 style="color:blue">Hello There!</h1>"
      
      if __name__ == "__main__":
          app.run(host="0.0.0.0")
      

      Cela définit essentiellement le contenu à présenter lors de l’accès au domaine racine. Enregistrez et fermez le fichier lorsque vous avez terminé.

      Si vous avez suivi le guide de configuration initiale du serveur, vous devriez disposer d’un pare-feu UFW activé. Pour tester l’application, vous devez autoriser l’accès au port 5000 :

      Vous pouvez maintenant tester votre application Flask en tapant :

      Vous obtiendrez un résultat comme suit, avec un avertissement utile vous rappelant de ne pas utiliser cette configuration de serveur en production :

      Output

      * Serving Flask app "myproject" (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

      Visitez l’adresse IP de votre serveur, suivie de:5000 dans votre navigateur web :

      http://your_server_ip:5000
      

      Vous devriez voir quelque chose comme ceci :

      Exemple d'application Flask

      Lorsque vous avez terminé, appuyez sur CTRL-C dans la fenêtre de votre terminal pour arrêter le serveur de développement Flask.

      Création du point d’entrée WSGI

      Ensuite, créons un fichier qui servira de point d’entrée pour notre application. Cela indiquera à notre serveur Gunicorn comment interagir avec l’application.

      Appelons le fichier wsgi.py :

      Dans ce fichier, importons l’instance Flask de notre application et exécutons-la :

      ~/myproject/wsgi.py

      from myproject import app
      
      if __name__ == "__main__":
          app.run()
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Étape 4 — Configuration de Gunicorn

      Votre application est maintenant écrite avec un point d’entrée établi. Nous pouvons maintenant passer à la configuration de Gunicorn.

      Avant de continuer, nous devrions vérifier que Gunicorn peut servir correctement l’application.

      Nous pouvons le faire en lui passant simplement le nom de notre point d’entrée. Celui-ci est construit comme le nom du module (moins l’extension .py), plus le nom de l’appelable dans l’application. Dans notre cas, il s’agit de wsgi:app.

      Nous spécifierons également l’interface et le port à utiliser pour que l’application soit lancée sur une interface accessible au public :

      • cd ~/myproject
      • gunicorn --bind 0.0.0.0:5000 wsgi:app

      Vous devriez voir une sortie similaire à la suivante :

      Output

      [2020-05-20 14:13:00 +0000] [46419] [INFO] Starting gunicorn 20.0.4 [2020-05-20 14:13:00 +0000] [46419] [INFO] Listening at: http://0.0.0.0:5000 (46419) [2020-05-20 14:13:00 +0000] [46419] [INFO] Using worker: sync [2020-05-20 14:13:00 +0000] [46421] [INFO] Booting worker with pid: 46421

      Visitez à nouveau dans votre navigateur web l’adresse IP de votre serveur avec :5000 ajouté à la fin :

      http://your_server_ip:5000
      

      Vous devriez voir la sortie de votre application :

      Exemple d'application Flask

      Lorsque vous avez la confirmation qu’il fonctionne correctement, appuyez sur CTRL-C dans la fenêtre de votre terminal.

      Nous en avons maintenant fini avec notre environnement virtuel, nous pouvons donc le désactiver :

      Toutes les commandes Python utiliseront à nouveau l’environnement Python du système.

      Ensuite, créons le fichier d’unité de service systemd. La création d’un fichier d’unité systemd permettra au système d’init d’Ubuntu de lancer automatiquement Gunicorn et de servir l’application Flask à chaque démarrage du serveur.

      Créez un fichier d’unité se terminant par .service dans le répertoire /etc/system/system pour commencer

      • sudo nano /etc/systemd/system/myproject.service

      Dans celui-ci, nous commencerons par la section [Unit], qui est utilisée pour spécifier les métadonnées et les dépendances. Ajoutons ici une description de notre service et disons au système d’initialisation de ne le lancer qu’une fois que l’objectif de mise en réseau a été atteint :

      /etc/systemd/system/myproject.service

      [Unit]
      Description=Gunicorn instance to serve myproject
      After=network.target
      

      Ensuite, ouvrons la section [Service]. Celle-ci indiquera l’utilisateur et le groupe sous lequel nous voulons que le processus s’exécute. Donnons à notre compte utilisateur habituel la propriété du processus puisqu’il possède tous les fichiers pertinents. Donnons également la propriété du groupe au groupe www-data afin que Nginx puisse facilement communiquer avec les processus Gunicorn.  N’oubliez pas de remplacer le nom d’utilisateur ici par votre nom d’utilisateur :

      /etc/systemd/system/myproject.service

      [Unit]
      Description=Gunicorn instance to serve myproject
      After=network.target
      
      [Service]
      User=sammy
      Group=www-data
      

      Ensuite, définissons le répertoire de travail et la variable d’environnement PATH afin que le système d’initialisation sache que les exécutables du processus sont situés dans notre environnement virtuel. Précisons également la commande de démarrage du service. Cette commande fera ce qui suit :

      • Démarrez 3 processus de travail (mais vous devez ajuster cela si nécessaire)
      • Créez et reliez à un fichier socket Unix, myproject.sock, dans notre répertoire de projet. Nous fixerons une valeur d’umask de 007 pour que le fichier socket soit créé en donnant l’accès au propriétaire et au groupe, tout en limitant tout autre accès
      • Précisez le nom du fichier du point d’entrée du WSGI, ainsi que le nom de l’appel Python dans ce fichier (wsgi:app)

      Systemd exige que nous donnons le chemin complet à l’exécutable Gunicorn, qui est installé dans notre environnement virtuel.

      N’oubliez pas de remplacer le nom d’utilisateur et les chemins du projet par vos propres informations :

      /etc/systemd/system/myproject.service

      [Unit]
      Description=Gunicorn instance to serve myproject
      After=network.target
      
      [Service]
      User=sammy
      Group=www-data
      WorkingDirectory=/home/sammy/myproject
      Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
      ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
      

      Enfin, ajoutons une section [Install]. Cela indiquera à systemd à quoi lier ce service si nous autorisons son démarrage au boot. Nous voulons que ce service démarre lorsque le système multi-utilisateurs normal est opérationnel :

      /etc/systemd/system/myproject.service

      [Unit]
      Description=Gunicorn instance to serve myproject
      After=network.target
      
      [Service]
      User=sammy
      Group=www-data
      WorkingDirectory=/home/sammy/myproject
      Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
      ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app
      
      [Install]
      WantedBy=multi-user.target
      

      Avec cela, notre fichier de service systemd est terminé. Enregistrez-le et fermez-le maintenant.

      Nous pouvons maintenant démarrer le service Gunicorn que nous avons créé et l’activer afin qu’il démarre au boot :

      • sudo systemctl start myproject
      • sudo systemctl enable myproject

      Vérifions l’état :

      • sudo systemctl status myproject

      Vous devriez voir une sortie comme celle-ci :

      Output

      ● myproject.service - Gunicorn instance to serve myproject Loaded: loaded (/etc/systemd/system/myproject.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-05-20 14:15:18 UTC; 1s ago Main PID: 46430 (gunicorn) Tasks: 4 (limit: 2344) Memory: 51.3M CGroup: /system.slice/myproject.service ├─46430 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app ├─46449 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app ├─46450 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app └─46451 /home/sammy/myproject/myprojectenv/bin/python3 /home/sammy/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

      Si vous constatez des erreurs, veillez à les résoudre avant de poursuivre le tutoriel.

      Étape 5 — Configuration de Nginx pour les demandes de proxy

      Notre serveur d’application Gunicorn devrait maintenant être opérationnel, en attendant les requêtes sur le fichier socket dans le répertoire du projet. Configurons maintenant Nginx pour qu’il transmette les requêtes web à cette socket en effectuant quelques petits ajouts à son fichier de configuration.

      Commencez par créer un nouveau fichier de configuration du bloc serveur dans le répertoire sites-available de Nginx. Appelons cela myproject pour rester en phase avec le reste du guide :

      • sudo nano /etc/nginx/sites-available/myproject

      Ouvrez un bloc serveur et indiquez à Nginx d’écouter sur le port 80 par défaut. Demandons également à Nginx d’utiliser ce bloc pour les demandes de nom de domaine de notre serveur :

      /etc/nginx/sites-available/myproject

      server {
          listen 80;
          server_name your_domain www.your_domain;
      }
      

      Ensuite, ajoutons un bloc de localisation qui corresponde à chaque requête. Dans ce bloc, nous allons inclure le fichier proxy_params qui spécifie certains paramètres généraux de proxy devant être définis. Nous transmettrons ensuite les demandes à la socket que nous avons définie à l’aide de la directive proxy_pass :

      /etc/nginx/sites-available/myproject

      server {
          listen 80;
          server_name your_domain www.your_domain;
      
          location / {
              include proxy_params;
              proxy_pass http://unix:/home/sammy/myproject/myproject.sock;
          }
      }
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Pour activer la configuration du bloc serveur Nginx que vous venez de créer, reliez le fichier au répertoire sites-enabled :

      • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

      Avec le fichier dans ce répertoire, vous pouvez tester les erreurs de syntaxe :

      Si cela ne révèle aucun problème, relancez le processus Nginx pour lire la nouvelle configuration :

      • sudo systemctl restart nginx

      Enfin, ajustons à nouveau le pare-feu. Nous n’avons plus besoin d’un accès via le port 5000, nous pouvons donc supprimer cette règle. Nous pouvons alors autoriser l’accès complet au serveur Nginx :

      • sudo ufw delete allow 5000
      • sudo ufw allow 'Nginx Full'

      Vous devriez maintenant être en mesure de naviguer sur le nom de domaine de votre serveur dans votre navigateur web :

      http://your_domain
      

      Vous devriez voir la sortie de votre application :

      Exemple d'application Flask

      Si vous rencontrez des erreurs, essayez de vérifier les points suivants :

      • sudo less /var/log/nginx/error.log : vérifie les journaux d’erreurs de Nginx.
      • sudo less /var/log/nginx/access.log : vérifie les journaux d’accès Nginx.
      • sudo journalctl -u nginx : vérifie les journaux des processus Nginx.
      • sudo journalctl -u myproject : vérifie les journaux Gunicorn de votre application Flask.

      Étape 6 — Sécurisation de l’application

      Pour garantir que le trafic vers votre serveur reste sécurisé, obtenons un certificat SSL pour votre domaine. Il existe plusieurs façons de le faire, notamment en obtenant un certificat gratuit auprès de Let’s Encrypt, en générant un certificat auto-signé ou en en achetant un auprès d’un autre fournisseur et en configurant Nginx pour l’utiliser en suivant les étapes 2 à 6 de Comment créer un certificat SSL auto-signé pour Nginx dans Ubuntu 20.04. Nous allons choisir l’option 1 pour des raisons de commodité.

      Installez le paquet Nginx de Certbot avec apt :

      • sudo apt install python3-certbot-nginx

      Certbot propose différents moyens d’obtenir des certificats SSL par le biais de plugins. Le plugin Nginx se chargera de reconfigurer Nginx et de recharger la configuration chaque fois que nécessaire. Pour utiliser ce plugin, tapez ce qui suit :

      • sudo certbot --nginx -d your_domain -d www.your_domain

      Cela exécute certbot avec le plugin --nginx, en utilisant -d pour spécifier les noms pour lesquels nous aimerions que le certificat soit valide.

      Si vous utilisez certbot pour la première fois, vous serez invité à saisir une adresse électronique et à accepter les conditions régissant le service. Après avoir fait cela, certbot communiquera avec le serveur Let’s Encrypt, puis exécutera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

      Si cela réussit, certbot demandera comment vous souhaitez configurer vos paramètres HTTPS :

      Output

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

      Sélectionnez votre choix ensuite appuyez sur ENTER. La configuration sera mise à jour, et Nginx se rechargera pour récupérer les nouveaux paramètres. certbot terminera par un message vous indiquant que le processus a réussi et où sont stockés vos certificats :

      Output

      IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

      Si vous avez suivi les instructions d’installation Nginx dans les conditions préalables, vous n’aurez plus besoin de l’autorisation de profil HTTP redondant :

      • sudo ufw delete allow 'Nginx HTTP'

      Pour vérifier la configuration, naviguez à nouveau sur votre domaine, en utilisant https:// :

      https://your_domain
      

      Vous devriez voir à nouveau la sortie de votre application, ainsi que l’indicateur de sécurité de votre navigateur, qui devrait indiquer que le site est sécurisé.

      Conclusion

      Dans ce guide, vous avez créé et sécurisé une application Flask simple dans un environnement virtuel Python. Vous avez créé un point d’entrée WSGI afin que tout serveur d’application compatible WSGI puisse s’interfacer avec lui, puis vous avez configuré le serveur d’application Gunicorn pour qu’il assure cette fonction. Ensuite, vous avez créé un fichier de service systemd pour lancer automatiquement le serveur de l’application au démarrage. Vous avez également créé un bloc serveur Nginx qui transmet le trafic du client web au serveur d’applications, relayant les requêtes externes, et qui sécurise le trafic vers votre serveur avec Let’s Encrypt.

      Flask est un framework très simple, mais extrêmement flexible, destiné à fournir à vos applications des fonctionnalités sans être trop restrictif sur la structure et la conception. Vous pouvez utiliser la pile générale décrite dans ce guide pour servir les applications flask que vous concevez.



      Source link