Перейти к содержанию

Обзор развертывания n8n на сервере

Предпосылки и предварительные требования

  • Сервер на Ubuntu 22.04 (Jammy Jellyfish) с правами суперпользователя.
  • Открытые порты 80 и 443 для внешнего доступа.
  • Доступ к имени домена, которое будет использоваться в переменной final_domain.
  • Установлен Docker CE v28.5.2 (поставляемый в конфигурации) и Docker Compose.

Структура файлов и каталогов

/data                         # каталог для хранения данных, созданный при установке  
/root/n8n-compose-file/       # место хранения файла docker‑compose  
│   └─ compose.yml            # основной конфиг для Traefik и n8n  
/root/letsencrypt/            # каталог для сертификатов Let's Encrypt  
/root/.n8n                    # папка, в которой n8n хранит базу SQLite и конфиги  
/root/local-files              # место для файлов, загружаемых через n8n  
Все каталоги создаются с правами root:root.

Права доступа и безопасность

  • Каталоги /data, /root/n8n-compose-file, /root/letsencrypt, /root/.n8n и /root/local-files имеют режим 0750 (чтение, запись и исполнение только для владельца).
  • Файл compose.yml создаётся с правами 0644 (чтение/запись для владельца, только чтение для остальных).
  • Внутри контейнера n8n выполняется от пользователя root, но сам сервис доступен наружу только через Traefik, а локальный порт 5678 привязан к 127.0.0.1, что ограничивает прямой доступ к приложению.

Базы данных

Для хранения рабочих процессов и настроек n8n используется SQLite, который сохраняется в каталоге /root/.n8n. Никаких внешних СУБД не требуется.

Контейнеры Docker и их запуск

Traefik

  • Изображение: traefik (последняя версия).
  • Команда: включён провайдер Docker, отключено автоматическое открытие сервисов, заданы два entrypoint: web (80 п) и websecure (443 п).
  • TLS‑разрешатель: mytlschallenge – используется автоматический TLS‑challenge Let's Encrypt.
  • Порты: 80:80 и 443:443.
  • Волюмы:
  • /root/letsencrypt:/letsencrypt – место хранения файлов сертификатов.
  • /var/run/docker.sock:/var/run/docker.sock:ro – доступ к Docker‑демону.

n8n

  • Изображение: docker.n8n.io/n8nio/n8n:latest.
  • Порты: 127.0.0.1:5678:5678 – внутренний порт, доступный только локально.
  • Лейблы (Traefik‑реквизиты):
  • Маршрутизатор с правилом Host(final_domain), при наличии temp_domain добавляется второе правило.
  • Включён TLS, сертификаты берутся от mytlschallenge.
  • Перенаправление HTTPS, HTTP‑заголовки безопасности (STS, X‑SSRF, X‑Content‑Type‑Nosniff).
  • Переменные окружения:
    N8N_HOST={{ final_domain }}
    N8N_PORT=5678
    N8N_PROTOCOL=https
    NODE_ENV=production
    WEBHOOK_URL=https://{{ final_domain }}/
    GENERIC_TIMEZONE=Europe/Amsterdam
    
  • Волюмы:
  • /root/.n8n:/root/.n8n – данные и база.
  • /root/local-files:/files – каталог для загружаемых файлов.

Файл docker‑compose

version: "3"

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=hkadm@hostkey.com"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /root/letsencrypt:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: always
    user: root
    ports:
      - "127.0.0.1:5678:5678"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n.rule=Host(`{{ final_domain }}`){% if temp_domain is defined and (temp_domain | default('') | length > 0) %} || Host(`{{ temp_domain }}`){% endif %}
      - traefik.http.routers.n8n.tls=true
      - traefik.http.services.n8n.loadbalancer.server.port=5678
      - traefik.http.routers.n8n.entrypoints=web,websecure
      - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n.headers.SSLHost={{ final_domain }}
      - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n.headers.STSPreload=true
      - traefik.http.routers.n8n.middlewares=n8n@docker
    environment:
      - N8N_HOST={{ final_domain }}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://{{ final_domain }}/
      - GENERIC_TIMEZONE=Europe/Amsterdam
    volumes:
      - /root/.n8n:/root/.n8n
      - /root/local-files:/files

Прокси серверы

Traefik выступает в роли обратного прокси, автоматически выдавая сертификаты Let’s Encrypt через TLS‑challenge.
- Указанный адрес электронной почты hkadm@hostkey.com используется для регистрации Let’s Encrypt.
- Сертификаты сохраняются в /root/letsencrypt/acme.json.
- Служба доступна по домену final_domain (и, при необходимости, temp_domain).

Настройки прав, запуск, остановка и обновление

Действие Команда Описание
Запуск docker compose up -d Запускает оба контейнера в фоне.
Остановка docker compose down Останавливает и удаляет контейнеры, но сохраняет тома.
Перезапуск docker compose restart Перезапускает все сервисы без скачивания новых образов.
Обновление docker compose pull && docker compose up -d Загружает последние версии образов и обновляет контейнеры.

Перед первым запуском docker compose up -d рекомендуется дождаться окончания процесса в течение 10 секунд (см. паузу в шаблоне).

Порт 5678 открывается только для локального интерфейса, что защищает прямой доступ к приложению.
Все внешние запросы проходят через Traefik, где реализуется HTTPS‑шифрование, перенаправление HTTP → HTTPS и защита заголовками.

Таким образом, после выполнения указанных шагов на клиентской машине будет полностью функционирующий сервис n8n, доступный по HTTPS через заданный домен, с автоматическим управлением сертификатами и безопасным хранением данных.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×