Короткий разбор с озвучкой
Путь от нового сервера до учебной сводки. Подробные команды — ниже.
1. Подготовьте сервер и поддомен
Для старта нужны VPS с Linux, доступ по SSH и поддомен. Если подходящий сервер уже есть, можно использовать его: сначала проверьте свободные ресурсы и занятые порты.
- Ориентир для небольшого стенда: 2 vCPU, 4 ГБ RAM, от 30 ГБ диска.
- Отдельный поддомен: например,
n8n.example.ru. - A-запись поддомена должна указывать на публичный IP сервера.
- На сервере нужны актуальные Docker и плагин Docker Compose.
Инструкция для отдельного развёртыванияНе запускайте скачанный Compose поверх существующего рабочего n8n. Сначала проверьте его конфигурацию, резервную копию, порты и каталоги данных.
2. Выберите способ установки
Если провайдер предлагает готовый образ n8n, используйте его инструкции: версия, доступ к интерфейсу и место хранения данных зависят от образа. В Timeweb Cloud такой вариант есть в маркетплейсе приложений.
Если нужен свой понятный Compose-файл, ниже — минимальная конфигурация с постоянным томом. Она подходит для знакомства и небольших нагрузок. Для важных процессов отдельно спланируйте резервные копии, обновления и конфигурацию базы данных.
3. Запустите через Docker Compose
Файлы для своего сервера
В примере зафиксирована версия n8n 2.43.8. Compose сохраняет данные в Docker volume и публикует порт только на localhost. Это небольшой учебный стенд с SQLite; для постоянной работы с важными данными спланируйте PostgreSQL, обновления и восстановление.
# Для нового отдельного сервера с Docker Compose
mkdir -p ~/my-n8n
cd ~/my-n8n
curl -fSLo compose.yaml https://1connector.ru/downloads/compose.yaml
curl -fSLo .env.example https://1connector.ru/downloads/env.example
cp .env.example .env
openssl rand -hex 32
# Запишите полученную строку в N8N_ENCRYPTION_KEY в .env
# Укажите свой N8N_HOST, например n8n.example.ru
nano .env
chmod 600 .env
docker compose config --quiet
docker compose up -d
docker compose logs --tail=50 n8n
curl --fail http://127.0.0.1:5678/healthzКлюч шифрования нужен для сохранённых credentials. Храните его вместе с резервной копией данных и не меняйте произвольно после настройки подключений. После команды nano .env замените пример домена и пустой ключ своими значениями. Ожидаемый ответ /healthz — HTTP 200; если контейнер ещё запускается, посмотрите журнал и повторите проверку.
4. Подключите домен и HTTPS
На сервере настройте reverse proxy к 127.0.0.1:5678. В примере ниже замените n8n.example.ru своим поддоменом. Если Nginx уже обслуживает другие проекты, добавьте отдельный server block, сохранив существующие конфигурации.
server {
listen 80;
server_name n8n.example.ru;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_buffering off;
}
}# Пример для Ubuntu и нового поддомена n8n.example.ru
# A-запись уже должна указывать на этот VPS; порты 80/443 доступны
sudo apt-get update
sudo apt-get install -y nginx certbot python3-certbot-nginx
# Сохраните конфигурацию выше в /etc/nginx/sites-available/my-n8n
sudo ln -s /etc/nginx/sites-available/my-n8n /etc/nginx/sites-enabled/my-n8n
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d n8n.example.ru --redirect
sudo certbot renew --dry-run
curl --fail https://n8n.example.ru/healthzCertbot задаст вопросы об email и условиях сервиса. После выпуска сертификата он добавит HTTPS в конфигурацию Nginx. Если DNS ещё не обновился или закрыт порт 80, сначала исправьте доступность домена.
В нашем .env.example уже предусмотрены внешний HTTPS-адрес и один reverse proxy. При другой схеме размещения проверьте переменные и заголовки по документации своей версии n8n. После изменения .env применяйте настройки командой docker compose up -d.
5. Сделайте первую проверку
- Редактор открывается по вашему HTTPS-поддомену.
- Вы создали собственный аккаунт владельца.
- Сценарий запускается вручную и выдаёт ожидаемые данные.
- После перезапуска контейнера аккаунт и workflow сохраняются.
- У вас есть проверяемая резервная копия тома и ключа шифрования.
Для первого импорта подойдёт наш учебный шаблон отчёта по API. Он не требует платных API-ключей и не отправляет сообщения.
6. Сделайте резервную копию
Для учебного стенда с SQLite делайте копию при остановленном n8n. Скрипт ниже сохраняет том, Compose и .env, затем запускает сервис снова. Запускайте его из своего SSH-сеанса; на время копирования сценарии не выполняются.
#!/bin/sh
# Сохраните как backup.sh рядом с compose.yaml и .env
set -eu
cd "$HOME/my-n8n"
mkdir -p backups
backup_dir="$PWD/backups/$(date -u +%Y%m%dT%H%M%SZ)"
mkdir "$backup_dir"
chmod 700 "$backup_dir"
docker compose stop n8n
trap 'docker compose start n8n >/dev/null' EXIT
docker compose run --rm --no-deps --user root --entrypoint sh \
-v "$backup_dir:/backup" n8n \
-c 'tar -czf /backup/n8n-data.tar.gz -C /home/node/.n8n .'
cp .env compose.yaml "$backup_dir/"
chmod 600 "$backup_dir/"*
tar -tzf "$backup_dir/n8n-data.tar.gz" >/dev/null
echo "Backup saved: $backup_dir"Проверка списка файлов показывает, что архив читается, но ещё не доказывает восстановление. Храните копию вне исходного VPS: архив содержит базу и секреты. Для проверки восстановите его в отдельный тестовый том, с тем же ключом шифрования, проверьте вход и подключения. Передавайте архив с секретами только доверенному хранилищу.
7. Если что-то не работает
- Домен показывает чужую страницу. Сверьте A-запись и
server_name. Проверьте, что новый конфиг подключён в sites-enabled. - 502 от Nginx. Выполните
docker compose ps, посмотрите логи и ответ локального /healthz. Убедитесь, что proxy_pass указывает на ваш порт. - Webhook показывает localhost или HTTP. Проверьте WEBHOOK_URL, N8N_EDITOR_BASE_URL, N8N_PROXY_HOPS и примените .env через Compose. У некоторых интеграций внешний callback нужно зарегистрировать заново.
- После перезапуска пропали workflow. Проверьте постоянный том. Не удаляйте тома командой
down -v.