Эта инструкция показывает, как развернуть n8n с PostgreSQL за реверс‑прокси Traefik с автоматическими сертификатами Let’s Encrypt. Все файлы и настройки будут находиться в одной директории, а запуск выполняется одной командой.
Docker уже был предварительно установлен на нашем VPS Unihost модели UNH, поэтому этап его установки в этом руководстве опущен. При оформлении заказа вы также можете выбрать образ операционной системы с уже установленным Docker — просто укажите нужную ОС в конфигураторе.

Предварительные условия
DNS: создайте A‑запись вида
n8n.<ваш_домен> → <публичный IP сервера>.
Порты: на сервере должны быть открыты 80/tcp и 443/tcp.
Создаём директорию и файл .env
mkdir -p ~/n8n-stack && cd ~/n8n-stack
nano .env
Вставьте содержимое и обязательно замените DOMAIN, ACME_EMAIL, а также пароли на свои надёжные значения:
# === Домен и Let's Encrypt ===
DOMAIN=yourdomain # указать свой домен
ACME_EMAIL=admin@yourdomain # реальный email для Let's Encrypt
# === Доступ к UI n8n (basic-auth встроенная в n8n) ===
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=ChangeMe_Soon
# === URL/протоколы n8n ===
N8N_HOST=${DOMAIN}
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://${DOMAIN}
N8N_SECURE_COOKIE=true
N8N_RUNNERS_ENABLED=true
# === База данных ===
POSTGRES_USER=n8n
POSTGRES_PASSWORD=n8npass
POSTGRES_DB=n8n
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
DB_POSTGRESDB_USER=${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
Заметки:
- ACME_EMAIL — реальная почта для регистрации аккаунта в Let’s Encrypt и уведомлений.
- N8N_BASIC_AUTH_* включает базовую авторизацию на веб‑интерфейсе n8n.
- WEBHOOK_URL должен указывать на ваш публичный HTTPS‑домен (без завершающего слеша).
Создаём docker-compose.yml
nano docker-compose.yml
Вставьте:
networks:
proxy:
name: proxy
internal:
volumes:
traefik_letsencrypt:
n8n_data:
pg_data:
services:
traefik:
image: traefik:v3.0
container_name: traefik
restart: unless-stopped
command:
- --api.dashboard=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --certificatesresolvers.lehttp.acme.httpchallenge=true
- --certificatesresolvers.lehttp.acme.httpchallenge.entrypoint=web
- --certificatesresolvers.lehttp.acme.email=${ACME_EMAIL}
- --certificatesresolvers.lehttp.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- traefik_letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy
postgres:
image: postgres:16
container_name: n8n-postgres
restart: unless-stopped
env_file: .env
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- pg_data:/var/lib/postgresql/data
networks:
- internal
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
env_file: .env
depends_on:
- postgres
volumes:
- n8n_data:/home/node/.n8n
networks:
- internal
- proxy
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.routers.n8n.rule=Host(`${DOMAIN}`)
- traefik.http.routers.n8n.entrypoints=websecure
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.tls.certresolver=lehttp
- traefik.http.services.n8n.loadbalancer.server.port=5678
Почему так:
- Задано фиксированное имя сети proxy, чтобы Traefik и n8n гарантированно видели друг друга.
- env_file: .env у postgres и n8n — все переменные из .env попадут внутрь контейнеров.
- Порт 5678 у n8n не публикуется наружу — доступ только через Traefik по HTTPS.
- Лейбл traefik.docker.network=proxy явно указывает Traefik, по какой сети подключаться к n8n, если контейнер в нескольких сетях.
Шаг 3. Запуск
docker compose up -d
Подождите 10–60 секунд: n8n выполнит миграцию базы данных, а Traefik при первом обращении к домену запросит сертификат Let’s Encrypt. Через пару минут сертификат будет активен.
Если сертификат не активен спустя несколько минут, возможно, ваш браузер закешировал страницу. Попробуйте открыть n8n в режиме Инкогнито.
Краткий вывод
После выполнения этих шагов вы получите полностью рабочую инстанцию n8n с базой данных PostgreSQL и автоматическим HTTPS через Traefik.
Такое решение удобно тем, что:
- всё управляется одной командой docker compose up -d;
- сертификаты Let’s Encrypt обновляются автоматически;
- база данных изолирована и доступна только контейнеру n8n;
- можно легко добавлять новые сервисы за Traefik на других поддоменах.