Comment déployer mon Hexabot en utilisant NGINX ?

Introduction

Cette documentation décrit deux méthodes pour déployer votre projet Hexabot en environnement de production en utilisant NGINX et Let's Encrypt pour le certificat SSL :

Prérequis

Avant de commencer, assurez-vous d'avoir les éléments suivants :

Étape 1 : Exigences du serveur

  • Un serveur exécutant une distribution Linux avec SSH activé.

  • Ces instructions sont basées sur Ubuntu, adaptez-les si nécessaire pour d'autres distributions.

Étape 2 : Installer les logiciels requis

  • Installer Docker

Configurer Docker pour le développement et la production
  • Installer NPM

Configurer Node.js avec NVM

Étape 3 : Configurer le projet Hexabot

  1. Installez l'interface de ligne de commande Hexabot :

npm install -g hexabot-cli
  1. Créer un nouveau projet :

 hexabot create my-chatbot
 cd my-chatbot/

Ou clonez un projet existant :

 git clone [email protected]:YOUR_ORG/my-chatbot.git
 cd my-chatbot/
  1. Configuration de l'environnement :

Pour configurer les variables d'environnement, utilisez la commande suivante :

hexabot init

Cette commande copiera le .env.example fichier vers .env dans le ./docker répertoire si le fichier n'existe pas déjà

  1. Mettez à jour votre .env fichier pour la production, en particulier les éléments suivants :

Nom de la variable
Valeur d'exemple
Description de la variable d'environnement

NODE_ENV

production

Mode d'environnement

APP_DOMAIN

mychatbot.ai

Nom de domaine de l'application

API_ORIGIN

https://mychatbot.ai/api

Le point de terminaison API sera utilisé pour communiquer avec le backend

FRONTEND_BASE_URL

https://mychatbot.ai

Le point de terminaison API sera utilisé pour communiquer avec le frontend

FRONTEND_ORIGIN

http://mychatbot.ai, https://mychatbot.ai

Les origines qui seront acceptées par l'API. Une liste d'origines autorisées pour les requêtes cross-origin

NEXT_PUBLIC_API_ORIGIN

https://mychatbot.ai/api

Point de terminaison API Next.js

JWT_SECRET

346998ba1f171f107433

Secret pour chiffrer le token JWT

SESSION_SECRET

27feaf70d2c78892bf49

Secret pour chiffrer le token de session

HTTPS_ENABLED

true

Paramètre Https

INVITATION_JWT_SECRET

51c8ea00d82eb10ee226

Secret pour chiffrer le token d'invitation

PASSWORD_RESET_JWT_SECRET

5ee97916017176d1ca6c

Secret pour chiffrer le token de réinitialisation de mot de passe

CONFIRM_ACCOUNT_SECRET

80f74dce70e5385bf80b

Secret pour chiffrer le token de confirmation de compte

MONGO_USER

my_mongo_username

Nom d'utilisateur Mongodb

MONGO_PASSWORD

my_mongo_password

Mot de passe Mongodb

AUTH_TOKEN

c97643c1c1e5e9dc5745

Secret pour chiffrer le token NLU

Notez que vous pouvez également ajuster les durées d'expiration par défaut des tokens si nécessaire.

Pour pouvoir envoyer des e-mails, vous devrez configurer le SMTP. Apprenez à configurer les variables d'environnement SMTP en suivant notre guide de configuration SMTP.

Méthode 1 : Utiliser Nginx comme service et Certbot pour le SSL

Étape 1 : Exécutez votre projet Hexabot en mode production :

Si vous partez d'une installation fraîche et n'utilisez pas une sauvegarde de base de données, il est recommandé d'exécuter Hexabot en mode développement la première fois. Cela permet le remplissage automatique des données essentielles dans la base de données.

hexabot start
# Ou inclure des services supplémentaires que vous souhaitez utiliser
hexabot start --services ollama,influxdb

Notez que cette commande démarrera tous les services (api, frontend, mongodb, ...) en tant que conteneurs Docker ainsi que d'autres services optionnels pouvant être fournis.

Étape 2 : Installer Nginx

Le déploiement d'un projet Hexabot en production nécessite de configurer un serveur Web HTTP comme Apache2, HAProxy ou Nginx pour sécuriser les communications via SSL, établir l'accès par nom de domaine, et de nombreuses autres fonctionnalités telles que la limitation de débit par exemple pour aider à se protéger contre les abus et prévenir la surcharge du serveur. Dans ce guide, nous vous accompagnerons à travers une configuration type de serveur Web HTTP en utilisant Nginx et Certbot pour la génération du certificat SSL.

  1. Mettre à jour le système :

