One place for hosting & domains

      configurer

      Comment configurer Django avec Postgres, Nginx et Gunicorn sur Ubuntu 20.04


      Introduction

      Django est un framework web puissant qui peut vous aider à lancer votre application ou votre site web en Python. Django comprend un serveur de développement simplifié pour tester votre code en local, mais pour tout ce qui est lié, même légèrement, à la production, un serveur web plus sécurisé et plus puissant est nécessaire.

      Dans ce guide, nous allons montrer comment installer et configurer certains composants d’Ubuntu 20.04 pour soutenir et servir les applications Django. Nous allons mettre en place une base de données PostgreSQL au lieu d’utiliser la base de données SQLite par défaut. Nous allons configurer le serveur d’application Gunicorn pour qu’il s’interface avec nos applications. Nous allons ensuite mettre en place Nginx pour inverser le proxy à Gunicorn, nous donnant accès à ses fonctions de sécurité et de performance pour servir nos applications.

      Conditions prélables et objectifs

      Afin de terminer ce guide, vous devez disposer d’une nouvelle instance de serveur Ubuntu 20.04 avec un pare-feu de base et un utilisateur non root avec des privilèges sudo configurés. Vous pouvez apprendre à paramétrer cette configuration en suivant notre guide de configuration initiale du serveur.

      Nous allons installer Django dans un environnement virtuel. L’installation de Django dans un environnement spécifique à votre projet permettra de traiter séparément vos projets et leurs exigences.

      Une fois que notre base de données et notre application seront opérationnels, nous allons installer et configurer le serveur d’application Gunicorn. Cela servira d’interface à notre application, traduisant les requêtes des clients à partir de HTTP en appels Python que notre application peut traiter. Nous allons ensuite mettre en place Nginx en face de Gunicorn pour tirer parti de ses mécanismes très performants de gestion des connexions et de ses fonctionnalités de sécurité faciles à mettre en œuvre.

      Commençons.

      Installation des paquets à partir des référentiels Ubuntu

      Pour démarrer le processus, nous allons télécharger et installer tous les éléments dont nous avons besoin à partir des référentiels Ubuntu. Nous utiliserons le gestionnaire de paquets Python pip pour installer des composants supplémentaires un peu plus tard.

      Nous devons mettre à jour l’index local du paquet apt et ensuite télécharger et installer les paquets. Les paquets que nous installons dépendent de la version de Python votre projet utilisera.

      Si vous utilisez Django avec Python 3, tapez :

      • sudo apt update
      • sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl

      Django 1.11 est la dernière version de Django qui prendra en charge Python 2. Si vous démarrez de nouveaux projets, il est fortement recommandé de choisir Python 3. Si vous avez encore besoin d’utiliser Python 2, tapez :

      • sudo apt update
      • sudo apt install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx curl

      Cela installera pip, les fichiers de développement Python nécessaires pour construire Gunicorn plus tard, le système de base de données Postgres et les bibliothèques nécessaires à l’interaction avec celui-ci, ainsi que le serveur web Nginx.

      Création de la base de données et de l’utilisateur PostgreSQL

      Nous allons tout de suite créer une base de données et un utilisateur de base de données pour notre application Django.

      Par défaut, Postgres utilise un système d’authentification appelé « authentification par les pairs » pour les connexions locales. En gros, cela signifie que si le nom d’utilisateur du système d’exploitation de l’utilisateur correspond à un nom d’utilisateur Postgres valide, cet utilisateur peut se connecter sans autre authentification.

      Au cours de l’installation de Postgres, un utilisateur du système d’exploitation nommé postgres a été créé pour correspondre à l’utilisateur administratif postgres de PostgreSQL. Nous devons utiliser cet utilisateur pour effectuer des tâches administratives. Nous pouvons utiliser sudo et passer dans le nom d’utilisateur avec l’option -u.

      Connectez-vous à une session interactive de Postgres en tapant :

      Vous recevrez une invite PostgreSQL où nous pourrons configurer nos exigences.

      Tout d’abord, créez une base de données pour votre projet :

      • CREATE DATABASE myproject;

      Remarque : chaque instruction de Postgres doit se terminer par un point-virgule, Assurez-vous donc que votre commande se termine bien par un point-virgule si vous rencontrez des problèmes.

      Ensuite, créez un utilisateur de base de données pour votre projet. Sélectionnez un mot de passe sécurisé :

      • CREATE USER myprojectuser WITH PASSWORD 'password';

      Ensuite, nous allons modifier quelques-uns des paramètres de connexion de l’utilisateur que nous venons de créer. Cela accélérera les opérations de la base de données de sorte qu’il ne sera pas nécessaire d’interroger et de définir les valeurs correctes à chaque fois qu’une connexion sera établie.

      Nous réglons l’encodage par défaut à UTF-8, auquel Django s’attend. Nous définissons également le schéma d’isolement des transactions par défaut à « read committed », qui bloque les lectures de transactions non engagées. Enfin, nous définissons le fuseau horaire. Par défaut, nos projets Django seront configurés pour utiliser l’UTC. Ce sont toutes les recommandations du projet Django lui-même :

      • ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
      • ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
      • ALTER ROLE myprojectuser SET timezone TO 'UTC';

      Nous pouvons maintenant donner à notre nouvel utilisateur un accès pour administrer notre nouvelle base de données :

      • GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

      Une fois terminé, quittez l’invite PostgreSQL en tapant :

      Postgres est maintenant configuré de manière à ce que Django puisse se connecter et gérer les informations de sa base de données.

      Création d’un environnement virtuel Python pour votre projet

      Maintenant que nous avons notre base de données, nous pouvons commencer à préparer le reste des exigences de notre projet. Nous allons installer nos exigences Python dans un environnement virtuel pour faciliter la gestion.

      Pour ce faire, nous devons d’abord accéder à la commande virtualenv. Nous pouvons l’installer avec pip.

      Si vous utilisez Python 3, mettez à niveau pip et installez le paquet en tapant :

      • sudo -H pip3 install --upgrade pip
      • sudo -H pip3 install virtualenv

      Si vous utilisez Python 2, mettez à niveau pip et installez le paquet en tapant :

      • sudo -H pip install --upgrade pip
      • sudo -H pip install virtualenv

      Une fois virtualenv installé, nous pouvons démarrer à former notre projet. Créez et accédez à un répertoire où nous pouvons conserver nos fichiers de projet :

      • mkdir ~/myprojectdir
      • cd ~/myprojectdir

      Dans le répertoire du projet, créez un environnement virtuel Python en tapant :

      Cela créera un répertoire appelé myprojectenv dans votre répertoire myprojectdir. Dans ce répertoire, il installera une version locale de Python et une version locale de pip. Nous pouvons l’utiliser pour installer et configurer un environnement Python isolé pour notre projet.

      Avant d’installer les exigences Python de notre projet, nous devons activer l’environnement virtuel. Vous pouvez le faire en saisissant :

      • source myprojectenv/bin/activate

      Votre invite devrait changer pour indiquer que vous travaillez maintenant dans un environnement virtuel Python. Cela ressemblera à quelque chose comme ceci : (myprojectenv)user@host:~/myproject$.

      Une fois votre environnement virtuel actif, installez Django, Gunicorn et l’adaptateur PostgreSQL psycopg2 avec l’instance locale de pip :

      Remarque : Lorsque l’environnement virtuel est activé (lorsque votre invite a (myprojetenv) qui la précède), utilisez pip au lieu de pip3, même si vous utilisez Python 3. La copie de l’environnement virtuel de l’outil est toujours appelée pip, quelle que soit la version de Python.

      • pip install django gunicorn psycopg2-binary

      Vous devriez maintenant disposer de tous les logiciels nécessaires pour démarrer un projet Django.

      Création et Configuration d’un nouveau projet Django

      Une fois nos composants Python installés, nous pouvons créer les fichiers du projet Django.

      Création du projet Django

      Comme nous avons déjà un répertoire de projet, nous allons indiquer à Django d’installer les fichiers ici. Il va créer un répertoire de deuxième niveau avec le code réel, ce qui est normal, et y placera un script de gestion. L’essentiel est que nous définissions explicitement le répertoire au lieu de permettre à Django de prendre des décisions par rapport à notre répertoire actuel :

      • django-admin.py startproject myproject ~/myprojectdir

      À ce stade, votre répertoire de projet (~/myprojectdir dans notre cas) devrait avoir le contenu suivant :

      • ~/myprojectdir/manage.py : un script de gestion de projet Django.
      • ~/myprojectdir/myproject/ : Le paquet du projet Django. Il devrait contenir les fichiers __init__.py, settings.py, urls.py, asgi.py, et wsgi.py.
      • ~/myprojectdir/myprojectenv/ : Le répertoire de l’environnement virtuel que nous avons créé auparavant.

      Ajustement des paramètres du projet

      La première chose que nous devons faire avec nos fichiers de projet nouvellement créés est d’ajuster les paramètres. Ouvrez le fichier de paramètres dans votre éditeur de texte :

      • nano ~/myprojectdir/myproject/settings.py

      Commencez par localiser la directive ALLOWED_HOSTS. Cellle-ci définit une liste des adresses ou des noms de domaine du serveur pouvant être utilisés pour se connecter à l’instance Django. Toute requête entrante dont l’en-tête Host ne figure pas dans cette liste fera l’objet d’une exception. Django vous demande de la définir pour éviter une certaine classe de vulnérabilité de sécurité.

      Dans les crochets , listez les adresses IP ou les noms de domaine associés à votre serveur Django. Chaque élément devrait être listé dans des guillemets avec les entrées séparées par une virgule. Si vous souhaitez des requêtes pour un domaine entier et des sous-domaines, faites précéder l’entrée d’un point. Dans l’extrait ci-dessous, quelques exemples commentés sont utliser pour démontrer :

      Note : veillez à inclure localhost parmi les options, car nous allons utiliser une instance locale de Nginx comme proxy pour les connexions.

      ~/myprojectdir/myproject/settings.py

      . . .
      # The simplest case: just add the domain name(s) and IP addresses of your Django server
      # ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
      # To respond to 'example.com' and any subdomains, start the domain with a dot
      # ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
      ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . ., 'localhost']
      

      Ensuite, trouvez la section qui configure l’accès à la base de données. Elle commencera par des DATABASES. La configuration du fichier concerne une base de données SQLite. Nous avons déjà créé une base de données PostgreSQL pour notre projet, nous devons donc ajuster les paramètres.

      Modifiez les paramètres à l’aide des informations de votre base de données PostgreSQL. Nous disons à Django d’utiliser l’adaptateur psycopg2 que nous avons installé avec pip. Nous devons indiquer le nom de la base de données, le nom d’utilisateur de la base de données, le mot de passe de l’utilisateur de la base de données, puis spécifier que la base de données est située sur l’ordinateur local. Vous pouvez laisser le paramètre PORT sous forme de chaîne vide :

      ~/myprojectdir/myproject/settings.py

      . . .
      
      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.postgresql_psycopg2',
              'NAME': 'myproject',
              'USER': 'myprojectuser',
              'PASSWORD': 'password',
              'HOST': 'localhost',
              'PORT': '',
          }
      }
      
      . . .
      

      Ensuite, passez au bas du fichier et ajoutez un paramètre indiquant où les fichiers statiques devraient être placés. Ceci est nécessaire pour que Nginx puisse traiter les requêtes pour ces éléments. La ligne suivante indique à Django de les placer dans un répertoire appelé static dans le répertoire du projet de base :

      ~/myprojectdir/myproject/settings.py

      . . .
      
      STATIC_URL = '/static/'
      STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Terminer la configuration initiale du projet

      Nous pouvons maintenant migrer le schéma de base de données initiale vers notre base de données PostgreSQL à l’aide du script de gestion :

      • ~/myprojectdir/manage.py makemigrations
      • ~/myprojectdir/manage.py migrate

      Créez un utilisateur administratif pour le projet en tapant :

      • ~/myprojectdir/manage.py createsuperuser

      Vous devrez sélectionner un nom d’utilisateur, fournir une adresse électronique et choisir et confirmer un mot de passe.

      Nous pouvons récupérer tout le contenu statique dans l’emplacement du répertoire que nous avons configuré en tapant :

      • ~/myprojectdir/manage.py collectstatic

      Vous devrez confirmer l’opération. Les fichiers statiques seront ensuite placés dans un répertoire appelé static dans votre répertoire de projet.

      Si vous avez suivi le guide de configuration initiale du serveur, vous devriez disposer d’un pare-feu UFW qui protège votre serveur Afin de tester le serveur de développement, nous allons devoir autoriser l’accès au port que nous utiliserons.

      Créez une exception pour le port 8000 en tapant :

      Enfin, vous pouvez tester notre projet en démarrant le serveur de développement Django avec cette commande :

      • ~/myprojectdir/manage.py runserver 0.0.0.0:8000

      Dans votre navigateur web, accédez au nom de domaine ou à l’adresse IP de votre serveur suivi(e) de :8000 :

      http://server_domain_or_IP:8000
      

      Vous devriez obtenir la page d’index par défaut de Django :

      Page d'index de Django

      Si vous ajoutez /admin à la fin de l’URL dans la barre d’adresse, vous serez invité à fournir le nom d’utilisateur et le mot de passe administratif que vous avez créé avec la commande createsuperuser :

      Connexion à l'interface d'administration de Django

      Une fois l’authentification terminée, vous pouvez accéder à l’interface admin par défaut de Django :

      Interface admin de Django

      Quand vous avez fini d’explorer, appuyez sur CTRL-C dans la fenêtre de terminal pour fermer le serveur de développement.

      Tester la capacité de Gunicorn à servir le projet

      La dernière chose que nous voulons faire avant de quitter notre environnement virtuel est de tester Gunicorn pour nous assurer qu’il peut servir l’application. Nous pouvons le faire en entrant dans notre répertoire de projet et en utilisant gunicorn pour charger le module WSGI du projet :

      • cd ~/myprojectdir
      • gunicorn --bind 0.0.0.0:8000 myproject.wsgi

      Cela démarrera Gunicorn sur la même interface que celle sur laquelle le serveur de développement Django fonctionnait. Vous pouvez revenir en arrière et tester à nouveau l’application.

      Remarque : l’interface admin ne bénéficiera d’aucun des styles appliqués puisque Gunicorn ne sait pas comment trouver le contenu CSS statique responsable de cela.

      Nous avons passé un module à Gunicorn en spécifiant le chemin relatif du répertoire du fichier wsgi.py de Django, qui est le point d’entrée de notre application, en utilisant la syntaxe du module Python. À l’intérieur de ce fichier, une fonction appelée application est définie, qui est utilisée pour communiquer avec l’application. Pour en savoir plus sur la spécification WSGI, cliquez ici.

      Lorsque vous avez terminé les tests, appuyez sur CTRL-C dans la fenêtre du terminal pour arrêter Gunicorn.

      Nous avons maintenant fini de configurer notre application Django. Nous pouvons sortir de notre environnement virtuel en tapant :

      L’indicateur de l’environnement virtuel dans votre invite sera supprimé.

      Création de fichiers de socket et de service systemd pour Gunicorn

      Nous avons testé la capacité de Gunicorn à interagir avec notre application Django, mais nous devrions mettre en place un moyen plus solide de démarrer et d’arrêter le serveur d’application. Pour ce faire, nous allons créer des fichiers de socket et de service de systemd.

      La socket de Gunicorn sera créée au démarrage et écoutera les connexions. Lorsqu’une connexion est établie, systemd démarrera automatiquement le processus de Gunicorn pour gérer la connexion.

      Commencez par créer et ouvrir un fichier de socket de systemd pour Gunicorn avec les privilèges sudo :

      • sudo nano /etc/systemd/system/gunicorn.socket

      À l’intérieur, nous allons créer une section [Unit] pour décrire la socket, une section [Socket] pour définir l’emplacement de la socket et une section [Install] pour nous assurer que la socket est créée au bon moment :

      /etc/systemd/system/gunicorn.socket

      [Unit]
      Description=gunicorn socket
      
      [Socket]
      ListenStream=/run/gunicorn.sock
      
      [Install]
      WantedBy=sockets.target
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Ensuite, créez et ouvrez un fichier de service systemd pour Gunicorn avec des privilèges sudo dans votre éditeur de texte. Le nom de fichier de service devrait correspondre au nom de socket, à l’exception de l’extension :

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

      Commencez par la section [Unit], qui est utilisée pour spécifier les métadonnées et les dépendances. Nous ajouterons 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. Comme notre service repose sur la socket du fichier de socket, nous devons inclure une directive Requires pour indiquer cette relation :

      /etc/systemd/system/gunicorn.service

      [Unit]
      Description=gunicorn daemon
      Requires=gunicorn.socket
      After=network.target
      

      Ensuite, nous allons ouvrir la section [Service]. Nous indiquerons l’utilisateur et le groupe sous lequel nous voulons que le processus s’exécute. Nous allons donner à notre compte utilisateur habituel la propriété du processus puisqu’il possède tous les fichiers pertinents. Nous allons donner la propriété de groupe au groupe www-data afin que Nginx puisse communiquer facilement avec Gunicorn.

      Nous allons ensuite mapper le répertoire de travail et spécifier la commande à utiliser pour lancer le service. Dans ce cas, nous devrons spécifier le chemin complet de l’exécutable Gunicorn, qui est installé dans notre environnement virtuel. Nous allons lier le processus à la socket Unix que nous avons créée dans le répertoire /run, afin que le processus puisse communiquer avec Nginx. Nous enregistrons toutes les données sur une sortie standard afin que le processus journald puisse recueillir les journaux Gunicorn. Nous pouvons également spécifier tout ajustement optionnel de Gunicorn ici. Par exemple, nous avons spécifié 3 processus de travail dans ce cas :

      /etc/systemd/system/gunicorn.service

      [Unit]
      Description=gunicorn daemon
      Requires=gunicorn.socket
      After=network.target
      
      [Service]
      User=sammy
      Group=www-data
      WorkingDirectory=/home/sammy/myprojectdir
      ExecStart=/home/sammy/myprojectdir/myprojectenv/bin/gunicorn 
                --access-logfile - 
                --workers 3 
                --bind unix:/run/gunicorn.sock 
                myproject.wsgi:application
      

      Enfin, nous allons ajouter 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/gunicorn.service

      [Unit]
      Description=gunicorn daemon
      Requires=gunicorn.socket
      After=network.target
      
      [Service]
      User=sammy
      Group=www-data
      WorkingDirectory=/home/sammy/myprojectdir
      ExecStart=/home/sammy/myprojectdir/myprojectenv/bin/gunicorn 
                --access-logfile - 
                --workers 3 
                --bind unix:/run/gunicorn.sock 
                myproject.wsgi:application
      
      [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 et activer la socket Gunicorn. Cela créera le fichier de socket à /run/gunicorn.sock maintenant et au démarrage. Lorsqu’une connexion se fait à cette socket, systemd démarrera automatiquement gunicorn.service pour la gérer :

      • sudo systemctl start gunicorn.socket
      • sudo systemctl enable gunicorn.socket

      Nous pouvons confirmer que l’opération a bien réussi en vérifiant le fichier de socket.

      Vérification du fichier de socket Gunicorn

      Vérifiez l’état du processus pour savoir s’il a pu démarrer :

      • sudo systemctl status gunicorn.socket

      Vous devriez recevoir un résultat semblable à celui-ci :

      Output

      ● gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor prese> Active: active (listening) since Fri 2020-06-26 17:53:10 UTC; 14s ago Triggers: ● gunicorn.service Listen: /run/gunicorn.sock (Stream) Tasks: 0 (limit: 1137) Memory: 0B CGroup: /system.slice/gunicorn.socket

      Ensuite, vérifiez l’existence du fichier gunicorn.sock dans le répertoire /run :

      Output

      /run/gunicorn.sock: socket

      Si la commande systemctl status indique qu’une erreur s’est produite ou si vous ne trouvez pas le fichier gunicorn.sock dans le répertoire, c’est une indication que la socket Gunicorn n’a pas pu être créée correctement. Vérifiez les journaux de la socket Gunicorn en tapant :

      • sudo journalctl -u gunicorn.socket

      Examinez à nouveau votre fichier /etc/systemd/system/gunicorn.socket pour corriger tous les problèmes avant de continuer.

      Test d’activation de socket

      Actuellement, si vous n’avez démarré que l’unité gunicorn.socket, le gunicorn.service ne sera pas encore actif puisque la socket n’a pas encore reçu de connexion. Vous pouvez vérifier cela en tapant :

      • sudo systemctl status gunicorn

      Output

      ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled) Active: inactive (dead)

      Pour tester le mécanisme d’activation de la socket, nous pouvons envoyer une connexion à la socket via curl en tapant :

      • curl --unix-socket /run/gunicorn.sock localhost

      Vous devriez recevoir la sortie HTML de votre application dans le terminal. Cela indique que Gunicorn a démarré et a pu servir votre application Django. Vous pouvez vérifier que le service Gunicorn fonctionne en tapant :

      • sudo systemctl status gunicorn

      Output

      ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-26 18:52:21 UTC; 2s ago TriggeredBy: ● gunicorn.socket Main PID: 22914 (gunicorn) Tasks: 4 (limit: 1137) Memory: 89.1M CGroup: /system.slice/gunicorn.service ├─22914 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/myprojectdir/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunico> ├─22927 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/myprojectdir/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunico> ├─22928 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/myprojectdir/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunico> └─22929 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/myprojectdir/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunico> Jun 26 18:52:21 django-tutorial systemd[1]: Started gunicorn daemon. Jun 26 18:52:21 django-tutorial gunicorn[22914]: [2020-06-26 18:52:21 +0000] [22914] [INFO] Starting gunicorn 20.0.4 Jun 26 18:52:21 django-tutorial gunicorn[22914]: [2020-06-26 18:52:21 +0000] [22914] [INFO] Listening at: unix:/run/gunicorn.sock (22914) Jun 26 18:52:21 django-tutorial gunicorn[22914]: [2020-06-26 18:52:21 +0000] [22914] [INFO] Using worker: sync Jun 26 18:52:21 django-tutorial gunicorn[22927]: [2020-06-26 18:52:21 +0000] [22927] [INFO] Booting worker with pid: 22927 Jun 26 18:52:21 django-tutorial gunicorn[22928]: [2020-06-26 18:52:21 +0000] [22928] [INFO] Booting worker with pid: 22928 Jun 26 18:52:21 django-tutorial gunicorn[22929]: [2020-06-26 18:52:21 +0000] [22929] [INFO] Booting worker with pid: 22929

      Si la sortie de curl ou la sortie du statut systemctl indique qu’un problème s’est produit, vérifiez les journaux pour obtenir des détails supplémentaires :

      • sudo journalctl -u gunicorn

      Vérifiez votre fichier /etc/systemd/system/gunicorn.service pour tout problème. Si vous apportez des modifications au fichier /etc/systemd/system/gunicorn.service, rechargez le démon pour relire la définition de service et redémarrez le processus Gunicorn en tapant :

      • sudo systemctl daemon-reload
      • sudo systemctl restart gunicorn

      Assurez-vous de résoudre les problèmes ci-dessus avant de continuer.

      Configurer Nginx pour passer par proxy à Gunicorn

      Maintenant que Gunicorn est mis en place, nous devons configurer Nginx pour qu’il transmette le trafic au processus.

      Commencez par créer et ouvrir un nouveau bloc serveur dans le répertoire sites-available de Nginx :

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

      À l’intérieur, ouvrez un nouveau bloc serveur. Nous allons commencer par spécifier que ce bloc devrait écouter sur le port normal 80 et qu’il devrait répondre au nom de domaine ou à l’adresse IP de notre serveur :

      /etc/nginx/sites-available/myproject

      server {
          listen 80;
          server_name server_domain_or_IP;
      }
      

      Ensuite, nous allons demander à Nginx d’ignorer tous les problèmes de recherche d’une favicon. Nous allons également lui dire où trouver les éléments statiques que nous avons recueillis dans notre répertoire ~/myprojectdir/static Tous ces fichiers disposent d’un préfixe URI standard de “/static”, nous pouvons donc créer un bloc d’emplacement pour correspondre à ces requêtes :

      /etc/nginx/sites-available/myproject

      server {
          listen 80;
          server_name server_domain_or_IP;
      
          location = /favicon.ico { access_log off; log_not_found off; }
          location /static/ {
              root /home/sammy/myprojectdir;
          }
      }
      

      Enfin, nous allons créer un bloc location / {} pour correspondre à toutes les autres requêtes. À l’intérieur de cet emplacement, nous allons inclure le fichier proxy_params standard inclus avec l’installation Nginx et ensuite nous allons passer le trafic directement à la socket Gunicorn :

      /etc/nginx/sites-available/myproject

      server {
          listen 80;
          server_name server_domain_or_IP;
      
          location = /favicon.ico { access_log off; log_not_found off; }
          location /static/ {
              root /home/sammy/myprojectdir;
          }
      
          location / {
              include proxy_params;
              proxy_pass http://unix:/run/gunicorn.sock;
          }
      }
      

      Enregistrez et fermez le fichier lorsque vous avez terminé. Nous pouvons maintenant activer le fichier en le reliant au répertoire sites-enabled :

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

      Testez votre configuration Nginx pour détecter les erreurs de syntaxe en tapant :

      Si aucune erreur n’est signalée, continuez et redémarrez Nginx en tapant :

      • sudo systemctl restart nginx

      Enfin, nous devons ouvrir notre pare-feu au trafic normal sur le port 80. Comme nous n’avons plus besoin d’accès au serveur de développement, nous pouvons supprimer la règle d’ouverture du port 8000 également :

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

      Vous devriez maintenant pouvoir accéder au domaine ou à l’adresse IP de votre serveur pour voir votre application.

      Note : Après avoir configuré Nginx, la prochaine étape devrait consister à sécuriser le trafic vers le serveur en utilisant SSL/TLS. Ceci est important car sinon, toutes les informations, y compris les mots de passe, seraient envoyées sur le réseau en texte clair.

      Si vous disposez d’un nom de domaine, la manière la plus simple d’obtenir un certificat SSL pour sécuriser votre trafic consiste à utiliser Let’s Encrypt. Suivez ce guide pour configurer Let’s Encrypt avec Nginx sur Ubuntu 20.04. Suivez la procédure en utilisant le bloc serveur Nginx que nous avons créé dans ce guide.

      Dépanner Nginx et Gunicorn

      Si cette dernière étape ne montre pas votre application, vous devrez dépanner votre installation.

      Nginx affiche la page par défaut au lieu de l’application Django

      Si Nginx affiche la page par défaut au lieu d’utiliser un proxy vers votre application, cela signifie généralement que vous devez ajuster le server_name dans le fichier /etc/nginx/sites-available/myproject pour qu’il pointe vers l’adresse IP ou le nom de domaine de votre serveur.

      Nginx utilise le server_name pour déterminer le bloc serveur à utiliser pour répondre aux requêtes. Si vous recevez la page Nginx par défaut, c’est un signe que Nginx n’a pas pu faire correspondre la requête à un bloc serveur explicitement, donc il revient au bloc par défaut défini dans /etc/nginx/sites-available/default.

      Le server_name dans le bloc serveur de votre projet doit être plus spécifique que celui dans le bloc serveur par défaut pour être sélectionné.

      Nginx affiche une erreur de Bad Gateway 502 au lieu de l’application Django

      Une erreur 502 indique que Nginx n’est pas en mesure de transmettre la requête. Un large éventail de problèmes de configuration s’expriment avec une erreur 502, de sorte que davantage d’informations sont nécessaires pour dépanner correctement.

      L’endroit principal pour trouver plus d’informations se trouve dans les journaux d’erreur de Nginx. Généralement, cela vous indiquera les conditions qui ont causé des problèmes lors de l’événement de proxying. Suivez les journaux d’erreur Nginx en tapant :

      • sudo tail -F /var/log/nginx/error.log

      Maintenant, faites une autre requête dans votre navigateur pour générer une nouvelle erreur (essayez de rafraîchir la page). Vous devriez recevoir un nouveau message d’erreur écrit au journal. Si vous regardez le message, il devrait vous aider à cerner le problème.

      Vous pourriez recevoir le message suivant :

      connect() to unix:/run/gunicorn.sock failed (2: No such file or directory)

      Cela indique que Nginx n’a pas pu trouver le fichier gunicorn.sock à l’endroit indiqué. Vous devriez comparer l’emplacement proxy_pass, défini dans le fichier /etc/nginx/sites-available/myproject à l’emplacement réel du fichier gunicorn.sock généré par l’unité systemd gunicorn.socket.

      Si vous ne trouvez pas de fichier gunicorn.sock dans le répertoire /run, cela signifie généralement que le fichier systemd socket n’a pas pu le créer. Retournez à la section sur la vérification du fichier socket Gunicorn pour parcourir les étapes de dépannage pour Gunicorn.

      connect() to unix:/run/gunicorn.sock failed (13: Permission denied)

      Cela indique que Nginx n’a pas pu se connecter à la socket Gunicorn en raison de problèmes de permission. Cela peut se produire lorsque la procédure est suivie en utilisant un root user au lieu d’un utilisateur sudo. Bien que systemd soit capable de créer le fichier de socket Gunicorn, Nginx n’est pas en mesure d’y accéder.

      Cela peut se produire s’il existe des permissions limitées à un moment quelconque entre le répertoire root (/) et le fichier gunicorn.sock. Nous pouvons examiner les permissions et les valeurs de propriété du fichier socket et de chacun de ses répertoires parents en passant le chemin absolu de notre fichier socket à la commande namei :

      • namei -l /run/gunicorn.sock

      Output

      f: /run/gunicorn.sock drwxr-xr-x root root / drwxr-xr-x root root run srw-rw-rw- root root gunicorn.sock

      La sortie affiche les permissions de chacun des composants du répertoire. En examinant les permissions (première colonne), propriétaire (deuxième colonne) et groupe propriétaire (troisième colonne), nous pouvons comprendre ‘quel type d’accès est autorisé au fichier socket.

      Dans l’exemple ci-dessus, le fichier socket et chacun des répertoires menant au fichier socket ont des permissions de lecture et d’exécution mondiales (la colonne des permissions pour les répertoires se terminent par r-x au lieu de ---). Le processus Nginx devrait pouvoir accéder à la socket avec succès.

      Si l’un des répertoires menant à la socket n’a pas de permission mondiale de lecture et d’exécution, Nginx ne pourra pas accéder à la socket sans autoriser les permissions de lecture et d’exécution mondiales ou sans s’assurer que la propriété du groupe est donnée à un groupe dont Nginx fait partie.

      Django affiche : “n’a pas pu se connecter au serveur : Connexion refusée”

      Un message que vous pouvez recevoir de Django lorsque vous essayez d’accéder à certaines parties de l’application dans le navigateur web est :

      OperationalError at /admin/login/
      could not connect to server: Connection refused
          Is the server running on host "localhost" (127.0.0.1) and accepting
          TCP/IP connections on port 5432?
      

      Cela indique que Django n’est pas en mesure de se connecter à la base de données Postgres. Assurez-vous que l’instance Postgres fonctionne en tapant :

      • sudo systemctl status postgresql

      Si ce n’est pas le cas, vous pouvez la démarrer, et lui permettre de démarrer automatiquement au démarrage (si elle n’est pas déjà configurée pour le faire) en tapant :

      • sudo systemctl start postgresql
      • sudo systemctl enable postgresql

      Si les problèmes persistent, assurez-vous que les paramètres de la base de données définis dans le fichier ~/myprojectdir/myproject/settings.py sont corrects.

      Autres dépannages

      Pour un dépannage supplémentaire, les journaux peuvent vous aider à cerner les causes profondes. Vérifiez chacune d’entre elles à tour de rôle et recherchez les messages indiquant les zones à problèmes.

      Les journaux suivants peuvent être utiles :

      • Vérifiez les journaux du processus Nginx en tapant : sudo journalctl -u nginx
      • Vérifiez les journaux d’accès Nginx en tapant : sudo less /var/log/nginx/access.log
      • Vérifiez les journaux d’erreur Nginx en tapant : sudo less /var/log/nginx/error.log
      • Vérifiez les journaux de l’application Gunicorn en tapant : sudo journalctl -u gunicorn
      • Vérifiez les journaux de socket Gunicorn en tapant : sudo journalctl -u gunicorn.socket

      Lorsque vous mettez à jour votre configuration ou votre application, vous devrez probablement redémarrer les processus pour vous ajuster à vos changements.

      Si vous mettez à jour votre application Django, vous pouvez redémarrer le processus Gunicorn pour récupérer les modifications en tapant :

      • sudo systemctl restart gunicorn

      Si vous modifiez les fichiers de socket ou de service, rechargez le démon et redémarrez le processus en tapant :

      • sudo systemctl daemon-reload
      • sudo systemctl restart gunicorn.socket gunicorn.service

      Si vous modifiez la configuration du bloc serveur Nginx, testez la configuration et ensuite Nginx en tapant :

      • sudo nginx -t && sudo systemctl restart nginx

      Ces commandes sont utiles pour récupérer les modifications à mesure que vous ajustez votre configuration.

      Conclusion

      Dans ce guide, nous avons mis en place un projet Django dans son propre environnement virtuel. Nous avons configuré Gunicorn pour traduire les requêtes client de sorte que Django puisse les gérer. Ensuite, nous avons mis en place Nginx pour qu’il agisse en tant que proxy inverse afin de gérer les connexions client et servir le projet approprié, en fonction de la requête du client.

      Django simplifie la création de projets et d’applications en fournissant un grand nombre d’éléments communs, ce qui vous permet de vous concentrer sur les éléments uniques. En exploitant la chaîne d’outils générale décrite dans cet article, vous pouvez facilement servir les applications que vous créez à partir d’un seul serveur.



      Source link

      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

      Comment installer et configurer Postfix sur Ubuntu 20.04


      Une version précédente de ce tutoriel a été rédigée par Justin Ellingwood

      Introduction

      Postfix est un Mail Transfer Agent (Agent de transfert de courrier électronique – MTA) open-source populaire qui peut être utilisé pour acheminer et distribuer le courrier électronique sur un système Linux. On estime qu’environ 25 % des serveurs de courrier électronique publics sur Internet fonctionnent avec Postfix.

      Dans ce guide, vous allez apprendre à installer et configurer Postfix sur un serveur Ubuntu 20.04. Ensuite, vous vérifierez que Postfix est capable d’acheminer correctement le courrier électronique en installant s-nail, un Mail User Agent (Agent utilisateur de courrier électronique – MUA), également connu sous le nom de client de messagerie électronique.

      Veuillez noter que l’objectif de ce tutoriel est de vous aider à rendre Postfix rapidement opérationnel avec seulement quelques fonctionnalités de courrier électronique. Vous n’aurez pas de serveur de messagerie électronique complet à la fin de ce guide, mais vous disposerez de certains des éléments fondamentaux d’une telle installation pour vous aider à démarrer.

      Conditions préalables

      Pour suivre ce guide, vous aurez besoin des éléments suivants :

      • Un serveur fonctionnant sous Ubuntu 20.04, utilisé comme serveur de courrier électronique Postfix. Ce serveur doit avoir un non-root user avec des privilèges sudo et un pare-feu configuré avec UFW. Vous pouvez suivre notre guide de configuration initiale du serveur Ubuntu 20.04 pour le mettre en place. 
      • Un nom de domaine pleinement qualifié pointé vers votre serveur Ubuntu 20.04. Vous pouvez trouver de l’aide sur la configuration de votre nom de domaine avec DigitalOcean en suivant notre documentation sur les domaines et les réseaux DNS. Sachez que si vous planifiez d’accéder à votre courrier électronique à partir d’un emplacement externe, vous devrez vous assurer que vous disposez également d’un enregistrement MX pointant vers votre serveur de messagerie.

      Notez que ce tutoriel suppose que vous configurez un hôte qui a le FQDN de mail.example.com. Si nécessaire, veillez à changer example.com ou mail.example.com pour refléter votre propre FQDN.

      Étape 1 — Installer Postfix

      Postfix est inclus dans les référentiels par défaut d’Ubuntu, vous pouvez donc l’installer avec APT.

      Pour commencer, mettez à jour votre cache de paquets apt :

      Ensuite, installez le package postfix avec la commande suivante. Remarquez que nous passons ici la variable environnementale DEBIAN_PRIORITY=low dans cette commande d’installation. Le processus d’installation vous demandera alors de configurer certaines options supplémentaires :

      • sudo DEBIAN_PRIORITY=low apt install postfix

      Ce processus d’installation ouvrira une série d’invites interactives. Pour les besoins de ce tutoriel, utilisez les informations suivantes pour remplir vos invites :

      • General type of mail configuration?​​​​​​ : Pour cela, choisissez Internet Site, car cela correspond à nos besoins en matière d’infrastructure.
      • System mail name : c’est le domaine de base utilisé pour construire une adresse électronique valide lorsque seule la partie compte de l’adresse est indiquée. Par exemple, disons que le nom d’hôte de votre serveur est mail.example.com. Vous voudrez probablement définir le system mail name (nom de courrier du système) comme suit : example.com afin que, compte tenu du nom d’utilisateur user1, Postfix utilise l’adresse user1@example.com.
      • Root and postmaster mail recipient : Il s’agit du compte Linux qui fera suivre le courrier adressé à root@ et postmaster@. Utilisez pour cela votre compte principal. Dans le cas présent, il s’agit de sammy. 
      • Other destinations to accept mail for​​​​​​ : Ceci définit les destinations du courrier que cette instance de Postfix acceptera. Si vous avez besoin d’ajouter d’autres domaines que ce serveur sera chargé de recevoir, ajoutez-les ici. Dans le cas contraire, le domaine par défaut sera suffisante.
      • Force synchronous updates on mail queue? : Puisque vous utilisez probablement un système de fichiers journalisés, acceptez No ici.
      • Local Networks : Il s’agit de la liste des réseaux pour lesquels votre serveur de messagerie est configuré en vue de la retransmission des messages. La valeur par défaut fonctionnera pour la plupart des scénarios. Si vous choisissez de la modifier, veillez toutefois à être très restrictif en ce qui concerne la portée du réseau.
      • Mailbox size limit : Elle peut être utilisée pour limiter la taille des messages. En la mettant à 0, on désactive toute restriction de taille.
      • Local address extension character : C’est le caractère qui peut être utilisé pour séparer la partie régulière de l’adresse d’une extension (utilisé pour créer des alias dynamiques). La valeur par défaut, +, sera utilisée pour les besoins de ce tutoriel.
      • Internet protocols to use : Choisissez de restreindre ou non la version IP que Postfix prend en charge. Pour les besoins de ce tutoriel, choisissez all.

      Pour être explicite, voici les paramètres utilisés dans ce guide :

      • General type of mail configuration?​​​​​​ : Internet Site
      • System mail name : example.com (pas mail.example.com) 
      • Root and postmaster mail recipient : Le nom d’utilisateur de votre compte Linux principal (sammy dans nos exemples) 
      • Other destinations to accept mail for : $myhostname, example.com, mail.example.com, localhost.example.com, localhost
      • Force synchronous updates on mail queue? : No
      • Local networks : 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
      • Mailbox size limit : 0
      • Local address extension character : +
      • Internet protocols to use : all

      Note : Si vous avez besoin de modifier ces paramètres ultérieurement, vous pourrez le faire en tapant :

      • sudo dpkg-reconfigure postfix

      Les invites seront pré-remplies avec vos réponses précédentes.

      Lorsque le processus d’installation est terminé, vous êtes prêt à effectuer quelques mises à jour de votre configuration Postfix.

      Étape 2 – Modification de la configuration de Postfix

      Vous pouvez maintenant ajuster certains paramètres que le processus d’installation du package ne vous a pas demandés. De nombreux paramètres de configuration de Postfix sont définis dans le fichier /etc/postfix/main.cf. Plutôt que de modifier directement ce fichier, vous pouvez utiliser la commande postconf de Postfix pour interroger ou définir les paramètres de configuration.

      Pour commencer, définissez l’emplacement de la messagerie de votre non-root user Ubuntu. Dans ce guide, nous utiliserons le format Maildir qui sépare les messages en fichiers individuels ; ceux-ci sont ensuite déplacés entre les répertoires en fonction de l’action de l’utilisateur. L’autre option (qui n’est pas couverte par ce guide) est le format mbox, qui stocke tous les messages dans un seul fichier. 

      Définissez la variable home_mailbox sur Maildir/. Plus tard, vous créerez une structure de répertoires sous ce nom dans le répertoire principal de votre utilisateur. Configurez home_mailbox en tapant :

      • sudo postconf -e 'home_mailbox= Maildir/'

      Ensuite, fixez l’emplacement de virtual_alias_maps,qui met en correspondance des comptes de courrier électronique arbitraires avec des comptes du système Linux. Exécutez la commande suivante, qui associe l’emplacement du tableau à un fichier de base de données de hachage nommé /etc/postfix/virtual : 

      • sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

      Maintenant que vous avez défini l’emplacement du fichier de cartes virtuelles dans votre fichier main.cf vous pouvez créer le fichier lui-même et commencer à associer les comptes de courrier électronique aux comptes d’utilisateurs sur votre système Linux. Créez le fichier avec votre éditeur de texte préféré ; dans cet exemple, nous utiliserons nano : 

      • sudo nano /etc/postfix/virtual

      Indiquez les adresses pour lesquelles vous souhaitez accepter le courrier électronique, suivies d’un espace et de l’utilisateur Linux auquel vous souhaitez que le courrier soit distribué.

      Par exemple, si vous souhaitez accepter un courrier électronique à contact@example.com et admin@example.com et que vous aimeriez que ces courriels soient transmis à l’utilisateur Linux sammy , vous pouvez configurer votre fichier comme suit : 

      /etc/postfix/virtual

      contact@example.com sammy
      admin@example.com sammy
      

      Une fois que vous avez mis en correspondance toutes les adresses avec les comptes de serveur appropriés, enregistrez et fermez le fichier. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis sur ENTER.

      Appliquez la cartographie en tapant :

      • sudo postmap /etc/postfix/virtual

      Relancez le processus Postfix pour vous assurer que tous vos changements ont été appliqués :

      • sudo systemctl restart postfix

      En supposant que vous ayez suivi le guide prérequis de configuration initiale du serveur, vous aurez configuré un pare-feu avec UFW. Ce pare-feu bloquera par défaut les connexions externes aux services de votre serveur, sauf si ces connexions sont explicitement autorisées. Vous devrez donc ajouter une règle de pare-feu si vous souhaitez autoriser une exception pour Postfix.

      Vous pouvez autoriser les connexions au service en tapant :

      Avec cela, Postfix est configuré et prêt à accepter des connexions externes. Cependant, vous n’êtes pas encore prêt à le tester avec un client de messagerie. Avant de pouvoir installer un client et l’utiliser pour interagir avec le courrier livré à votre serveur, vous devrez apporter quelques modifications à la configuration de votre serveur Ubuntu.

      Étape 3 – Installation du client de messagerie et initialisation de la structure Maildir

      Afin d’interagir avec le courrier distribué, cette étape vous guidera à travers le processus d’installation du package snail. Ceci est une variante riche en fonctionnalités du client BSD xmail qui peut gérer correctement le format Maildir.

      Toutefois, avant d’installer le client, il serait prudent de s’assurer que votre variable d’environnement MAIL est correctement définie. s-nail va rechercher cette variable pour savoir où trouver le courrier pour votre utilisateur.

      Pour s’assurer que la variable MAIL est définie quelle que soit la manière dont vous accédez à votre compte – que ce soit par ssh, su, su -, ou sudo, par exemple, vous devrez définir la variable dans le fichier /etc/bash.bashrc et l’ajouter à un fichier dans /etc/profile.d afin de vérifier qu’il est configuré par défaut pour tous les utilisateurs.

      Pour ajouter la variable à ces fichiers, tapez :

      • echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

      Pour lire la variable dans votre session actuelle, vous devez vous procurer le fichier /etc/profile.d/mail.sh : 

      • source /etc/profile.d/mail.sh

      Une fois cette opération terminée, installez le client s-nail de messagerie avec APT :

      Avant de lancer le client, il y a quelques paramètres que vous devez ajuster. Ouvrez le fichier /etc/s-nail.rc dans votre éditeur :

      Au bas du fichier, ajoutez les options suivantes :

      /etc/s-nail.rc

      . . .
      set emptystart
      set folder=Maildir
      set record=+sent
      

      Voici ce que font ces lignes :

      • set emptystart : permet au client de s’ouvrir même avec une boîte de réception vide
      • set folder=Maildir : définit le répertoire Maildir sur la variable interne de folder
      • set record=+sent crée un fichier mbox sent pour stocker le courrier envoyé dans n’importe quel répertoire défini comme variable de folder, dans ce cas Maildir

      Enregistrez et fermez le fichier lorsque vous avez terminé. Vous êtes maintenant prêt à initialiser la structure Maildir de votre système.

      Un moyen rapide de créer la structure Maildir dans votre répertoire personnel consiste à de vous envoyer un courriel avec la commande s-nail. Comme le fichier sent ne sera disponible qu’une fois le Maildir créé, vous devez désactiver l’écriture dans ce mail initial. Faites-le en passant l’option -Snorecord.

      Envoyez le courriel en envoyant une chaîne de caractères à la commande s-nail. Ajustez la commande pour marquer votre utilisateur Linux comme destinataire :

      • echo 'init' | s-nail -s 'init' -Snorecord sammy

      Note : Vous pouvez obtenir la réponse suivante :

      Output

      Can't canonicalize "/home/sammy/Maildir"

      Ceci est normal et ne peut apparaître que lors de l’envoi de ce premier message.

      Vous pouvez vérifier que le répertoire a été créé en recherchant votre~répertoire ~/Maildir :

      Vous verrez que la structure de répertoires a été créée et qu’un nouveau fichier de message se trouve dans le répertoire ~/Maildir/new :

      Output

      /home/sammy/Maildir/: cur new tmp /home/sammy/Maildir/cur: /home/sammy/Maildir/new: 1463177269.Vfd01I40e4dM691221.mail.example.com /home/sammy/Maildir/tmp:

      Maintenant que la structure de répertoires a été créée, vous êtes prêt à tester le client s-nail en visualisant le message init que vous avez envoyé et en envoyant un message à une adresse électronique externe.

      Étape 5 – Test du client

      Pour ouvrir le client, lancez la commande s-nail :

      Sur votre console, vous verrez une boîte de réception rudimentaire avec le message init en attente :

      Output

      s-nail version v14.9.15. Type `?' for help "/home/sammy/Maildir": 1 message 1 new >N 1 [email protected] 2020-05-19 15:40 14/392 init

      Appuyez sur ENTER pour afficher le message :

      Output

      [-- Message 1 -- 14 lines, 369 bytes --]: From [email protected] Tue May 19 15:40:48 2020 Date: Tue, 19 May 2020 15:40:48 +0000 To: [email protected] Subject: init Message-Id: <[email protected]> From: [email protected] init

      Vous pouvez revenir à la liste des messages en tapant h, puis sur ENTER :

      Output

      >R 1 [email protected] 2020-05-19 15:40 14/392 init

      Remarquez que le message a maintenant un état R, indiquant qu’il a été lu.

      Ce message n’étant pas très utile, vous pouvez le supprimer en appuyant sur d, puis sur ENTER :

      Pour revenir au terminal, tapez q et ensuite ENTER : 

      En guise de test final, vérifiez si s-nail est capable d’envoyer correctement des messages électroniques. Pour ce faire, vous pouvez introduire le contenu d’un fichier texte dans le processus s-nail, comme vous l’avez fait avec le message init que vous avez envoyé à l’étape précédente.

      Commencez par écrire un message test dans un éditeur de texte :

      À l’intérieur, entrez un texte que vous souhaitez envoyer :

      ~/test_message

      Hello,
      
      This is a test.  Please confirm receipt!
      

      Enregistrez et fermez le fichier après avoir écrit votre message.

      Ensuite, utilisez la commande cat pour transmettre le message au processus s-nail. Vous pouvez le faire avec l’exemple suivant, qui utilise ces options :

      • -s : Ceci définit l’objet du courriel
      • -r : Une modification facultative du champ « De : » du courriel. Par défaut, l’utilisateur Linux avec lequel vous êtes connecté sera utilisé pour remplir ce champ. L’option -r vous permet de remplacer cette adresse par une adresse valide, telle que celle que vous avez définie dans le fichier /etc/postfix/virtual. À titre d’exemple, la commande suivante utilise [email protected]

      Veillez également à remplacer user@email.com par une adresse électronique valide à laquelle vous avez accès : 

      • cat ~/test_message | s-nail -s 'Test email subject line' -r [email protected] user@email.com

      Ensuite, naviguez jusqu’à la boîte de réception de l’adresse électronique à laquelle vous avez envoyé le message. Vous y verrez presque immédiatement votre message en attente.

      Note : Si le message n’est pas dans votre boîte de réception, il a peut-être été acheminé vers votre dossier d’indésirables.

      Vous pouvez consulter vos messages envoyés dans votre client s-nail. Relancez le client interactif :

      Depuis le client de messagerie, visualisez vos messages envoyés en tapant :

      Vous verrez une sortie de ce type :

      Output

      +[/home/sammy/Maildir/]sent: 1 message 1 new ▸N 1 [email protected] 2020-05-19 15:47 12/297 Test email subject line

      Vous pouvez gérer le courrier envoyé en utilisant les mêmes commandes que celles que vous utilisez pour le courrier entrant.

      Conclusion

      Vous avez maintenant configuré Postfix sur votre serveur Ubuntu 20.04. La gestion des serveurs de courrier électronique peut être une tâche difficile pour les nouveaux administrateurs système, mais avec cette configuration, vous devriez disposer de suffisamment de fonctionnalités de courrier électronique MTA pour vous lancer.



      Source link