n8n 自动化工作流工具完整安装教程(基于 1Panel + Docker Compose + PostgreSQL)

引言

n8n 是一个开源的自动化工作流工具,类似于 Zapier 或 Node-RED,用于连接各种 API 和服务,实现无代码自动化。它默认使用 SQLite 数据库,但生产环境中推荐使用 PostgreSQL 以提升并发、安全性和稳定性。

本教程指导您在 1Panel(一个开源服务器管理面板)环境中,通过 Docker Compose 部署 n8n + PostgreSQL。整个过程使用命令行一键执行,避免手动输入。假设您的服务器已安装 Docker 和 Docker Compose(1Panel 默认支持)。

关键特性

  • 域名:https://example.gwozai.com(需自行配置 SSL)。
  • 数据库:PostgreSQL 15(用户名:n8n,数据库:n8n,密码:123456)。
  • 端口:n8n 管理面板在 5678 端口暴露。
  • 时区:Asia/Shanghai。
  • 网络:自定义桥接网络 n8n-network

预计时间:10-15 分钟。

前提条件

  1. 服务器环境

    • Linux 系统(推荐 CentOS 8+ / Ubuntu 20.04+)。
    • 已安装 1Panel(参考官方文档:1Panel 在线安装)。
      • 安装命令(RedHat/CentOS):
        curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
        
    • Docker 和 Docker Compose 已启用(1Panel 内置 Docker 管理)。
  2. 域名配置

    • 已解析域名 example.gwozai.com 到服务器 IP。
    • 服务器防火墙开放 5678 端口(临时,用于测试;生产用反向代理)。
  3. 权限

    • 以 root 或 sudo 用户执行命令。
    • 确保 /opt/1panel/apps 目录可写(1Panel 默认路径)。
  4. 备份提醒

    • 部署前备份服务器数据。教程中的命令会删除旧数据目录(n8n、n8ndata、postgres-data),以避免权限冲突。

步骤 1: 准备环境和一键部署

进入 1Panel 的 apps 目录,执行以下一键命令。该命令会:

  • 停止现有容器(如果有)。
  • 删除旧数据目录(丢失数据,请备份!)。
  • 重建目录并设置 777 权限(确保容器可读写)。
  • 生成 docker-compose.yml 文件。
  • 启动服务并显示 n8n 日志。
cd /opt/1panel/apps && \
docker compose down && \
rm -rf n8n n8ndata postgres-data && \
mkdir -p n8n n8ndata postgres-data && \
chmod -R 777 n8n n8ndata postgres-data && \
cat > docker-compose.yml << 'EOF'
services:
  postgres:
    image: postgres:15
    container_name: n8n_postgres
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: "123456"
      POSTGRES_DB: n8n
    ports:
      - "5432:5432"
    volumes:
      - /opt/1panel/apps/postgres-data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - n8n-network
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_SCHEMA: public
      DB_POSTGRESDB_PASSWORD: "123456"
      N8N_HOST: example.gwozai.com
      WEBHOOK_URL: https://example.gwozai.com/
      GENERIC_TIMEZONE: Asia/Shanghai
      TZ: Asia/Shanghai
      N8N_BASIC_AUTH_ACTIVE: false
    volumes:
      - /opt/1panel/apps/n8n:/home/node/.n8n
      - /opt/1panel/apps/n8ndata:/home/node/n8ndata
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - n8n-network
networks:
  n8n-network:
    driver: bridge
EOF
docker compose up -d && docker compose logs -f n8n
  • 执行后
    • Ctrl+C 退出日志查看。
    • 检查容器状态:docker compose ps(应显示 postgres 和 n8n 为 Up)。
    • 查看网络:docker network ls(应有 apps_n8n-network)。

步骤 2: 验证安装

  1. 检查 PostgreSQL 挂载

    ls -lah /opt/1panel/apps/postgres-data
    
    • 成功标志:看到 basepg_walpg_statpostgresql.conf 等文件夹/文件(容器启动后自动生成)。
  2. 访问 n8n 面板

    • 浏览器打开:http://您的服务器IP:5678
    • 首次访问会提示设置管理员账户(用户名/密码,自定义)。
    • 成功标志:看到 n8n 工作流编辑器界面,无错误提示。
  3. 检查日志

    cd /opt/1panel/apps && docker compose logs n8n
    
    • EACCES: permission denied 错误。
    • 看到类似 n8n ready on 0.0.0.0, port 5678 的启动信息。
  4. 测试数据库连接

    • 在 n8n 面板创建简单工作流(e.g., HTTP Request 节点),保存并执行。
    • 或命令行测试:docker exec -it n8n_postgres psql -U n8n -d n8n -c "\dt"(列出表,应无报错)。

