Docker安装n8n并配置自定义扩展节点

 

Here’s the table of contents:

  1. 拉取n8n镜像
  2. 创建数据卷
  3. 迁移用户数据
  4. 权限修复
  5. 下载节点并从扩展目录加载
  6. 使用扩展目录并运行n8n
  7. 其它常用参考命令
  8. 其它

拉取n8n镜像

# Pull latest (stable) version
docker pull docker.n8n.io/n8nio/n8n
# docker pull 10.0.0.11:2001/n8nio/n8n

创建数据卷

# 数据卷创建后默认位置 /var/lib/docker/volumes/
docker volume create n8n_data
# 删除数据卷
# docker volume rm n8n_data

迁移用户数据

# 1. 使用 sudo 获取 root 权限
# 2. 使用 rm -rf 清空目标目录 /var/lib/docker/volumes/n8n_data/_data/ 下的所有内容
# 3. 使用 unzip 解压 /home/ubuntu/.n8n.zip 文件到目标目录
# 4. -o 选项表示覆盖已存在的文件而不提示
# 5. -d 指定解压目录
# 6. 命令使用了 sh -c 来将多个命令组合在一起作为一个整体在 sudo 下执行
sudo sh -c 'rm -rf /var/lib/docker/volumes/n8n_data/_data/* && unzip -o /home/ubuntu/.n8n.zip -d /var/lib/docker/volumes/n8n_data/_data/'

权限修复

# 检查卷挂载权限
docker volume inspect n8n_data
# 修复挂载点权限
sudo chown -R 1000:1000 /var/lib/docker/volumes/n8n_data/_data
# 修复配置文件权限
sudo chmod 600 /var/lib/docker/volumes/n8n_data/_data/config

下载节点并从扩展目录加载

# 1. 创建目标目录
# 2. 下载并解压tgz文件到目标目录
# 3. 删除目标目录中所有非dist文件夹的内容
# 4. 将dist文件夹内的所有文件移动到目标目录
# 5. 删除空的dist文件夹
sudo mkdir -p /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata && \
sudo curl -L 'http://10.0.0.11:8081/repository/npm-internal/n8n-nodes-jsdata/-/n8n-nodes-jsdata-0.1.5.tgz' | \
sudo tar -xzf - --strip-components=1 -C /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata && \
sudo find /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata -mindepth 1 -maxdepth 1 ! -name 'dist' -exec rm -rf {} + && \
sudo mv /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/dist/* /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/ && \
sudo rmdir /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/dist

sudo mkdir -p /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata && \
sudo curl -L 'http://10.0.0.11:8081/repository/npm-internal/n8n-nodes-jsdata/-/n8n-nodes-jsdata-0.1.5.tgz' | \
sudo tar -xzf - --strip-components=1 -C /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata && \
sudo find /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata -mindepth 1 -maxdepth 1 ! -name 'dist' -exec rm -rf {} + && \
sudo sh -c 'mv /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/dist/* /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/' && \
sudo rmdir /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/dist

# 备注:自定义目录加载节点,需要重启服务,并且自定义目录下文件结构如下
# 例如:自定义加载节点位置(该配置支持封号分隔的多个路径),N8N_CUSTOM_EXTENSIONS=/var/lib/docker/volumes/n8n_data/_data/custom
# /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/credentials
# /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/n8n-nodes-node/nodes
# /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/package.json
# /var/lib/docker/volumes/n8n_data/_data/custom/n8n-nodes-jsdata/tsconfig.tsbuildinfo

使用扩展目录并运行n8n

# 增加-d参数后台运行,因为其它配置都是在默认数据卷下操作启动时不需要指定额外配置【生产环境应用启动】
docker run -d -it --rm --name n8n \
  -e N8N_HOST=0.0.0.0 \
  -p 5678:5678 \
  -e N8N_RUNNERS_ENABLED=true \
  -e N8N_COMMUNITY_PACKAGES_ENABLED=true \
  -e N8N_SECURE_COOKIE=false \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n
# 控制台输出命令,因为其它配置都是在默认数据卷下操作启动时不需要指定额外配置
docker run -it --rm --name n8n \
  -e N8N_HOST=0.0.0.0 \
  -p 5678:5678 \
  -e N8N_RUNNERS_ENABLED=true \
  -e N8N_COMMUNITY_PACKAGES_ENABLED=true \
  -e N8N_SECURE_COOKIE=false \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

其它常用参考命令

# 查看镜像列表
docker image ls

# 实时查看日志(类似 tail -f)​​
docker logs -f n8n

# 查看容器状态
docker ps -a | grep n8n

# 停止容器
docker stop n8n

# 重启容器
docker restart n8n

# 删除容器​:如果加了 --rm 参数,停止后会自动删除;否则手动删除
docker rm n8n

# ​​查看容器资源占用​
docker stats n8n

其它

# pipx 命令从私有仓库安装包,设置 --pip-args 参数
pipx install tool-cli -i http://10.0.10.11:8081/repository/pypi/simple --pip-args "--trusted-host 10.0.10.11" --force