AI 自动化部署手册

n8n 部署

2026 年 n8n VPS 自托管部署指南:Docker Compose、PostgreSQL、HTTPS 与备份

从零把 n8n 部署到 VPS:服务器规格、Docker Compose、PostgreSQL、Caddy HTTPS、Webhook URL、加密密钥、备份和安全检查。

更新:2026-05-01 · 预计阅读 14 分钟
链接说明:本文优先给出可执行方法。若未来接入返佣链接,会保持清晰披露,不影响正文步骤。

如果你只是想快速做自动化,并且没有 Linux 运维经验,优先考虑 n8n Cloud 或 Make。自托管 n8n 的优势是数据和成本可控,但你也要负责更新、备份、证书、数据库和安全。

查看 n8n Cloud 官方方案

下面这套方案适合小团队、个人自动化、内部工具原型:一台 VPS + Docker Compose + PostgreSQL + Caddy 自动 HTTPS。它比单容器 SQLite 更接近生产环境,也方便以后迁移。

你应该先准备什么

如果你还没有 VPS,可以先比较几家支持 Docker、快照、固定公网 IP 的服务商。本文默认不做性能承诺,选择标准放在可维护性和风险控制上。

查看 Vultr 官方站点 查看 Hostinger VPS 官方站点

第一步:安装 Docker

登录服务器后,先更新系统并安装 Docker。不同发行版的安装方式会变化,最终只要确认两个命令可用:

docker --version
docker compose version

n8n 官方 Docker Compose 文档也强调,自托管需要你理解服务器、容器、安全和配置。没有这些经验时,云服务通常更省心。

第二步:创建目录和环境变量

mkdir -p ~/n8n-stack
cd ~/n8n-stack
openssl rand -hex 32

把生成的随机字符串保存为 N8N_ENCRYPTION_KEY。这个密钥用于加密凭据,丢失后会影响已保存凭据的读取。不要把它提交到 Git。

创建 .env

DOMAIN_NAME=example.com
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Asia/Shanghai
SSL_EMAIL=you@example.com

POSTGRES_USER=n8n
POSTGRES_PASSWORD=change-this-long-password
POSTGRES_DB=n8n

N8N_ENCRYPTION_KEY=paste-your-random-key
N8N_HOST=n8n.example.com
WEBHOOK_URL=https://n8n.example.com/
N8N_PROTOCOL=https
N8N_PROXY_HOPS=1

WEBHOOK_URL 很重要。n8n 在反向代理后面运行时,内部端口通常不是公网 HTTPS 地址。手动设置后,Slack、飞书、Stripe、Webhook 等外部服务才能拿到正确回调地址。

第三步:写 Docker Compose

创建 compose.yaml

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: docker.n8n.io/n8nio/n8n:stable
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      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}
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      N8N_HOST: ${N8N_HOST}
      N8N_PROTOCOL: ${N8N_PROTOCOL}
      WEBHOOK_URL: ${WEBHOOK_URL}
      N8N_PROXY_HOPS: ${N8N_PROXY_HOPS}
      N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files
    expose:
      - "5678"

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    depends_on:
      - n8n
    ports:
      - "80:80"
      - "443:443"
    environment:
      N8N_HOST: ${N8N_HOST}
      SSL_EMAIL: ${SSL_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

volumes:
  postgres_data:
  n8n_data:
  caddy_data:
  caddy_config:

创建 Caddyfile

{$N8N_HOST} {
  encode gzip zstd
  reverse_proxy n8n:5678
  tls {$SSL_EMAIL}
}

启动:

mkdir -p local-files
docker compose up -d
docker compose logs -f n8n

浏览器打开 https://n8n.example.com,完成第一个 owner 账号创建。

第四步:上线前安全检查

n8n 官方安全文档建议从 SSL、SSO、2FA、执行数据脱敏、公共 API、节点限制、SSRF 防护等方面做安全加固。个人 VPS 至少要做到 HTTPS、强密码、2FA、备份和及时更新。

第五步:备份和恢复

最低限度备份两类数据:

手动备份示例:

cd ~/n8n-stack
mkdir -p backups
docker compose exec -T postgres pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" > "backups/n8n-$(date +%F).sql"
docker run --rm -v n8n-stack_n8n_data:/data -v "$PWD/backups:/backup" alpine tar czf "/backup/n8n-data-$(date +%F).tar.gz" -C /data .

恢复前先停服务,并确认 N8N_ENCRYPTION_KEY 是原来的值。

docker compose stop n8n
docker compose exec -T postgres psql -U "$POSTGRES_USER" "$POSTGRES_DB" < backups/n8n-2026-05-01.sql
docker compose up -d

第六步:什么时候需要升级架构

单机 Compose 足够跑很多个人和小团队自动化。出现下面情况,再考虑队列模式:

n8n 的队列模式需要 Redis、PostgreSQL 和 worker。官方文档也提醒,队列模式下 SQLite 不适合,worker 需要共享同一个加密密钥。

常见问题

n8n 自托管比云端便宜吗?

小流量通常便宜,但你的时间、更新、备份和安全都要算成本。如果你不想维护服务器,n8n Cloud 或 Make 更合适。

查看 Make 官方站点

没有域名可以部署吗?

可以本地或内网使用,但公开 Webhook、OAuth 回调和 HTTPS 会变麻烦。长期使用建议绑定域名。

为什么不用 SQLite?

SQLite 适合快速体验。只要进入长期使用、多人协作、重要凭据和稳定任务,PostgreSQL 更容易维护和迁移。

可以把 n8n 暴露在公网吗?

可以,但要认真做 HTTPS、账号保护、更新、备份和访问控制。不要把未更新的公开实例长期裸奔。

参考资料