Ця інструкція показує, як розгорнути 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 ===
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. Запуск
Зачекайте 10–60 секунд: n8n виконає міграцію бази даних, а Traefik під час першого звернення до домену запросить сертифікат Let’s Encrypt. Через кілька хвилин сертифікат буде активний.
Якщо сертифікат не активний через кілька хвилин, можливо, ваш браузер закешував сторінку. Спробуйте відкрити n8n у режимі Інкогніто.
Короткий підсумок
Після виконання цих кроків ви отримаєте повністю робочий екземпляр n8n з базою даних PostgreSQL і автоматичним HTTPS через Traefik.
Це рішення зручне тим, що:
- усе керується однією командою: docker compose up -d;
- сертифікати Let’s Encrypt оновлюються автоматично;
- база даних ізольована та доступна лише контейнеру n8n;
- легко додавати нові сервіси за Traefik на інших піддоменах.