Установка 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 install iptables iptables-persistent 

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

sudo 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-get update
apt-get 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 testvds.wiki11.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 testvds.wiki11.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/testvds.wiki11.ru/fullchain.pem;
    ssl_certificate_key /var/lib/dehydrated/certs/testvds.wiki11.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-инфраструктуры
С 2003 года
Надежность.
Нам доверяют тысячи компаний и разработчиков
21 год
Предоставляем услуги профессионального хостинга
35 000+
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865