From a8f3e94826427b153a6ef2dd819695432c20fbe3 Mon Sep 17 00:00:00 2001 From: fabienOVH Date: Tue, 3 Jun 2025 11:15:27 +0200 Subject: [PATCH 1/4] First version --- .../install_n8n_on_vps/guide.fr-fr.md | 270 ++++++++++++++++++ .../install_n8n_on_vps/images/setup_n8n.png | Bin 0 -> 35385 bytes .../install_n8n_on_vps/meta.yaml | 3 + pages/index.md | 1 + 4 files changed, 274 insertions(+) create mode 100644 pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md create mode 100644 pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/images/setup_n8n.png create mode 100644 pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/meta.yaml diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md new file mode 100644 index 00000000000..90abca36e4c --- /dev/null +++ b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md @@ -0,0 +1,270 @@ +--- +title: "Installer N8N sur un VPS OVHcloud" +excerpt: "Apprenez à héberger la plateforme d’automatisation N8N sur un VPS OVHcloud à l’aide de Docker et Caddy" +updated: 2025-06-03 +--- + +## Objectif + +Ce guide vous explique comment installer et exécuter [n8n](https://n8n.io), une plateforme open source d’automatisation de workflows, sur un VPS OVHcloud. L’installation s’appuie sur [Docker](https://www.docker.com/), avec le serveur [Caddy](https://caddyserver.com/) pour gérer automatiquement les certificats SSL. + +## Prérequis + +- Disposer d'un [VPS](https://www.ovhcloud.com/fr/vps/) fonctionnel (Debian 11 ou supérieur recommandé) +- Disposer d'un nom de domaine +- Disposer d'un accès administrateur (sudo) via SSH à votre serveur + +## En pratique + +### Se connecter à votre VPS + +Ouvrez un terminal et connectez-vous à votre VPS avec la commande suivante (en remplaçant `IP_DU_VPS` par la véritable IP) : + +```bash +ssh @IP_VPS +``` + +### Installer Docker et Docker Compose + +Pour déployer N8N via Docker sur un VPS OVHcloud, Docker et Docker Compose doivent être installés. Cette méthode est compatible avec la majorité des distributions proposées par OVHcloud (Debian 11, Debian 12, Ubuntu 22.04...). + +#### Étape 1 - Mettez le système à jour + +```bash +sudo apt update && sudo apt upgrade -y +``` + +#### Étape 2 - Ajouter la clé GPG officielle de Docker + +```bash +sudo apt install -y ca-certificates curl gnupg +sudo install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +``` + +#### Étape 3 - Ajouter le dépôt Docker + +Pour Debian (version 11 et 12) : + +```bash +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +``` + +Pour Ubuntu (version égale ou suppérieure à 22.04) : + +```bash +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +``` + +#### Étape 4 - Installer Docker Engine et Docker Compose Plugin + +```bash +sudo apt update +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + +#### Étape 5 - Vérifier que Docker et Docker Compose fonctionnent + +```bash +docker --version +docker compose version +``` + +### Récupérer le dépôt de configuration N8N + Caddy + +Clonez le dépôt Git officiel contenant une stack Docker prête à l’emploi : + +```bash +git clone https://github.com/n8n-io/n8n-docker-caddy.git +cd n8n-docker-caddy +``` + +> [!primary] +> +> Dans ce guide, le dossier cloné est aussi appelé dossier de données (`DATA_FOLDER`). + +Créez les volumes nécessaires : + +```bash +sudo docker volume create caddy_data +sudo docker volume create n8n_data +``` + +### Ouvrir les ports nécessaires + +Pour que votre VPS accepte les connexions web (HTTP et HTTPS), ouvrez les ports 80 et 443 via UFW (le pare-feu par défaut sur Debian/Ubuntu) : + +```bash +sudo ufw allow OpenSSH +sudo ufw allow 80 +sudo ufw allow 443 +``` + +> [!primary] +> +> Si UFW n’est pas installé, vous pouvez l’installer et l’activer avec : `sudo apt install ufw -y` + +Activez le pare-feu : + +```bash +sudo ufw enable +``` + +Vérifiez l’état du pare-feu : + +```bash +sudo ufw status +``` + +Vous devez voir une sortie similaire à ceci : + +Status: active + +To Action From +-- ------ ---- +80 ALLOW Anywhere +443 ALLOW Anywhere +OpenSSH ALLOW Anywhere +80 (v6) ALLOW Anywhere (v6) +443 (v6) ALLOW Anywhere (v6) +OpenSSH (v6) ALLOW Anywhere (v6) + +### Configurer le fichier `.env` + +Le fichier `.env` permet de définir les paramètres d’environnement nécessaires à N8N et Caddy. Pour le créer : + +```bash +nano .env +``` + +```console +DATA_FOLDER=/home/debian/n8n-docker-caddy +DOMAIN_NAME=exemple.com +SUBDOMAIN=n8n +GENERIC_TIMEZONE=Europe/Paris +SSL_EMAIL=mon-adresse@email.com +``` + +Explications : + +- DATA_FOLDER : chemin absolu vers le dossier où vous avez cloné le dépôt Git (dossier de données). +- DOMAIN_NAME : nom de domaine principal (déjà configuré dans votre zone DNS). +- SUBDOMAIN : sous-domaine pointant vers votre VPS (ex : `n8n.exemple.com`). +- GENERIC_TIMEZONE : fuseau horaire utilisé par défaut (important pour les automatisations). +- SSL_EMAIL : e-mail utilisé pour générer le certificat SSL via Let's Encrypt. + +Assurez-vous que votre sous-domaine pointe bien vers l’adresse IP de votre VPS dans la zone DNS. Pour plus de détails, consultez notre guide « [Éditer une zone DNS OVHcloud](/pages/web_cloud/domains/dns_zone_edit){.external} ». + +Redéployez ensuite la stack Docker pour que la configuration soit prise en compte : + +```bash +sudo docker compose down +sudo docker compose up -d +``` + +### Définir le domaine dans Caddy + +Vous avez deux manières de définir le domaine dans le fichier `Caddyfile` : + +- La modification manuelle est simple et rapide si vous ne comptez faire qu'une seule installation ou modification. +- La génération dynamique via un script est recommandée si vous gérez plusieurs environnements (développement, production, etc.), ou si vous souhaitez automatiser les déploiements à partir d’un fichier `.env`. Cela permet d’éviter les erreurs manuelles et de centraliser la configuration. + +#### Option 1 : Modifier manuellement le fichier `Caddyfile` + +Ouvrez le fichier CaddyFile : + +```bash +nano caddy_config/Caddyfile +``` + +Remplacez le contenu du fichier par : + +```console +n8n..com { + reverse_proxy n8n:5678 { + flush_interval -1 + } +} +``` + +Remplacez `` par votre véritable nom de domaine. + +Relancez Docker : + +```bash +sudo docker compose down +sudo docker compose up -d +``` + +#### Option 2 : Générer dynamiquement le fichier `Caddyfile` + +Créez un fichier à la racine de votre dossier de données (`n8n-docker-caddy` dans notre exemple) : + +```bash +nano generate-caddyfile.sh +``` + +Collez le contenu suivant : + +```console +#!/bin/bash + +# Charge les variables depuis le fichier .env +set -a +source .env +set +a + +# Génére dynamiquement le fichier Caddyfile +cat < caddy_config/Caddyfile +${SUBDOMAIN}.${DOMAIN_NAME} { + reverse_proxy n8n:5678 { + flush_interval -1 + } +} +EOF + +echo "Fichier Caddyfile généré avec succès." +``` + +Rendez le script exécutable : + +```bash +chmod +x generate-caddyfile.sh +``` + +Puis lancez-le : + +```bash +./generate-caddyfile.sh +``` + +Relancez Docker : + +```bash +sudo docker compose down +sudo docker compose up -d +``` + +> [!primary] +> +> Le fichier `caddy_config/Caddyfile` sera écrasé à chaque exécution du script. Ne le mofifiez pas manuellement si vous choisissez cette option. À la place, ajoutez un commentaire du type : `# Ce fichier est généré automatiquement par le script generate-caddyfile.sh`. + +#### Accéder à N8N + +Accédez à N8N dans un navigateur via l'URL `https://n8n.exemple.com/`. Remplacez `n8n.exemple.com` par le domaine réel que vous avez défini. La page suivante s'affiche. + +![Install N8N VPS](images/setup_n8n.png){.thumbnail} + +Une fois la page chargée, vous serez invité à créer le premier utilisateur administrateur de votre instance N8N via le formulaire de configuration. + +### Conclusion + +Vous disposez désormais d’une instance N8N opérationnelle et sécurisée sur votre VPS OVHcloud, avec une gestion automatique des certificats SSL grâce à Caddy. Pour aller plus loin, consultez la [documentation officielle](https://docs.n8n.io/) de N8N pour créer vos premiers workflows. + +## Aller plus loin + +[Éditer une zone DNS OVHcloud](/pages/web_cloud/domains/dns_zone_edit){.external} + +Pour des prestations spécialisées (référencement, développement, etc), contactez les [partenaires OVHcloud](https://partner.ovhcloud.com/fr-ca/directory/) + +Échangez avec notre [communauté d'utilisateurs](/links/community). diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/images/setup_n8n.png b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/images/setup_n8n.png new file mode 100644 index 0000000000000000000000000000000000000000..a44e44b63280df508b31ff6f4a9cf6db9e20a03e GIT binary patch literal 35385 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 literal 0 HcmV?d00001 diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/meta.yaml b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/meta.yaml new file mode 100644 index 00000000000..1ec36a9e63e --- /dev/null +++ b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/meta.yaml @@ -0,0 +1,3 @@ +id: a904b0cd-5ee8-4b12-b8d6-eab2c130d2e2 +full_slug: vps-install-n8n +reference_category: bare-metal-cloud-virtual-private-servers-tutorials \ No newline at end of file diff --git a/pages/index.md b/pages/index.md index 948a8adffb7..aea903fcc00 100644 --- a/pages/index.md +++ b/pages/index.md @@ -278,6 +278,7 @@ + [How to migrate a website from a VPS to a Dedicated Server or a Public Cloud instance](bare_metal_cloud/virtual_private_servers/migrate-to-pci-or-dedicated-server) + [Automating the deployment of your website on your VPS via GitHub Actions](bare_metal_cloud/virtual_private_servers/deploy-website-github-actions) + [Automating the deployment of your website on your VPS via GitLab CI/CD](bare_metal_cloud/virtual_private_servers/deploy-website-gitlab-ci-cd) + + [Installing N8N on an OVHcloud VPS](bare_metal_cloud/virtual_private_servers/install_n8n_on_vps) + [Managed Bare Metal](products/bare-metal-cloud-managed-bare-metal) + [OVHcloud services and options](bare-metal-cloud-managed-bare-metal-ovhcloud-services-and-options) + [Setting up a VPN for OVHcloud Zerto DRP](bare_metal_cloud/managed_bare_metal/zerto-virtual-replication-customer-to-ovhcloud) From d3042da4dc3e8be06e347da55bb3c05d32d94598 Mon Sep 17 00:00:00 2001 From: fabienOVH Date: Tue, 10 Jun 2025 16:16:46 +0200 Subject: [PATCH 2/4] Update guide with Traefik instead of Caddy --- .../install_n8n_on_vps/guide.fr-fr.md | 230 +++++++----------- 1 file changed, 91 insertions(+), 139 deletions(-) diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md index 90abca36e4c..047b2f7af17 100644 --- a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md +++ b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md @@ -1,12 +1,12 @@ --- title: "Installer N8N sur un VPS OVHcloud" -excerpt: "Apprenez à héberger la plateforme d’automatisation N8N sur un VPS OVHcloud à l’aide de Docker et Caddy" -updated: 2025-06-03 +excerpt: "Apprenez à héberger la plateforme d’automatisation N8N sur un VPS OVHcloud à l’aide de Docker et Traefik" +updated: 2025-06-11 --- ## Objectif -Ce guide vous explique comment installer et exécuter [n8n](https://n8n.io), une plateforme open source d’automatisation de workflows, sur un VPS OVHcloud. L’installation s’appuie sur [Docker](https://www.docker.com/), avec le serveur [Caddy](https://caddyserver.com/) pour gérer automatiquement les certificats SSL. +Ce guide vous explique comment installer et exécuter [n8n](https://n8n.io), une plateforme open source d’automatisation de workflows, sur un VPS OVHcloud. L’installation s’appuie sur [Docker](https://www.docker.com/), avec le serveur [Traefik](https://doc.traefik.io/traefik/ ) pour gérer automatiquement les certificats SSL. ## Prérequis @@ -50,7 +50,7 @@ Pour Debian (version 11 et 12) : echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` -Pour Ubuntu (version égale ou suppérieure à 22.04) : +Pour Ubuntu (version égale ou supérieure à 22.04) : ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null @@ -70,186 +70,138 @@ docker --version docker compose version ``` -### Récupérer le dépôt de configuration N8N + Caddy +### Préparer la configuration Traefik + N8N -Clonez le dépôt Git officiel contenant une stack Docker prête à l’emploi : +Créez un dossier de projet où résidera la stack Docker : ```bash -git clone https://github.com/n8n-io/n8n-docker-caddy.git -cd n8n-docker-caddy +mkdir n8n-traefik && cd n8n-traefik ``` -> [!primary] -> -> Dans ce guide, le dossier cloné est aussi appelé dossier de données (`DATA_FOLDER`). - -Créez les volumes nécessaires : - -```bash -sudo docker volume create caddy_data -sudo docker volume create n8n_data -``` - -### Ouvrir les ports nécessaires +### Créer les fichiers de configuration. -Pour que votre VPS accepte les connexions web (HTTP et HTTPS), ouvrez les ports 80 et 443 via UFW (le pare-feu par défaut sur Debian/Ubuntu) : +#### Fichier .env -```bash -sudo ufw allow OpenSSH -sudo ufw allow 80 -sudo ufw allow 443 -``` - -> [!primary] -> -> Si UFW n’est pas installé, vous pouvez l’installer et l’activer avec : `sudo apt install ufw -y` +Ce fichier vous permet de définir les variables réutilisées dans le fichier docker-compose.yml. -Activez le pare-feu : - -```bash -sudo ufw enable -``` - -Vérifiez l’état du pare-feu : - -```bash -sudo ufw status -``` - -Vous devez voir une sortie similaire à ceci : - -Status: active - -To Action From --- ------ ---- -80 ALLOW Anywhere -443 ALLOW Anywhere -OpenSSH ALLOW Anywhere -80 (v6) ALLOW Anywhere (v6) -443 (v6) ALLOW Anywhere (v6) -OpenSSH (v6) ALLOW Anywhere (v6) - -### Configurer le fichier `.env` - -Le fichier `.env` permet de définir les paramètres d’environnement nécessaires à N8N et Caddy. Pour le créer : +Créez le fichier : ```bash nano .env ``` +Collez-y le contenu suivant : + ```console -DATA_FOLDER=/home/debian/n8n-docker-caddy DOMAIN_NAME=exemple.com SUBDOMAIN=n8n -GENERIC_TIMEZONE=Europe/Paris -SSL_EMAIL=mon-adresse@email.com +EMAIL=admin@exemple.com ``` -Explications : +Remplacez `exemple.com` par votre véritable nom de domaine et `admin@exemple.com` par l'e-mail de votre choix. -- DATA_FOLDER : chemin absolu vers le dossier où vous avez cloné le dépôt Git (dossier de données). -- DOMAIN_NAME : nom de domaine principal (déjà configuré dans votre zone DNS). -- SUBDOMAIN : sous-domaine pointant vers votre VPS (ex : `n8n.exemple.com`). -- GENERIC_TIMEZONE : fuseau horaire utilisé par défaut (important pour les automatisations). -- SSL_EMAIL : e-mail utilisé pour générer le certificat SSL via Let's Encrypt. +#### Fichier docker-compose.yml -Assurez-vous que votre sous-domaine pointe bien vers l’adresse IP de votre VPS dans la zone DNS. Pour plus de détails, consultez notre guide « [Éditer une zone DNS OVHcloud](/pages/web_cloud/domains/dns_zone_edit){.external} ». +Ce fichier contient la définition des services N8N et Traefik. Il configure notamment : -Redéployez ensuite la stack Docker pour que la configuration soit prise en compte : +- Le reverse proxy et la gestion SSL avec Traefik. +- L’authentification de base pour accéder à N8N. -```bash -sudo docker compose down -sudo docker compose up -d -``` - -### Définir le domaine dans Caddy - -Vous avez deux manières de définir le domaine dans le fichier `Caddyfile` : - -- La modification manuelle est simple et rapide si vous ne comptez faire qu'une seule installation ou modification. -- La génération dynamique via un script est recommandée si vous gérez plusieurs environnements (développement, production, etc.), ou si vous souhaitez automatiser les déploiements à partir d’un fichier `.env`. Cela permet d’éviter les erreurs manuelles et de centraliser la configuration. - -#### Option 1 : Modifier manuellement le fichier `Caddyfile` -Ouvrez le fichier CaddyFile : +Créez le fichier : ```bash -nano caddy_config/Caddyfile +nano docker-compose.yml ``` -Remplacez le contenu du fichier par : +Collez le contenu suivant : ```console -n8n..com { - reverse_proxy n8n:5678 { - flush_interval -1 - } -} -``` - -Remplacez `` par votre véritable nom de domaine. +version: "3.8" + +services: + traefik: + image: traefik:v2.11 + container_name: traefik + restart: always + command: + - "--api.insecure=true" + - "--providers.docker=true" + - "--entrypoints.web.address=:80" + - "--entrypoints.websecure.address=:443" + - "--certificatesresolvers.myresolver.acme.httpchallenge=true" + - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web" + - "--certificatesresolvers.myresolver.acme.email=${EMAIL}" + - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json" + ports: + - "80:80" + - "443:443" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" + - "./letsencrypt:/letsencrypt" + labels: + - "traefik.http.routers.http-catch.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)" + - "traefik.http.routers.http-catch.entrypoints=web" + - "traefik.http.routers.http-catch.middlewares=redirect-to-https" + - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" + + n8n: + image: n8nio/n8n + container_name: n8n + restart: always + environment: + - N8N_BASIC_AUTH_ACTIVE=true + - N8N_BASIC_AUTH_USER=admin + - N8N_BASIC_AUTH_PASSWORD=admin123 + - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME} + - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/ + labels: + - "traefik.enable=true" + - "traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)" + - "traefik.http.routers.n8n.entrypoints=websecure" + - "traefik.http.routers.n8n.tls.certresolver=myresolver" + - "traefik.http.services.n8n.loadbalancer.server.port=5678" + volumes: + - n8n_data:/home/node/.n8n + +volumes: + n8n_data: +``` + +> [!warning] +> +> Par défaut, l’utilisateur et le mot de passe sont définis sur admin / admin123. Cette méthode n’est pas activée dans toutes les versions de N8N. Si vous souhaitez l’utiliser malgré tout, pensez à modifier ces valeurs dans le fichier docker-compose.yml avant de lancer la stack, et utilisez un mot de passe fort. -Relancez Docker : +### Préparer le dossier des certificats SSL -```bash -sudo docker compose down -sudo docker compose up -d -``` +Traefik stocke les certificats générés par Let's Encrypt dans un fichier nommé acme.json. Ce fichier doit exister avant le lancement et avoir des permissions strictes. -#### Option 2 : Générer dynamiquement le fichier `Caddyfile` - -Créez un fichier à la racine de votre dossier de données (`n8n-docker-caddy` dans notre exemple) : +Créez le dossier : ```bash -nano generate-caddyfile.sh -``` - -Collez le contenu suivant : - -```console -#!/bin/bash - -# Charge les variables depuis le fichier .env -set -a -source .env -set +a - -# Génére dynamiquement le fichier Caddyfile -cat < caddy_config/Caddyfile -${SUBDOMAIN}.${DOMAIN_NAME} { - reverse_proxy n8n:5678 { - flush_interval -1 - } -} -EOF - -echo "Fichier Caddyfile généré avec succès." +mkdir letsencrypt ``` -Rendez le script exécutable : +Créez le fichier vide : ```bash -chmod +x generate-caddyfile.sh +touch letsencrypt/acme.json +chmod 600 letsencrypt/acme.json ``` -Puis lancez-le : +### Démarrer les services -```bash -./generate-caddyfile.sh -``` - -Relancez Docker : +Lancez la stack avec Docker Compose : ```bash -sudo docker compose down -sudo docker compose up -d +docker compose up -d ``` -> [!primary] -> -> Le fichier `caddy_config/Caddyfile` sera écrasé à chaque exécution du script. Ne le mofifiez pas manuellement si vous choisissez cette option. À la place, ajoutez un commentaire du type : `# Ce fichier est généré automatiquement par le script generate-caddyfile.sh`. +### Configuration DNS + +Assurez-vous que votre sous-domaine (ex : n8n.exemple.com) pointe bien vers l’adresse IP de votre VPS dans la zone DNS. Pour plus de détails, consultez notre guide « [Éditer une zone DNS OVHcloud](/pages/web_cloud/domains/dns_zone_edit){.external} ». -#### Accéder à N8N +### Accéder à l’interface N8N Accédez à N8N dans un navigateur via l'URL `https://n8n.exemple.com/`. Remplacez `n8n.exemple.com` par le domaine réel que vous avez défini. La page suivante s'affiche. @@ -259,7 +211,7 @@ Une fois la page chargée, vous serez invité à créer le premier utilisateur a ### Conclusion -Vous disposez désormais d’une instance N8N opérationnelle et sécurisée sur votre VPS OVHcloud, avec une gestion automatique des certificats SSL grâce à Caddy. Pour aller plus loin, consultez la [documentation officielle](https://docs.n8n.io/) de N8N pour créer vos premiers workflows. +Vous disposez désormais d’une instance N8N opérationnelle et sécurisée sur votre VPS OVHcloud, avec une gestion automatique des certificats SSL grâce à Traefik. Pour aller plus loin, consultez la [documentation officielle](https://docs.n8n.io/) de N8N pour créer vos premiers workflows. ## Aller plus loin From 6ebcbdd384f7ed42505f3cd02d1587f1f6653567 Mon Sep 17 00:00:00 2001 From: fabienOVH Date: Thu, 12 Jun 2025 10:04:56 +0200 Subject: [PATCH 3/4] feedback --- .../install_n8n_on_vps/guide.fr-fr.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md index 047b2f7af17..fb73e83a05c 100644 --- a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md +++ b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md @@ -100,6 +100,10 @@ EMAIL=admin@exemple.com Remplacez `exemple.com` par votre véritable nom de domaine et `admin@exemple.com` par l'e-mail de votre choix. +> [!warning] +> +> Si vous ne possédez pas encore de nom de domaine, commandez-en un sur notre [site web](https://www.ovhcloud.com/fr/domains/). + #### Fichier docker-compose.yml Ce fichier contient la définition des services N8N et Traefik. Il configure notamment : @@ -117,8 +121,6 @@ nano docker-compose.yml Collez le contenu suivant : ```console -version: "3.8" - services: traefik: image: traefik:v2.11 From 15757d5304a972d389fe00bf38b303df00e3ce91 Mon Sep 17 00:00:00 2001 From: fabienOVH Date: Thu, 12 Jun 2025 11:55:03 +0200 Subject: [PATCH 4/4] Add VPS image part --- .../install_n8n_on_vps/guide.fr-fr.md | 67 ++++++++++++++----- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md index fb73e83a05c..0be691a96e1 100644 --- a/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md +++ b/pages/bare_metal_cloud/virtual_private_servers/install_n8n_on_vps/guide.fr-fr.md @@ -16,7 +16,16 @@ Ce guide vous explique comment installer et exécuter [n8n](https://n8n.io), une ## En pratique -### Se connecter à votre VPS +### Sommaire + +- [Se connecter à votre VPS](#step1) +- [Vous utilisez une image OVHcloud préinstallée](#step2) +- [Vous n'utilisez pas d'image OVHcloud préinstallée](#step3) +- [Configuration DNS](#step4) +- [Accéder à l’interface N8N](#step5) +- [Conclusion](#step6) + +### Se connecter à votre VPS Ouvrez un terminal et connectez-vous à votre VPS avec la commande suivante (en remplaçant `IP_DU_VPS` par la véritable IP) : @@ -24,17 +33,37 @@ Ouvrez un terminal et connectez-vous à votre VPS avec la commande suivante (en ssh @IP_VPS ``` -### Installer Docker et Docker Compose +### Vous utilisez une image OVHcloud préinstallée + +Si vous avez choisi un **VPS OVHcloud avec l’image N8N préinstallée**, **vous n’avez pas besoin d’installer Docker ni Docker Compose** : ces outils sont déjà présents et configurés. + +Retrouvez tous les fichiers nécessaires (y compris `docker-compose.yml` et `.env`) dans le dossier `/root/n8n-traefik/` sur votre VPS. + +Modifiez le fichier `.env` situé dans ce dossier pour y renseigner les informations suivantes : + +- `DOMAIN_NAME` : votre nom de domaine (ex : `exemple.com`). +- `SUBDOMAIN` : le sous-domaine utilisé pour accéder à N8N (ex : `n8n`). +- `EMAIL` : l’adresse e-mail utilisée pour générer les certificats SSL via Let’s Encrypt. + +Une fois le fichier `.env` mis à jour, exécutez la commande suivante depuis le dossier `/root/n8n-traefik/` : + +```bash +docker compose up -d +``` + +### Vous n'utilisez pas d'image OVHcloud préinstallée + +#### Installer Docker et Docker Compose Pour déployer N8N via Docker sur un VPS OVHcloud, Docker et Docker Compose doivent être installés. Cette méthode est compatible avec la majorité des distributions proposées par OVHcloud (Debian 11, Debian 12, Ubuntu 22.04...). -#### Étape 1 - Mettez le système à jour +##### Étape 1 - Mettez le système à jour ```bash sudo apt update && sudo apt upgrade -y ``` -#### Étape 2 - Ajouter la clé GPG officielle de Docker +##### Étape 2 - Ajouter la clé GPG officielle de Docker ```bash sudo apt install -y ca-certificates curl gnupg @@ -42,7 +71,7 @@ sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg ``` -#### Étape 3 - Ajouter le dépôt Docker +##### Étape 3 - Ajouter le dépôt Docker Pour Debian (version 11 et 12) : @@ -56,21 +85,21 @@ Pour Ubuntu (version égale ou supérieure à 22.04) : echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` -#### Étape 4 - Installer Docker Engine et Docker Compose Plugin +##### Étape 4 - Installer Docker Engine et Docker Compose Plugin ```bash sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` -#### Étape 5 - Vérifier que Docker et Docker Compose fonctionnent +##### Étape 5 - Vérifier que Docker et Docker Compose fonctionnent ```bash docker --version docker compose version ``` -### Préparer la configuration Traefik + N8N +#### Préparer la configuration Traefik + N8N Créez un dossier de projet où résidera la stack Docker : @@ -78,9 +107,9 @@ Créez un dossier de projet où résidera la stack Docker : mkdir n8n-traefik && cd n8n-traefik ``` -### Créer les fichiers de configuration. +#### Créer les fichiers de configuration. -#### Fichier .env +##### Fichier .env Ce fichier vous permet de définir les variables réutilisées dans le fichier docker-compose.yml. @@ -104,7 +133,7 @@ Remplacez `exemple.com` par votre véritable nom de domaine et `admin@exemple.co > > Si vous ne possédez pas encore de nom de domaine, commandez-en un sur notre [site web](https://www.ovhcloud.com/fr/domains/). -#### Fichier docker-compose.yml +##### Fichier docker-compose.yml Ce fichier contient la définition des services N8N et Traefik. Il configure notamment : @@ -174,7 +203,7 @@ volumes: > > Par défaut, l’utilisateur et le mot de passe sont définis sur admin / admin123. Cette méthode n’est pas activée dans toutes les versions de N8N. Si vous souhaitez l’utiliser malgré tout, pensez à modifier ces valeurs dans le fichier docker-compose.yml avant de lancer la stack, et utilisez un mot de passe fort. -### Préparer le dossier des certificats SSL +#### Préparer le dossier des certificats SSL Traefik stocke les certificats générés par Let's Encrypt dans un fichier nommé acme.json. Ce fichier doit exister avant le lancement et avoir des permissions strictes. @@ -191,7 +220,7 @@ touch letsencrypt/acme.json chmod 600 letsencrypt/acme.json ``` -### Démarrer les services +#### Démarrer les services Lancez la stack avec Docker Compose : @@ -199,11 +228,15 @@ Lancez la stack avec Docker Compose : docker compose up -d ``` -### Configuration DNS +### Configuration DNS Assurez-vous que votre sous-domaine (ex : n8n.exemple.com) pointe bien vers l’adresse IP de votre VPS dans la zone DNS. Pour plus de détails, consultez notre guide « [Éditer une zone DNS OVHcloud](/pages/web_cloud/domains/dns_zone_edit){.external} ». -### Accéder à l’interface N8N +> [!warning] +> +> Si vous ne possédez pas encore de nom de domaine, commandez-en un sur notre [site web](https://www.ovhcloud.com/fr/domains/). + +### Accéder à l’interface N8N Accédez à N8N dans un navigateur via l'URL `https://n8n.exemple.com/`. Remplacez `n8n.exemple.com` par le domaine réel que vous avez défini. La page suivante s'affiche. @@ -211,7 +244,7 @@ Accédez à N8N dans un navigateur via l'URL `https://n8n.exemple.com/`. Remplac Une fois la page chargée, vous serez invité à créer le premier utilisateur administrateur de votre instance N8N via le formulaire de configuration. -### Conclusion +### Conclusion Vous disposez désormais d’une instance N8N opérationnelle et sécurisée sur votre VPS OVHcloud, avec une gestion automatique des certificats SSL grâce à Traefik. Pour aller plus loin, consultez la [documentation officielle](https://docs.n8n.io/) de N8N pour créer vos premiers workflows. @@ -221,4 +254,4 @@ Vous disposez désormais d’une instance N8N opérationnelle et sécurisée sur Pour des prestations spécialisées (référencement, développement, etc), contactez les [partenaires OVHcloud](https://partner.ovhcloud.com/fr-ca/directory/) -Échangez avec notre [communauté d'utilisateurs](/links/community). +Échangez avec notre [communauté d'utilisateurs](/links/community). \ No newline at end of file