Установка n8n с HTTPS через Docker Compose и Traefik

В этой статье мы покажем, как развернуть n8n с поддержкой HTTPS на вашем сервере с Ubuntu, используя Docker Compose и обратный прокси Traefik. Это рекомендованный способ установки для продакшн-окружения.

Шаг 1. Подключитесь к серверу

Подключитесь к серверу по SSH. Подробная инструкция: Как подключиться к серверу по SSH.

Шаг 2. Установите Docker и Docker Compose

Следуйте нашей инструкции: Как установить Docker и Docker Compose.

Шаг 3. Подготовьте домен

Для подключения через HTTPS вам нужен домен, например n8n.example.kz, который должен указывать на IP-адрес сервера.

Создайте следующую A-запись у вашего регистратора или в панели DNS-хостинга:

ИмяТипЗначение
n8nAIP вашего сервера

Если вы используете DNS-хостинг от Unihost.kz, убедитесь, что у домена установлены NS-серверы ns1.unihost.kz и ns2.unihost.kz. Инструкция по смене NS: Как изменить NS-серверы домена.
Инструкция по настройке А-записи: Как прописать A-запись для домена .

Шаг 4. Создайте папку проекта

mkdir /opt/n8n
cd /opt/n8n

Шаг 5. Создайте файл .env

Создайте файл .env в папке проекта со следующими данными:

DOMAIN_NAME=example.kz
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Asia/Almaty
SSL_EMAIL=you@example.kz

После настройки, n8n будет доступен по адресу https://n8n.example.kz.

Шаг 6. Создайте папки для данных

mkdir local-files

Шаг 7. Создайте docker-compose.yml

Создайте файл docker-compose.yml в той же директории и вставьте следующий код:

services:
  traefik:
    image: "traefik"
    restart: always
    command:
      - "--api.insecure=true"
      - "--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=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.n8n.tls=true
      - 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=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n.headers.STSPreload=true
      - traefik.http.routers.n8n.middlewares=n8n@docker
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files

volumes:
  n8n_data:
  traefik_data:Code language: PHP (php)

Шаг 8. Запустите n8n

docker compose up -d

n8n будет автоматически доступен по адресу https://n8n.example.kz (подставьте свой домен).

Примечание

Если вы купите облачный сервер в Unihost.kz, установка n8n с HTTPS может быть выполнена нашей технической поддержкой по вашему запросу.