One place for hosting & domains

      Comment

      eBook Comment coder dans Go


      Télécharger le eBook complet

      eBook Comment coder dans Go au format EPUB

      eBook Comment coder dans Go au format PDF

      Présentation de l’eBook

      Cet eBook a été conçu pour vous introduire à l’écriture de programmes avec le langage de programmation Go. Vous apprendez à écrire des outils et des applications utiles exécutables sur des serveurs distants ou des systèmes locaux Windows, macOS et Linux dans le cadre du développement.

      Cet eBook s’inspire de la série de tutoriels Comment coder dans Go, que vous trouverez dans DigitalOcean Community. Les sujets traités sont les suivants :

      1. Installer et configurer un environnement de développement local Go sur les systèmes Windows, macOS et Linux

      2. Concevoir vos programmes avec une logique conditionnelle, et notamment les instructions de commutation permettant de contrôler le flux du programme

      3. Définir vos propres structures de données et créer des interfaces pour le code réutilisable

      4. Écrire des fonctions personnalisées de gestion des erreurs

      5. Développer et installer vos programmes Go afin qu’ils puissent fonctionner sur différents systèmes d’exploitation et sur différentes architectures de processeur

      6. Utiliser des balises pour transférer des arguments à vos programmes, réécrire les options par défaut

      Chaque chapitre peut être lu indépendamment des autres ou être utilisé à titre de référence. Vous pouvez également suivre l’intégralité des chapitres du début à la fin. N’hésitez pas à passer au(x) chapitre(s) le(s) plus adapté(s) à vos objectifs au cours de votre apprentissage de Go avec cet eBook.

      Télécharger le eBook

      Vous pouvez télécharger le eBook au format EPUB ou PDF en suivant les liens ci-dessous.

      Télécharger le eBook complet

      eBook Comment coder dans Go au format EPUB

      eBook Comment coder dans Go au format PDF

      Si, une fois que vous aurez atteint la fin de cet eBook, vous souhaitez en savoir plus sur la manière de construire des outils et des applications avec Go, consultez la section Go de DigitalOcean Community.



      Source link

      Comment déployer Laravel 7 et MySQL sur Kubernetes en utilisant Helm


      L’auteur a choisi le Diversity in Tech Fund​​​​​ pour recevoir un don dans le cadre du programme Write for DOnations.

      Introduction

      Laravel est l’une des infrastructures d’application PHP les plus populaires aujourd’hui. Son déploiement se fait généralement avec une base de données MySQL, mais il peut être configuré pour utiliser une variété d’options de stockage de données de backend. Laravel est fier de profiter des nombreuses fonctionnalités modernes de PHP et de son vaste écosystème complet de package.

      Kubernetes est une plate-forme d’orchestration de conteneurs qui peut être hébergée sur des DigitalOcean Kubernetes clusters afin de simplifier la gestion et la configuration de conteneurs en production. Helm est un gestionnaire de packages Kubernetes qui facilite la configuration et l’installation des services et des pods sur Kubernetes.

      Dans ce guide, vous allez créer une application Laravel PHP, développer votre application dans une image Docker et déployer cette image dans un cluster DigitalOcean Kubernetes en utilisant le LAMP Helm chart​​​.​​ Ensuite, vous configurerez un contrôleur d’entrée pour ajouter SSL et un nom de domaine personnalisé à votre application. Une fois terminé, vous disposerez d’une application Laravel fonctionnelle connectée à une base de données MySQL qui s’exécute sur un cluster Kubernetes.

      Conditions préalables

      • Docker installé sur la machine à partir de laquelle vous accédez à votre cluster. Vous pouvez trouver des instructions détaillées sur l’installation de Docker pour la plupart des distributions Linux ici ou sur le site web de Docker pour d’autres systèmes d’exploitation.
      • Un compte sur Docker Hub pour stocker les images Docker que vous allez créer pendant ce tutoriel.
      • Un cluster DigitalOcean Kubernetes 1.17+ avec votre connexion configurée sur kubectl par défaut. Pour apprendre à créer un cluster Kubernetes sur DigitalOcean, voir notre Kubernetes Quickstart. Pour apprendre à se connecter au cluster, consultez Comment se connecter à un cluster DigitalOcean Kubernetes.
      • Le gestionnaire de paquets Helm 3 installé sur votre machine locale. Exécutez la première étape et ajoutez le référentiel stable à partir de la deuxième étape du tutoriel Comment installer un logiciel sur des clusters Kubernetes avec le Helm 3 Package Manager.
      • Un nom de domaine entièrement enregistré avec un enregistrement A disponible. Ce tutoriel utilisera your_domain. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom, ou utiliser le bureau d’enregistrement de domaine de votre choix. Pour le moment, ne vous souciez pas d’associer l’enregistrement A de votre domaine à un IP. Une fois que vous serez à l’étape 5 et que votre contrôleur Ingress est opérationnel, vous connecterez alors your_domain à l’IP qui convient.

      Étape 1 — Création d’une nouvelle application Laravel

      Au cours de cette étape, vous utiliserez Docker pour créer une nouvelle application Laravel 7. Cependant, vous devriez pouvoir suivre le même processus avec une application Laravel existante qui utilise MySQL comme base de données de sauvegarde. La nouvelle application que vous créez vérifiera que Laravel est bien connecté à la base de données et affichera le nom de la base de données.

      Tout d’abord, allez dans votre répertoire principal. Ensuite, créez une nouvelle application Laravel à l’aide d’un conteneur Docker composer :

      • cd ~
      • docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel laravel-kubernetes

      Une fois le conteneur créé et tous les paquets Composer installés, vous devriez voir une nouvelle installation de Laravel dans votre répertoire actuel sous le nom de laravel-kubernetes/. Allez dans ce dossier :

      Vous exécuterez le reste des commandes de ce tutoriel à partir de là.

      Cette application a pour rôle de tester votre connexion à la base de données et d’afficher son nom dans votre navigateur. Pour tester la connexion à la base de données, ouvrez le fichier ./resources/views/welcome.blade.php dans un éditeur de texte :

      • nano ./resources/views/welcome.blade.php

      Trouvez la section <div class="links">...</div> et remplacez son contenu par ce qui suit :

      ./resources/views/welcome.blade.php

      ...
      <div class="links">
         <strong>Database Connected: </strong>
          @php
              try {
                  DB::connection()->getPDO();
                  echo DB::connection()->getDatabaseName();
                  } catch (Exception $e) {
                  echo 'None';
              }
          @endphp
      </div>
      ...
      

      Enregistrez et fermez le fichier.

      Voilà l’intégralité de la personnalisation que vous devez apporter à l’application Laravel par défaut dans le cadre de ce tutoriel. Une fois terminé, ce bref extrait de PHP testera votre connexion à la base de données et affichera le nom de la base de données sur l’écran de démarrage de Laravel dans votre navigateur web.

      À l’étape suivante, vous utiliserez Docker pour créer une image contenant cette application Laravel et Docker Compose afin de tester son exécution locale et sa connexion à une base de données MySQL.

      Étape 2 — Conteneurisation de votre application Laravel

      Maintenant que vous avez créé une nouvelle application Laravel, vous devez créer votre code sur une image Docker, puis tester l’image avec Docker Compose. Bien que ce tutoriel ait pour objectif de vous apprendre à déployer votre application sur un cluster Kubernetes, Docker Compose est un moyen pratique de tester votre image et votre configuration Docker localement avant de l’exécuter dans le cloud. Cette boucle de rétroaction rapide peut s’avérer très utile pour effectuer et tester de petits changements.

      Tout d’abord, en utilisant nano ou votre éditeur de texte préféré, créez un fichier à la racine de votre application Laravel que vous appelerez Dockerfile :

      Ajoutez le contenu suivant. Docker utilisera ce fichier pour créer votre code dans une image :

      ./Dockerfile

      FROM php:7.4-apache
      
      # Install packages
      RUN apt-get update && apt-get install -y 
          git 
          zip 
          curl 
          sudo 
          unzip 
          libicu-dev 
          libbz2-dev 
          libpng-dev 
          libjpeg-dev 
          libmcrypt-dev 
          libreadline-dev 
          libfreetype6-dev 
          g++
      
      # Apache configuration
      ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
      RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
      RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
      RUN a2enmod rewrite headers
      
      # Common PHP Extensions
      RUN docker-php-ext-install 
          bz2 
          intl 
          iconv 
          bcmath 
          opcache 
          calendar 
          pdo_mysql
      
      # Ensure PHP logs are captured by the container
      ENV LOG_CHANNEL=stderr
      
      # Set a volume mount point for your code
      VOLUME /var/www/html
      
      # Copy code and run composer
      COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
      COPY . /var/www/tmp
      RUN cd /var/www/tmp && composer install --no-dev
      
      # Ensure the entrypoint file can be run
      RUN chmod +x /var/www/tmp/docker-entrypoint.sh
      ENTRYPOINT ["/var/www/tmp/docker-entrypoint.sh"]
      
      # The default apache run command
      CMD ["apache2-foreground"]
      

      Enregistrez et fermez le fichier.

      Ce Dockerfile commence avec le PHP 7.4 Apache Docker Image que se trouve sur Docker Hub, puis installe plusieurs des paquets Linux qui sont généralement nécessaires aux applications Laravel. Ensuite, il crée des fichiers de configuration Apache et active les réécritures d’en-tête. Le Dockerfile installe plusieurs extensions PHP communes et ajoute une variable d’environnement afin que les journaux de Laravel soient bien acheminés vers le conteneur via stderr. Cela vous permettra de consulter les journaux Laravel en personnalisant vos journaux Docker Compose ou Kubernetes.

      Enfin, le Dockerfile copie tous les codes de votre application Laravel sur /var/www/tmp et installe les dépendances Composer. Il définit ensuite un ENTRYPOINT, mais vous aurez besoin de créer ce fichier, ce que nous allons faire ensuite.

      Dans le répertoire racine de votre projet, créez un nouveau fichier que vous appellerez docker-entrypoint.sh. Ce fichier s’exécutera lorsque votre conteneur sera exécuté localement ou dans le cluster Kubernetes. Il copiera ensuite votre code d’application Laravel du répertoire /var/www/tmp dans /var/www/html où Apache sera capable de le servir.

      • nano ./docker-entrypoint.sh

      Maintenant, ajoutez le script suivant :

      ./docker-entrypoint.sh

      #!/bin/bash
      
      cp -R /var/www/tmp/. /var/www/html/
      chown -R www-data:www-data /var/www/html
      
      exec "$@"
      

      La ligne finale, exec "$@" indique au shell d’exécuter toute commande ensuite passée à titre d’argument de l’entrée. Ceci est important car Docker doit continuer à exécuter la commande d’exécution d’Apache (apache2-foreground) une fois ce script exécuté. Enregistrez et fermez le fichier.

      Ensuite, créez un fichier .dockerignore dans le répertoire racine de votre application. Lors de la création de votre image Docker, ce fichier veillera à ce qu’elle ne soit pas polluée par des paquets ou des fichiers d’environnement qui ne devraient pas y être copiés :

      ./.dockerignore

      .env
      /vendor
      

      Enregistrez et fermez le fichier.

      Avant de pouvoir exécuter votre application localement avec Docker Compose, vous devez créer un dernier fichier nommé docker-compose.yml. Mais, lors de la configuration de ce fichier YAML, vous devez saisir la APP_KEY générée par Laravel lors de l’installation. Trouvez-la en ouvrant et en faisant une recherche dans le fichier . /.env ou en exécutant les commandes chat et grep suivantes :

      Vous verrez un résultat similaire à ce qui suit :

      Output

      APP_KEY=base64:0EHhVpgg ... UjGE=

      Copiez votre clé dans votre presse-papiers. Veillez à bien inclure le préfixe base64: Maintenant, créez le fichier docker-compose.yml dans le répertoire racine de votre application :

      • nano ./docker-compose.yml

      Ici, nous allons inclure l’image PHP de votre application Laravel ainsi qu’un conteneur MySQL pour exécuter votre base de données. Ajoutez le contenu suivant :

      ./docker-compose.yml

      version: '3.5'
      services:
        php:
          image: your_docker_hub_username/laravel-kubernetes:latest
          restart: always
          ports:
            - 8000:80
          environment:
            - APP_KEY="your_laravel_app_key"
            - APP_ENV=local
            - APP_DEBUG=true
            - DB_PORT=3306
            - DB_HOST=mysql
            - DB_DATABASE
            - DB_USERNAME
            - DB_PASSWORD
        mysql:
          image: mysql:5.7
          restart: always
          environment:
            - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
            - MYSQL_DATABASE=${DB_DATABASE}
            - MYSQL_USER=${DB_USERNAME}
            - MYSQL_PASSWORD=${DB_PASSWORD}
      

      Utilisez la variable APP_KEY que vous avez copiée dans votre presse-papiers pour la variable your_laravel_app_key et utilisez votre nom d’utilisateur Docker Hub pour la variable your_docker_hub_username. Enregistrez et fermez le fichier.

      Vous allez créer la première image localement en utilisant docker build. La deuxième image est l’image officielle de MySQL Docker, disponible sur Docker Hub. Toutes deux nécessitent plusieurs variables d’environnement que vous allez inclure lors de l’exécution des conteneurs.

      Pour créer l’image Docker qui contient votre application Laravel, exécutez la commande suivante. Veillez à bien remplacer your_docker_hub_username par votre nom d’utilisateur ou le nom d’utilisateur de votre équipe dans Docker Hub où cette image sera sauvegardée :

      • docker build -t your_docker_hub_username/laravel-kubernetes:latest .

      Ensuite, vous pouvez exécuter les deux conteneurs avec Docker Compose et les identifiants de base de données nécessaires :

      • DB_ROOT_PASSWORD=rootpassword DB_DATABASE=local_db DB_USERNAME=admin DB_PASSWORD=password docker-compose up -d

      Au besoin, vous pouvez modifier les quatre variables d’environnement utilisées ici (DB_ROOT_PASSWORD, DB_DATABASE, DB_USERNAME, DB_PASSWORD). Cependant, étant donné vous testez votre application que localement, inutile de les sécuriser pour le moment.

      Il vous faudra près de 30 secondes pour que votre base de données MySQL soit initialisée et que vos conteneurs soient prêts. Une fois que cela est fait, vous pouvez consulter votre application Laravel sur votre machine sur localhost:8000.

      Exécution locale de l'application Laravel avec Docker Compose

      Votre application PHP se connectera à votre base de données MySQL. Une fois connecté, vous verrez apparaître le texte « Database Connected: local_db » apparaître sous le logo Laravel.

      Maintenant que vous avez testé votre image Docker localement avec Docker Compose, vous pouvez arrêter les conteneurs en exécutant docker-compose down :

      Dans la section suivante, vous allez pousser votre image Docker sur Docker Hub afin que votre chart Helm puisse l’utiliser et déployer votre application dans votre cluster Kubernetes.

      Étape 3 — Poussez votre image Docker dans Docker Hub

      Votre code doit être disponible dans un registre de conteneurs pour que le chart Helm LAMP que vous utiliserez puisse le déployer sur Kubernetes. Bien que vous puissiez pousser votre image dans un registre privé ou autohébergé, aux fins de ce tutoriel, vous utiliserez un registre Docker public et gratuit sur Docker Hub.

      Accédez à votre compte dans Docker Hub en utilisant votre navigateur web. Créez ensuite un nouveau référentiel nommé laravel-kubernetes.

      Création d'un nouveau référentiel dans Docker Hub

      Si vous n’êtes pas connecté à Docker Hub depuis votre machine locale, vous devez ensuite vous y connecter. Vous pouvez le faire grâce à la ligne de commande suivante :

      • docker login -u your_docker_hub_username

      Saisissez vos identifiants de connexion lorsque vous serez invité à le faire. Il est généralement nécessaire de le faire qu’une seule fois par machine. En effet, Docker enregistrera vos identifiants dans ~/.docker/config.json​​​ dans votre répertoire personnel.

      Enfin, poussez votre image dans Docker Hub :

      • docker push your_docker_hub_username/laravel-kubernetes:latest

      En fonction de la vitesse de votre connexion, le téléchargement de votre application peut prendre quelques minutes. Cependant, une fois Docker terminé, vous verrez un hachage cryptographique et la taille de votre image dans le terminal. Elle ressemblera à cela :

      Output

      latest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

      Maintenant que votre application Laravel est conteneurisée et que vous avez poussé une image dans Docker Hub, vous pouvez utiliser l’image dans un déploiement de chart Helm ou Kubernetes. Au cours de la prochaine étape, vous allez configurer des valeurs personnalisées en fonction du chart LAMP Helm et le déployer dans votre cluster DigitalOcean Kubernetes.

      Étape 4 — Configuration et déploiement de l’application avec chart LAMP Helm

      Helm propose un certain nombre de Charts pour vous aider à configurer des applications Kubernetes en utilisant des combinaisons d’outils prédéfinies. Même si vous pouvez écrire vos propres fichiers de service Kubernetes pour effectuer un déploiement similaire, dans cette section vous verrez que l’utilisation d’un chart Helm nécessite beaucoup moins de configuration.

      Tout d’abord, vous aurez besoin d’un répertoire pour y stocker tous vos fichiers de configuration Helm. Créez un nouveau répertoire dans la racine de votre projet Laravel que vous nommerez helm/ :

      Dans le répertoire helm/, vous allez créer deux nouveaux fichiers : values.yml et secrets.yml. Commencez par créer et ouvrir values.yml :

      Le fichier values.yml comprendra des options de configuration non secrètes qui remplaceront les valeurs par défaut dans le chart LAMP Helm. Ajoutez les configurations suivantes, tout en veillant bien à remplacer your_docker_hub_username par votre nom d’utilisateur :

      ./helm/values.yml

      php:
        repository: "your_docker_hub_username/laravel-kubernetes"
        tag: "latest"
        fpmEnabled: false
        envVars:
          - name: APP_ENV
            value: production
          - name: APP_DEBUG
            value: false
          - name: DB_PORT
            value: 3306
          - name: DB_HOST
            value: localhost
      

      Enregistrez et fermez le fichier.

      Maintenant, créez un fichier secrets.yml :

      secrets.yml ne sera pas archivé dans le contrôle de version. Il contiendra des informations de configuration sensibles comme votre mot de passe et votre clé d’app Laravel. Ajoutez les configurations suivantes, en les ajustant au besoin pour qu’elles soient adaptées à vos identifiants :

      ./helm/secrets.yml

      mysql:
        rootPassword: "your_database_root_password"
        user: your_database_user
        password: "your_database_password"
        database: your_database_name
      
      php:
        envVars:
          - name: APP_KEY
            value: "your_laravel_app_key"
          - name: DB_DATABASE
            value: your_database_name
          - name: DB_USERNAME
            value: your_database_user
          - name: DB_PASSWORD
            value: "your_database_password"
      

      Veillez à utiliser des combinaisons de noms d’utilisateur et de mot de passe difficiles à trouver pour votre base de données de production. Utilisez la même your_laravel_app_key que celle indiquée ci-dessus. Sinon, ouvrez une nouvelle fenêtre et générez un nouveau fichier en exécutant la commande suivante. Vous pouvez ensuite copier la nouvelle valeur configurée par Laravel dans votre fichier .env :

      • docker run --rm -v $(pwd):/app php:cli php /app/artisan key:generate

      Sauvegardez et fermez secrets.yml​​​​.

      Ensuite, afin d’empêcher votre fichier secrets.yml d’être intégré à l’image Docker ou d’être sauvegardé dans le contrôle de version, veillez à bien ajouter la ligne suivante à la fois dans vos fichiers .dockerignore et .gitignore. Ouvrez et ajoutez /helm/secrets.yml dans chaque fichier, ou exécutez la commande suivante pour ajouter les deux :

      • echo '/helm/secrets.yml' >> ./.dockerignore && echo '/helm/secrets.yml' >> ./.gitignore

      Maintenant que vous avez créé les fichiers de configuration Helm pour votre application et l’image Docker, vous pouvez installer ce chart Helm comme une nouvelle version dans votre cluster Kubernetes. Installez votre chart dans le répertoire racine de votre application :

      • helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

      Vous verrez un résultat similaire à ce qui suit :

      Output

      NAME: laravel-kubernetes LAST DEPLOYED: Mon May 18 13:21:20 2020 NAMESPACE: default STATUS: deployed REVISION: 1

      Il faudra une à deux minutes pour que votre application soit disponible. Cependant, vous pouvez exécuter cette commande pour surveiller les services Kubernetes dans votre cluster :

      Recherchez le nom de votre application :

      Output

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) laravel-kubernetes-lamp LoadBalancer your_cluster_ip your_external_ip 80:32175/TCP,3306:32243/TCP

      Lorsque votre nouveau service laravel-kubernetes-lamp affiche une adresse IP sous EXTERNAL-IP, vous pouvez consulter your_external_ip pour voir l’application qui est exécutée dans votre cluster Kubernetes. Votre application se connectera à votre base de données. Vous verrez alors le nom de la base de données apparaître sous le logo Laravel, comme ce fut le cas lors de l’exécution locale de votre application dans Docker Compose.

      Exécution de l'application Laravel sous Kubernetes en utilisant le chart LAMP Helm

      L’exécution d’une application web sur une adresse IP non sécurisée est adaptée pour une démonstration de faisabilité. Cependant, votre site web n’est pas prêt à être publié sans certificat SSL et un nom de domaine personnalisé. Avant que vous configuriez cela à l’étape suivante, désinstallez votre version via la ligne de commande suivante :

      • helm delete laravel-kubernetes

      Au cours de la prochaine étape, vous allez étendre cette première configuration Helm pour ajouter un contrôleur Ingress, un certificat SSL et un domaine personnalisé à votre application Laravel.

      Étape 5 — Ajout d’un contrôleur Ingress et SSL à votre cluster Kubernetes

      Dans Kubernetes, un contrôleur Ingress est chargé d’exposer les services de votre application sur Internet. À l’étape précédente, le chart LAMP Helm a créé un équilibreur de charge DigitalOcean et a exposé votre application directement via l’adresse IP de l’équilibreur de charge.

      Vous pourriez résilier SSL et votre nom de domaine directement sur l’équilibreur de charge. Cependant, étant donné que vous travaillez dans Kubernetes, il serait plus pratique de gérer celà au même endroit. Pour plus d’informations sur les contrôleurs Ingress et des détails sur les étapes suivantes, consultez Comment configurer un Ingress Nginx sur DigitalOcean Kubernetes en utilisant Helm.

      Le chart LAMP Helm intègre une option de configuration pour prendre en charge Ingress. Ouvrez votre fichier helm/values.yml :

      Maintenant, ajoutez les lignes suivantes :

      ./helm/values.yml

      ...
      # Use Ingress Controller
      service:
        type: ClusterIP
        HTTPPort: 80
      ingress:
        enabled: true
        domain: your_domain
      

      Cela indique à votre déploiement de ne pas installer d’équilibreur de charge et d’exposer l’application dans le port 80 du cluster Kubernetes où le contrôleur Ingress l’exposera sur Internet. Sauvegardez et fermez values.yml​​​​.

      Maintenant, exécutez la commande helm install que vous avez exécutée précédemment pour que votre application Laravel s’exécute à nouveau. Veillez à exécuter la commande à partir du répertoire racine de votre application :

      • helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

      Ensuite, installez le contrôleur nginx-ingress sur votre cluster Kubernetes en utilisant le contrôleur Nginx Ingress maintenu sous Kubernetes :

      • helm install nginx-ingress stable/nginx-ingress --set controller.publishService.enabled=true

      Après l’installation, vous aurez un résultat similaire à ce qui suit :

      Output

      NAME: nginx-ingress LAST DEPLOYED: Mon May 18 13:28:34 2020 NAMESPACE: default STATUS: deployed REVISION: 1

      Vous avez également besoin d’une Ressource Ingress pour exposer le déploiement de votre application Laravel. Créez un nouveau fichier dans le répertoire racine de votre application que vous nommerez ingress.yml :

      Ce fichier définit l’hôte de votre application, le gestionnaire de certificat SSL, le service de backend et le nom de port de votre application. Ajoutez les configurations suivantes en remplacant your_domain avec le domaine de votre choix :

      ./ingress.yml

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: laravel-kubernetes-ingress
        annotations:
          kubernetes.io/ingress.class: nginx
          cert-manager.io/cluster-issuer: letsencrypt-prod
      spec:
        tls:
          - hosts:
              - your_domain
            secretName: laravel-kubernetes-tls
        rules:
          - host: your_domain
            http:
              paths:
                - backend:
                    serviceName: laravel-kubernetes-lamp
                    servicePort: 80
      

      Enregistrez et fermez le fichier.

      Ensuite, vous deviez installer Cert-Manager et créer un émetteur qui vous permettra de créer des certificats SSL de production en utilisant Let’s Encrypt. Cert-Manager nécessite des Custom Resource Definitions​​​ que vous pouvez appliquer à partir du Cert-Manager repository​​​ en utilisant la ligne de commande suivante :

      • kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

      Cela créera un certain nombre de ressources Kubernetes qui s’afficheront dans la ligne de commande :

      Output

      customresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io create

      Cert-Manager a également besoin d’un namespace pour l’isoler dans votre cluster Kubernetes :

      • kubectl create namespace cert-manager

      Vous verrez ce résultat :

      Output

      namespace/cert-manager created

      Étant donné que le Cert-Manager de Jetstack ne fait pas partie des charts maintenus par Kubernetes, vous aurez également besoin d’ajouter le référentiel Helm Jetstack. Exécutez la commande suivante pour le rendre disponible dans Helm :

      • helm repo add jetstack https://charts.jetstack.io

      Si l’ajout est correctement effectué, vous obtiendrez le résultat suivant :

      Output

      "jetstack" has been added to your repositories

      Maintenant, vous êtes prêt à installer Cert-Manager dans l’espace de nommage cert-manager​​​ de votre cluster Kubernetes :

      • helm install cert-manager --version v0.15.0 --namespace cert-manager jetstack/cert-manager

      Une fois terminé, vous verrez apparaître un résumé du déploiement similaire à ce qui suit :

      Output

      NAME: cert-manager LAST DEPLOYED: Mon May 18 13:32:08 2020 NAMESPACE: cert-manager STATUS: deployed REVISION: 1

      Le dernier fichier que vous devez ajouter dans le répertoire racine de votre application Laravel est un fichier de configuration de Kubernetes production_issuer.yml. Créez le fichier :

      • nano ./production_issuer.yml

      Maintenant, ajoutez ce qui suit :

      apiVersion: cert-manager.io/v1alpha2
      kind: ClusterIssuer
      metadata:
        name: letsencrypt-prod
      spec:
        acme:
          # Email address used for ACME registration
          email: your_email_address
          server: https://acme-v02.api.letsencrypt.org/directory
          privateKeySecretRef:
            # Name of a secret used to store the ACME account private key
            name: letsencrypt-prod-private-key
          # Add a single challenge solver, HTTP01 using nginx
          solvers:
            - http01:
                ingress:
                  class: nginx
      

      Enregistrez et fermez le fichier.

      Let’s Encrypt enverra toutes les notifications importantes et tous les avertissements d’expiration à your_email_address. Veillez donc à bien ajouter une adresse que vous consultez régulièrement. Sauvegardez ce fichier et créez une nouvelle ressource à la fois pour votre ressource Ingress et votre émetteur de production dans votre cluster Kubernetes :

      • kubectl create -f ingress.yml
      • kubectl create -f production_issuer.yml

      Enfin, mettez à jour les enregistrements DNS de votre nom de domaine pour qu’un enregistrement A pointe vers l’adresse IP de votre équilibreur de charge. Pour trouver l’adresse IP de votre contrôleur Ingress, saisissez ce qui suit :

      • kubectl get service nginx-ingress-controller

      Output

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ingress-controller LoadBalancer your_cluster_ip your_external_ip 80:30187/TCP,443:31468/TCP 6m10s

      Utilisez l’adresse your_external_ip comme adresse IP de votre Enregistrement A de DNS. Le processus de mise à jour de vos enregistrements DNS varie en fonction de l’endroit où vous gérez vos noms de domaine et l’hébergement DNS. Cependant, si vous utilisez DigitalOcean, vous pouvez consulter notre guide Comment gérer vos enregistrements DNS.

      Une fois que vos enregistrements DNS sont mis à jour et votre certificat SSL est configuré, votre application sera disponible sur your_domain et SSL sera activée.

      L'application Laravel avec terminaison SSL et un nom de domaine personnalisé

      Même si votre application et votre base de données PHP sont déjà connectées, vous aurez encore besoin de migrer la base de données. Au cours de la dernière étape, vous verrez comment exécuter des Artisan commands sur votre pod Kubernetes pour migrer la base de données et effectuer d’autres tâches de maintenance communes.

      Étape 6 — Exécution de commandes à distance

      Même si votre application Laravel fonctionne et est connectée à la base de données MySQL dans Kubernetes, vous aurez besoin d’effectuer plusieurs opérations communes sur une nouvelle installation Laravel. Une de ces tâches communes est la migration de base de données.

      Avant que vous puissiez exécuter une commande Artisan sur votre application Laravel, vous devez connaître le nom du pod qui exécute votre conteneur d’application Laravel. En utilisant la ligne de commande suivante, vous pouvez consulter tous les pods de votre cluster Kubernetes :

      Vous verrez un résultat similaire à ce qui suit :

      Output

      NAME READY STATUS RESTARTS AGE laravel-kubernetes-lamp-77fb989b46-wczgb 2/2 Running 0 16m

      Sélectionnez le pod pour votre déploiement laravel-kubernetes-lamp-... Veillez à bien utiliser le nom dans votre résultat et non celui mentionné ci-dessus. Maintenant, vous pouvez y exécuter kubectl exec. Par exemple, exécutez une migration de base de données en utilisant la commande artisan migrate. Vous allez ajouter la balise --force car vous exécutez le pod en production :

      • kubectl exec laravel-kubernetes-lamp-77fb989b46-wczgb -- php artisan migrate --force

      Cette commande générera un résultat :

      Output

      Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.16 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

      Vous avez maintenant déployé correctement Laravel 7 et MySQL dans Kubernetes et exécuté une tâche essentielle de maintenance de la base de données.

      Conclusion

      Dans ce tutoriel, vous avez appris à conteneuriser une application PHP Laravel, à la connecter à une base de données MySQL, à pousser une image Docker contenant votre code sur Docker Hub, puis à utiliser un chart Helm pour la déployer sur un cluster DigitalOcean Kubernetes. Enfin, vous avez ajouté un SSL et un nom de domaine personnalisé et appris à exécuter des outils de ligne de commande sur vos pods en cours d’exécution.

      Par rapport à l’hébergement traditionnel de pile LAMP, Kubernetes et Helm vous offrent un certain nombre d’avantages : extensibilité, échange de services sans connexion directe à votre serveur, outils de mises à jour en roulement et contrôle de votre environnement d’hébergement. Cela dit, la complexité initiale de la conteneurisation et de la configuration rendent le démarrage de votre application assez difficile. En utilisant ce guide comme point de départ, il est plus facile de déployer Laravel sur Kubernetes. À partir de là, vous pourriez envisager d’en apprendre plus sur la puissance de Laravel ou sur l’ajout d’outils de surveillance à Kubernetes (Linkerd, par exemple), que vous pouvez installer manuellement avec notre guide ou avec un DigitalOcean 1-Click​​​.



      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