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