sudo apt update
  1. Installer Nginx :

sudo apt install nginx
  1. Vérifier l'installation de Nginx :

nginx -v
  1. Démarrer Nginx :

sudo systemctl start nginx
  1. Vérifier le statut de Nginx :

sudo systemctl status nginx

Étape 3 : Configurer Nginx

  1. Remplacez la configuration du serveur Nginx par la suivante : /etc/nginx/sites-available/default.

server {
    listen 80;
    server_name mychatbot.ai; # Vous devrez mettre à jour ceci pour utiliser votre propre domaine 
    server_tokens off;
    client_max_body_size 20M;

    location / {
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Url-Scheme $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://localhost:8080; # Assurez-vous d'utiliser le port configuré dans le fichier .env
    }

    location /api/ {
        rewrite ^/api/?(.*)$ /$1 break;
        proxy_pass http://localhost:4000; # Assurez-vous d'utiliser le port configuré dans le fichier .env
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-NginX-Proxy false;
        proxy_pass_request_headers on;
    }

    location ~* \.io {
        rewrite ^/api/?(.*)$ /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy false;

        proxy_pass http://localhost:4000; # Assurez-vous d'utiliser le port configuré dans le fichier .env
        proxy_redirect off;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Étape 4 : Générer un certificat SSL avec Certbot

  1. Installer Certbot :

sudo apt install certbot python3-certbot-nginx
  1. Obtenir un certificat SSL :

sudo certbot --nginx
  1. (Optionnel) Automatiser le renouvellement SSL :

sudo crontab -e
  1. Ajoutez la ligne suivante :

0 12 * * * certbot renew --quiet

Étape 5 : Recharger Nginx avec la nouvelle configuration

  1. Tester la syntaxe de la configuration :

sudo nginx -t

Si vous obtenez une erreur, assurez-vous qu'il n'y a pas d'erreur de syntaxe dans /etc/nginx/sites-available/default

  1. Recharger Nginx avec la nouvelle configuration :

sudo systemctl reload nginx

Accédez à votre domaine en HTTPS (par ex. https://mychatbot.ai) pour vérifier si vous avez déployé avec succès votre projet Hexabot en utilisant Nginx ! 🚀🎉. N'hésitez pas à demander de l'aide à la communauté sur notre canal Discord.

Méthode 2 : Utiliser des services Nginx et Certbot conteneurisés (Docker) :

Ce guide vous aidera à configurer Nginx avec SSL en utilisant Docker et Certbot pour votre projet Hexabot.

Étape 1 : Copier les fichiers requis pour Nginx et Certbot conteneurisés

Pour utiliser la version conteneurisée de Nginx et Certbot :

  1. Téléchargez les fichiers suivants depuis le dépôt GitHub de Hexabot :

    • docker/nginx

    • docker/docker-compose.nginx.yml

    • docker/docker-compose.nginx.prod.yml

    • docker/init-letsencrypt.sh

  2. Copiez ces fichiers sous le my-chatbot/docker répertoire de votre projet.

Étape 2 : Initialiser le SSL avec Certbot

  1. Naviguez vers le my-chatbot/docker répertoire :

cd my-chatbot/docker
  1. Optionnel : Si vous souhaitez tester votre configuration sans atteindre les limites de requêtes pour les certificats SSL, définissez la variable staging à 1 dans le init-letsencrypt.sh script avant de l'exécuter :

staging=1

Après avoir confirmé la configuration, remettez la variable staging à 0 pour demander des certificats en production.

  1. Exécutez le init-letsencrypt.sh script :

Assurez-vous de définir la variable APP_DOMAIN à votre nom de domaine d'application dans le.env fichier. Il est également recommandé d'utiliser une adresse e-mail valide, pensez donc à définir la variable SSL_EMAIL également.

APP_DOMAIN=mychatbot.ai
[email protected]

Vous pouvez tester la configuration DNS en exécutant l'une de ces commandes :

nslookup mychatbot.ai

Ou

dig mychatbot.ai

Rendez le init-letsencrypt.sh script exécutable en lui accordant les permissions d'exécution.

chmod +x init-letsencrypt.sh

Vous pourrez maintenant exécuter le script

./init-letsencrypt.sh

Étape 3 : Vérifier le déploiement

Une fois le script terminé, exécutez docker ps vérifiez que vos conteneurs Docker Nginx et Certbot sont démarrés et en cours d'exécution. Accédez à votre instance Hexabot via le domaine que vous avez spécifié (par ex., https://mychatbot.ai) pour vérifier si des certificats SSL ont été générés et sont correctement installés.

Mis à jour

Ce contenu vous a-t-il été utile ?