Хостинг
VDS
Аренда серверов
Домены
Почта
SSL
Хранилище
Сайты
Обзоры
Регламенты
AI Studio
Kubernetes
Архив
Установка n8n в docker

Установка n8n в docker на услуге VDS

В этом руководстве мы рассмотрим, как развернуть n8n приложение на виртуальном сервере (VDS) с использованием Nginx.

Содержание

1. Создание пользователя для запуска приложения
2. Установка n8n
3. Настройка безопасности приложения
4. Настройка Nginx
5. Настройка SSL-сертификата

1. Создание пользователя для запуска приложения

Создайте VDS на дистрибутиве docker в личном кабинете.

Отметим, что для запуска n8n потребуется VDS с минимум 1 Гб оперативной памяти.

Далее подключитесь к VDS по SSH (инструкция) под пользователем root.

Создайте пользователя web с домашним каталогом /home/web:

adduser --home /home/web --gecos "" web

После выполнения команды, введите пароль для пользователя web. Пароль не будет отображаться на экране при его вводе.

Выдайте права администратора пользователю web:

usermod -aG sudo web

2. Установка n8n

Перед установкой нужно переключитесь на пользователя web.

su - web

Создайте папку для хранения файлов n8n

mkdir n8n

Далее создайте файл docker-compose.yml командой

nano docker-compose.yml 

Добавьте в него следующие строки

version: '3.3'

services:
  n8n:
    container_name: n8n
    ports:
      - ':5678:5678'
    environment:
      - GENERIC_TIMEZONE=Europe/Moscow
      - TZ=Europe/Moscow
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_RUNNERS_ENABLED=true
      - WEBHOOK_URL=http://sitename.ru

    volumes:
      - './n8n:/home/node/.n8n'
    image: docker.n8n.io/n8nio/n8n

В переменной WEBHOOK_URL нужно указать домен, по которому будет работаьб Ваш сайт. В этом файле можно добавить нужные вам переменные, для более тонкой настройки n8n.

Теперь зайпустите n8n командой

sudo docker compose up -d 

3. Настройка безопасности приложения

Переключитесь обратно на пользователя root.

Так как по умолчанию docker запускает приложение на всех доступных портах, то это может быть небезопасно, поэтому нужно ограничить возможность подключение к приложению снаружи напрямую по порту. Для этого установим iptables и iptables-persistent командой.

apt update
apt install iptables iptables-persistent 

Далее настроим, чтобы iptables блокировало внешнее подключение по порту к приложению

iptables -I DOCKER-USER -p tcp --dport 5678 ! -s 127.0.0.1 -j DROP

Чтобы правило сохранялось при перезагрузке, воспользуемся netfilter-persistent, это подпрограмма iptables-persistent.

netfilter-persistent save

4. Настройка Nginx

Установите nginx:

apt install nginx -y

Создайте конфигурационный файл для сайта:

nano /etc/nginx/sites-available/sitename.ru.conf

Пример конфигурации:

server {
    listen 80;
    server_name sitename.ru;
    access_log /var/log/nginx/sitename_ru.log combined;


    location / {
        try_files $uri @backend;
    }

    location @backend {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_read_timeout 120s;
    }

    gzip on;
    gzip_types text/plain text/css application/javascript application/json image/svg+xml;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_vary on;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
}

Вместо sitename.ru нужно указать домен, по которому будет работать Ваш сайт.

Описание настроек в nginx

Здесь мы опишем некоторые настройки, которые нужно корректировать для запуска вашего приложения.

Переменная server_name - указывает по какому домену будет работать данный конфигурационный файл nginx

Переменная proxy_pass - указывает по какому адресу работает ваше nodejs-приложение и куда нужно проксировать запросы, для работы сайта.

Активируйте конфигурационный файл и перезапустите Nginx:

ln -s /etc/nginx/sites-available/sitename.ru.conf /etc/nginx/sites-enabled/
nginx -t 
nginx -s reload

5. Настройка SSL-сертификата

Нужно настроить SSL-сертификат для работы сайта. Для выпуска сертификата установите утилиту dehydrated:

apt install dehydrated

Создайте файл со списком доменов для вашего сертификата:

nano /etc/dehydrated/domains.txt

В нём напишите список доменов. Для каждого отдельного сертификата список доменов пишется в одной отдельной строке:

sitename.ru 

Вместо sitename.ru нужно указать домен, по которому будет работать Ваш сайт.

Далее в файле /etc/nginx/sites-available/sitename.ru.conf после строки access_log /var/log/nginx/sitename_ru.log combined; добавьте строки

location /.well-known/acme-challenge {
        alias /var/lib/dehydrated/acme-challenges/;
    }

Перезапустите Nginx

nginx -t 
nginx -s reload

Выпустите SSL-сертификат командами

dehydrated --register --accept-terms
dehydrated -c

Для расширения количества поддерживаемых протоколов шифрования сгенерируйте файл dhparam

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Теперь нужно подключить SSL-сертификат к сайту. Для этого откройте файл /etc/nginx/sites-available/sitename.ru.conf и перепишити конфигурационный файл следующим образом

server {
    listen 80;
    server_name sitename.ru;
    access_log /var/log/nginx/sitename_ru.log combined;

    location /.well-known/acme-challenge {
        alias /var/lib/dehydrated/acme-challenges/;
    }

if ($scheme = http) {
        return 301 https://$host$request_uri;
}


}

server {
    listen 443 ssl;
    server_name sitename.ru;
    access_log /var/log/nginx/sitename_ru.log combined;

    location /.well-known/acme-challenge {
        alias /var/lib/dehydrated/acme-challenges/;
    }

    ssl_certificate     /var/lib/dehydrated/certs/sitename.ru/fullchain.pem;
    ssl_certificate_key /var/lib/dehydrated/certs/sitename.ru/privkey.pem;
    ssl_dhparam /etc/nginx/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        try_files $uri @backend;
    }

    location @backend {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_read_timeout 120s;
    }

    gzip on;
    gzip_types text/plain text/css application/javascript application/json image/svg+xml;
    gzip_min_length 256;
    gzip_comp_level 5;
    gzip_vary on;

    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";


}

Перезапустите Nginx

nginx -t 
nginx -s reload

Откройте менеджер cron-заданий командой

crontab -e

Добавьте в открывшемся текстовом редакторе строку

0 2 */3 * * /usr/bin/dehydrated -c -g && /usr/sbin/nginx -s reload

Поздравляем, теперь приложение n8n запущено на VDS.

Облачные VDS
Облачные VDS
Облачные VDS
Масштабируются под любые задачи: от размещения сайта до IT-инфраструктуры
Заказать

Нам доверяют тысячи компаний и разработчиков

22 года
Предоставляем услуги профессионального хостинга
35 000+
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime наших серверов хостинга
Callibri
Крылья
Tele-Club
Linline
Премьер зал
УГМК-Здоровье
Магнум
Алатырь
Туристер
Callibri
Крылья
Tele-Club
Linline
Премьер зал
УГМК-Здоровье
Магнум
Алатырь
Туристер
ВК49865