步骤 3: 配置反向代理和 SSL(推荐生产环境)

使用 1Panel 配置 Nginx 反向代理,将 http://服务器IP:5678 映射到 https://example.gwozai.com

  1. 登录 1Panel 面板(默认 http://服务器IP:8000)。

  2. 导航到 网站 > 添加网站

    • 类型:静态网站。
    • 域名:example.gwozai.com
    • 根目录:/opt/1panel/apps(任意,可忽略)。
    • SSL:启用(Let’s Encrypt 自动申请)。
  3. 编辑网站配置(Nginx):

    • 添加代理规则:
      location / {
          proxy_pass http://127.0.0.1:5678;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }
      
    • 保存并重启 Nginx。
  4. 测试:访问 https://example.gwozai.com,应重定向到 n8n 面板。

安全提示:启用基本认证(在 docker-compose.yml 中设置 N8N_BASIC_AUTH_ACTIVE: true,添加 N8N_BASIC_AUTH_USERN8N_BASIC_AUTH_PASSWORD),然后重启容器。注意:密码 123456 简单,生产环境请更换为强密码。

步骤 4: 备份和恢复

备份

  1. PostgreSQL 数据库

    cd /opt/1panel/apps/postgres-data && tar -czvf n8n_postgres_backup_$(date +%Y%m%d_%H%M%S).tar.gz .
    
    • 下载 tar.gz 文件到本地(用 1Panel 文件管理器)。
  2. n8n 配置和数据

    cd /opt/1panel/apps && tar -czvf n8n_data_backup_$(date +%Y%m%d_%H%M%S).tar.gz n8n n8ndata
    
  3. 完整容器备份(可选):docker compose down && tar -czvf full_backup.tar.gz /opt/1panel/apps

恢复

  1. 停止容器:cd /opt/1panel/apps && docker compose down
  2. 解压备份:tar -xzvf n8n_postgres_backup.tar.gz -C /opt/1panel/apps/postgres-data(类似其他目录)。
  3. 启动:docker compose up -d

步骤 5: 升级 n8n

  1. 拉取新镜像:

    cd /opt/1panel/apps && docker compose pull
    
  2. 重启服务:

    docker compose up -d
    
  3. 验证版本:

    docker exec n8n n8n --version
    
    • 如需指定版本,编辑 docker-compose.yml 中的 image: docker.n8n.io/n8nio/n8n:1.x.x,然后 docker compose up -d

注意:升级前备份数据。PostgreSQL 数据兼容性好,但测试工作流。

步骤 6: 维护和管理

  • 停止/重启

    cd /opt/1panel/apps && docker compose down  # 停止
    docker compose up -d  # 重启
    
  • 监控

    • 1Panel Docker 页面查看容器资源。
    • 日志:docker compose logs -f
  • 自定义配置

    • 编辑 docker-compose.yml(e.g., 添加环境变量),然后 docker compose up -d
    • 数据库一致性:用户名/密码/主机/端口必须匹配。
  • 权限优化(生产):

    • 777 适合调试;生产用 chown -R 1000:1000 n8n n8ndata(node 用户 UID)。

故障排除

问题 可能原因 解决方案
EACCES 权限错误 目录权限不足 运行 chmod -R 777 /opt/1panel/apps/{n8n,n8ndata} 并重启。
PostgreSQL 连接失败 密码/主机不匹配 检查 docker-compose.yml 中的环境变量;日志:docker compose logs postgres
n8n 无法启动 依赖未就绪 确认 depends_on 和 healthcheck;等待 30s 后重试。
端口冲突 5678 已占用 修改 ports 为 - "其他端口:5678"
SSL 证书错误 域名未解析 检查 DNS;1Panel 重新申请 Let’s Encrypt。
数据丢失 命令中 rm -rf 备份前勿执行;恢复用 tar 解压。
  • 通用调试docker compose logs 查看全日志;docker inspect n8n 检查容器细节。
  • 社区支持:n8n 官网 docs.n8n.io 或 GitHub issues。

结语

部署完成后,您即可在 n8n 面板创建工作流,实现自动化(如邮件通知、API 集成)。如果自定义需求(如多实例、队列模式),参考 n8n 文档扩展 docker-compose.yml。

如遇问题,提供日志输出,我可进一步协助!

写文章用