Self-hosted n8n: Полный гид по установке и настройке workflow automation

Научитесь самостоятельно разворачивать n8n на своем сервере. Подробный гид по Docker-установке, настройке автоматизаций и интеграции с AI для эффективного self-hosting.

Не указано

Установка Docker и Docker Compose (Linux)

Обновите индексы пакетов, добавьте официальный репозиторий Docker и установите необходимые пакеты. Это базовое окружение для запуска n8n в контейнерах.

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Создание директории и файла docker-compose.yml

Создайте отдельную директорию для проекта и файл конфигурации docker-compose.yml, который определяет сервисы n8n и PostgreSQL. Замените плейсхолдеры на свои значения.

mkdir -p ~/n8n-stack && cd ~/n8n-stack
touch docker-compose.yml

Конфигурация docker-compose.yml

Заполните файл docker-compose.yml содержимым для развертывания n8n и PostgreSQL. Обязательно укажите свои домен (N8N_HOST), пароли (CHANGE_ME_DB_PASSWORD) и ключ шифрования (CHANGE_ME_LONG_RANDOM_STRING).

version: "3.8"

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    restart: unless-stopped
    environment:
      - TZ=Europe/Moscow
      - N8N_HOST=your.domain.tld
      - N8N_PORT=5678
      - WEBHOOK_URL=https://your.domain.tld/webhook/
      - N8N_ENCRYPTION_KEY=CHANGE_ME_LONG_RANDOM_STRING
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=CHANGE_ME_DB_PASSWORD
    ports:
      - "5678:5678"
    depends_on:
      - postgres
    networks:
      - n8n-net
    volumes:
      - n8n_data:/home/node/.n8n

  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=CHANGE_ME_DB_PASSWORD
      - POSTGRES_DB=n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  n8n-net:
    driver: bridge

volumes:
  n8n_data:
  postgres_data:

Запуск контейнеров

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

docker compose up -d
docker compose logs -f n8n

Первый вход и настройка аккаунта

Откройте в браузере ваш домен (или localhost:5678). При первом запуске создайте учетную запись администратора, затем проверьте настройки хоста и URL в разделе Settings -> Instance Settings.

# Открыть в браузере
# https://your.domain.tld
# или
http://localhost:5678

Настройка Telegram Bot

Найдите бота @BotFather в Telegram, создайте нового бота и сохраните токен. Отправьте боту любое сообщение, чтобы начать чат. Получите свой Chat ID, используя бота @userinfobot или API запрос.

curl "https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates"

Создание Credentials в n8n

В интерфейсе n8n перейдите в раздел Credentials, добавьте новый набор данных типа Telegram Bot, вставьте полученный токен и сохраните.

Построение Workflow

Создайте новый workflow. Добавьте узел Webhook (Trigger) и скопируйте сгенерированный URL. Добавьте узел Telegram (Action -> Telegram -> Send Message), выберите созданные Credentials и укажите Chat ID. В тексте сообщения используйте выражения (например, {{ $json.message }}).

curl -X POST -H "Content-Type: application/json" -d '{"message":"Тестовое событие"}' https://your.domain.tld/webhook/your-uuid

Резервное копирование

Для сохранения данных создайте скрипт бэкапа. Он делает дамп PostgreSQL и архивирует том с данными n8n. Рекомендуется добавить скрипт в cron для автоматизации.

#!/bin/bash
set -e
BACKUP_DIR="$HOME/n8n-backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Дамп БД
docker exec n8n-postgres pg_dump -U n8n n8n > "$BACKUP_DIR/n8n.sql"

# Копия тома n8n_data в архив
docker run --rm -v n8n_data:/data -v "$BACKUP_DIR:/backup" alpine sh -c "tar czf /backup/n8n_data.tar.gz -C /data ."

# Очистка старых бэкапов (оставить последние 7)
ls -dt ~/n8n-backups/* | tail -n +8 | xargs -r rm -rf