Как установить n8n на VPS шаг за шагом (Ubuntu + Docker + вебхуки) — без боли - Блог Папы Карло

Опубликовано: 7 месяцев назад
Просмотров: 89

С вами Папа Карло. В мастерской порядок. Давайте установим n8n. Инструмент годный, но установка на VPS у новичков часто превращается в квест “почему не открывается сайт” и “почему вебхук не работает”. Сейчас всё разложу по полочкам: ставим на Ubuntu через Docker, делаем нормальный домен + HTTPS и настраиваем вебхуки так, чтобы оно не отваливалось.

Если что-то не получается — пишите мне в телеграм.


Что нужно заранее

  • VPS с Ubuntu, например на том же таймвебе
  • Домен (на регру и подобных) — без домена вебхуки будут страдать
  • Доступ по SSH (логин/пароль или ключ), обычно без проблем выдает хостинг.

Заходим на сервер и обновляем систему





sudo apt update && sudo apt upgrade -y

Поставим полезное:





sudo apt install -y curl git ufw

Ставим Docker и Docker Compose

Самый простой путь — официальный репозиторий Docker.





curl -fsSL https://get.docker.com | sudo sh

Добавляем пользователя в группу docker (чтобы не писать sudo каждый раз):





sudo usermod -aG docker $USER

⚠️ После этого переподключись к SSH (выйди и зайди снова), чтобы группы применились.

Проверяем:





docker --version
docker compose version

Создаём папку под n8n





mkdir -p ~/n8n && cd ~/n8n

Готовим docker-compose.yml

Создаём файл:





nano docker-compose.yml

Вставляй вот это (база будет SQLite — для старта идеально; потом можно переехать на Postgres):





services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.yourdomain.ru
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - WEBHOOK_URL=https://n8n.yourdomain.ru/
      - GENERIC_TIMEZONE=Europe/Berlin
      - TZ=Europe/Berlin
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

👉 Заменяй n8n.yourdomain.ru на свой домен.

Сохрани: Ctrl+O → Enter, выйти: Ctrl+X.


Запускаем n8n





docker compose up -d

Проверяем, что контейнер жив:





docker ps

Логи (если что-то пошло не так):





docker logs -n 100 -f n8n-n8n-1

Открываем порт и включаем файрвол

Если используешь UFW:





sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status

⚠️ Порт 5678 наружу лучше не светить “в интернет” без прокси — дальше сделаем нормально через HTTPS.


Поднимаем HTTPS через Nginx Proxy Manager (самый лайтовый вариант)

Чтобы не возиться с ручным Nginx и Certbot, я обычно ставлю Nginx Proxy Manager. Это прям “панелька” в браузере: привязал домен → получил SSL → готово.

Создай папку:





mkdir -p ~/npm && cd ~/npm

Создай docker-compose.yml:





nano docker-compose.yml

Вставь:





services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt

volumes:
  npm_data:
  npm_letsencrypt:

Запуск:





docker compose up -d

Панель откроется на:

  • http://IP_СЕРВЕРА:81

Дальше в NPM:

  • Proxy Hosts → Add Proxy Host
  • Domain: n8n.yourdomain.ru
  • Forward Hostname/IP: 127.0.0.1
  • Forward Port: 5678
  • Включи Websockets
  • В SSL вкладке нажми Request a new SSL Certificate и включи Force SSL

Готово: теперь n8n доступен по HTTPS, и вебхуки начнут жить нормально.


Самое важное: чтобы вебхуки не ломались

В n8n вебхуки — это как входная дверь в мастерскую. Если адрес кривой, дверь не открывается, клиенты уходят.

Проверь в окружении (мы уже указали):

  • WEBHOOK_URL=https://n8n.yourdomain.ru/
  • N8N_HOST=n8n.yourdomain.ru
  • N8N_PROTOCOL=https

После изменения переменных перезапусти:





cd ~/n8n
docker compose down
docker compose up -d

Быстрая проверка вебхука

Создай тестовый workflow:

  • Trigger: Webhook
  • Respond: Respond to Webhook (или просто Set + Respond)

Скопируй URL и дерни его:





curl -i https://n8n.yourdomain.ru/webhook/your-path

Если получаешь ответ — значит дверь в мастерскую открывается как надо.


Мини-советы от Папы Карло (чтоб не словить “почему оно умерло”)

  • Всегда ставь домен + HTTPS, иначе половина интеграций будет чудить.
  • Включай Websockets в прокси, иначе интерфейс может вести себя странно.
  • Делай бэкап папки ~/.n8n (у нас это volume n8n_data) — там всё важное.
  • Если планируешь серьёзную нагрузку — потом переедем на Postgres, но для старта SQLite норм.