В этом руководстве мы рассмотрим, как развернуть n8n приложение на виртуальном сервере (VDS) с использованием Nginx.
Содержание
1. Создание пользователя для запуска приложения
2. Установка n8n
3. Настройка Nginx
4. Настройка SSL-сертификата
5. Проверка работы
6. Обновление n8n и резервное копирование
Создайте VDS на дистрибутиве docker в личном кабинете.
Отметим, что для запуска n8n потребуется VDS с минимум 1 Гб оперативной памяти.
Далее подключитесь к VDS по SSH (инструкция) под пользователем root.
Создайте пользователя web с домашним каталогом /home/web:
adduser --home /home/web --gecos "" web
После выполнения команды, введите пароль для пользователя web. Пароль не будет отображаться на экране при его вводе.
Выдайте права администратора пользователю web:
usermod -aG sudo web
Перед установкой нужно переключитесь на пользователя web.
su - web
Создайте папку для хранения файлов n8n
mkdir n8n
Далее создайте файл docker-compose.yml командой
nano docker-compose.yml
Добавьте в него следующие строки
version: '3.3'
services:
n8n:
container_name: n8n
ports:
- '127.0.0.1:5678:5678'
environment:
- GENERIC_TIMEZONE=Europe/Moscow
- TZ=Europe/Moscow
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_RUNNERS_ENABLED=true
- N8N_PORT=443
- N8N_SECURE_COOKIE=true
- WEBHOOK_URL=http://sitename.ru
- N8N_HOST=sitename.ru
volumes:
- './n8n:/home/node/.n8n'
image: docker.n8n.io/n8nio/n8n
В переменной WEBHOOK_URL нужно указать домен, по которому будет работаьб Ваш сайт.
В этом файле можно добавить нужные вам переменные, для более тонкой настройки n8n.
Теперь зайпустите n8n командой
sudo docker compose up -d
Установите 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;
client_max_body_size 300m;
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 600s;
proxy_buffering off;
}
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 нужно указать домен, по которому будет работать Ваш сайт.
Здесь мы опишем некоторые настройки, которые нужно корректировать для запуска вашего приложения.
Переменная 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
Нужно настроить 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;
client_max_body_size 300m;
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;
client_max_body_size 300m;
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.2 TLSv1.3;
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 600s;
proxy_buffering off;
}
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
Проверьте, что контейнер запущен и не выдаёт ошибок:
sudo docker logs -f n8n
Откройте в браузере https://sitename.ru. Вы попадёте на страницу создания первого аккаунта — заполните форму и задайте пароль администратора. После этого n8n готов к работе.
Если страница не открывается, проверьте по порядку:
1) sudo docker logs n8n — нет ли ошибок в логах приложения;
2) curl -I http://sitename.ru с самого сервера — отвечает ли Nginx;
3) открыты ли порты 80/443 (шаг 3).
su - web
cd /home/web
sudo docker compose pull
sudo docker compose up -d
После обновления проверьте логи: sudo docker logs -f n8n.
Перед обновлением рекомендуется сделать резервную копию данных (см. ниже), чтобы при проблемах с новой версией их можно было восстановить.
Все данные n8n (база, credentials, файлы) хранятся в каталоге ~/n8n пользователя web. Рекомендуется регулярно делать его копию, например на другой сервер или в облачное хранилище:
su - web
tar czf /root/n8n-backup-$(date +%F).tar.gz n8n
Для восстановления достаточно разархивировать каталог в место, указанное в volumes в docker-compose.yml, и перезапустить контейнер.
Поздравляем, теперь приложение n8n запущено на VDS.