GHOSTVPS / 自动化

使用 Docker 与 SSH 隧道私有运行 n8n

无需将 5678 端口暴露到互联网,即可运行私有 n8n 编辑器。

更新日期 · GhostVPS

开始之前

需要新的 Linux VPS、sudo、Docker Engine 28 以上、Compose v2 和可用 SSH。先按 Docker 官方文档安装。本例使用 SQLite 和单容器,用于体验与手动工作流,不是生产集群或公开 webhook 部署。不要覆盖已有 n8n 安装。

检查前提条件

在 VPS 运行两条检查,均需成功。缺少组件时使用 Docker 官方安装文档,不要将未知安装脚本直接传给 root shell。资源应按工作流规划,不要把示例内存当作容量保证。

您的 VPS · Linux 终端

sudo docker version
sudo docker compose version
检查前提条件. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。
检查前提条件. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。

创建项目并选择版本

创建新目录和 .env。先查看 n8n 官方发布列表,将 REPLACE_WITH_REVIEWED_STABLE_VERSION 替换为明确受支持的稳定版本,并阅读安全及升级说明。不要保留占位符或使用未经审查的浮动标签。

您的 VPS · Linux 终端

mkdir -m 700 ~/n8n-private
cd ~/n8n-private
nano .env

文件内容

N8N_VERSION=REPLACE_WITH_REVIEWED_STABLE_VERSION
创建项目并选择版本. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。
创建项目并选择版本. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。

保存仅监听本地的 Compose 配置

在项目目录保存为 compose.yaml。只发布到 127.0.0.1。命名卷保留数据库与自动生成的加密密钥,使容器重建后数据仍在。不要改为 0.0.0.0,也不要挂载 Docker socket。

文件内容

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION:?Set N8N_VERSION in .env}
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      TZ: Etc/UTC
      GENERIC_TIMEZONE: Etc/UTC
      N8N_HOST: localhost
      N8N_PORT: "5678"
      N8N_PROTOCOL: http
      N8N_EDITOR_BASE_URL: http://localhost:5678
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  n8n_data:
保存仅监听本地的 Compose 配置. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。
保存仅监听本地的 Compose 配置. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。

验证后启动

先单独执行权限和 config 检查。有错误就修复,再执行 pull 和 up。启动后 compose ps 应显示 n8n 运行。失败时查看日志,不要为了绕过隧道问题而公开编辑器。

您的 VPS · Linux 终端

chmod 600 .env &&
grep -Eq '^N8N_VERSION=[0-9]+[.][0-9]+[.][0-9]+$' .env &&
sudo docker compose config --quiet &&
sudo docker compose pull &&
sudo docker compose up -d &&
sudo docker compose ps
验证后启动. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。
验证后启动. 真实无 root 权限 Docker 实验,此环境不需要 sudo。n8n 2.45.5 为录制演示所用版本,并非最新生产版本推荐。

使用 SSH 隧道访问

在本地电脑替换账户与示例地址并运行 SSH 命令,通过可信渠道核对指纹。保持终端打开,在同一电脑浏览器访问 http://localhost:5678 并创建所有者账户。本地端口被占用时,将左侧端口改为 15678,并访问 localhost:15678。

您的电脑 · 终端

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:5678:127.0.0.1:5678 deploy@203.0.113.10

以下为隔离环境中 n8n 2.45.5 的真实截图。界面细节可能随版本变化,点击图片可查看原始尺寸。

尚未填写的 n8n 所有者账户设置表单
通过私有 SSH 隧道打开 n8n 后创建所有者账户。截图中尚未输入任何登录凭据。

测试、备份并单独规划公开访问

创建手动触发、使用非敏感测试值的工作流并确认成功。分享日志前请脱敏。升级前一致性备份命名卷、加密密钥与配置,不要使用 down -v。公开 webhook 须另行按当前文档配置域名、TLS 和反向代理。不要通过关闭 secure cookies 绕过错误。

您的 VPS · Linux 终端

sudo docker compose logs --tail=50 n8n

本次验证将 Manual Trigger 连接到 Edit Fields (Set)。添加 message(String)= GhostVPS tutorial check,以及 verified(Boolean)= true。保存后点击 Execute,打开 Edit Fields 的输出并核对两个值。

Edit Fields 中 message 与 verified 的配置
在 Edit Fields 中添加非敏感测试消息与 verified 布尔值。
Manual Trigger 与 Edit Fields 的成功执行状态
两个节点的演示工作流完成真实且成功的手动执行。
包含测试消息与 verified 为 true 的 n8n 输出
Edit Fields 的真实输出:测试消息与 verified = true。

官方参考资料