🧭 总体目标
把 本地虚拟机 /home/flexus/n8n-dev
➡ 完整迁移到云服务器 /home/projects/docker-services/n8n-dev
(实际目录依据自己的目录结构自行修改)
保证:
-
workflow / datatable / credential 不丢
-
images、drafts 文件可继续读写(我的n8n做的目录映射,如果没有可以不用管)
-
docker-compose.yml 基本不改
一、在【本地虚拟机】执行(只做 3 件事)
1️⃣ 停止 n8n(必须)
bash
cd /home/flexus/n8n-dev
docker-compose down
2️⃣ 打包整个项目目录
⚠️ 不是只打包 n8n_data,是整个 n8n-dev
bash
cd /home/flexus
tar -czvf n8n-dev.tar.gz n8n-dev
生成:
/home/flexus/n8n-dev.tar.gz
bash
3️⃣ 拷贝到云服务器
在本地执行(示例):
bash
scp n8n-dev.tar.gz user@云服务器IP:/home/projects/docker-services/
(或者手动采用其他方式将压缩包复制到云服务器对应目录即可)
二、在【云服务器】执行(核心步骤)
4️⃣ 解压到目标目录
bash
cd /home/projects/docker-services
tar -xzvf n8n-dev.tar.gz
最终目录应为:
bash
/home/projects/docker-services/n8n-dev
├── docker-compose.yml
├── .env
├── n8n_data/
├── images/
├── drafts/
├── n8n_latest.tar
5️⃣ 修正目录权限(⚠️非常关键)
n8n 容器内用户是 node (uid=1000):
n8n应用使用过程中创建的一些映射目录均要执行
我创建了两个目录(images、drafts)没有创建目录,只执行n8n自带的数据目录即可(配置在yml中的,我的名称是:n8n_data)
bash
cd /home/projects/docker-services/n8n-dev
sudo chown -R 1000:1000 n8n_data images drafts
sudo chmod -R 775 n8n_data images drafts
否则可能会报错 Permission denied / Forbidden 等问题
6️⃣(可选)加载本地镜像 n8n_latest.tar
如果云服务器拉不动镜像,加载本地的镜像(提前在主机下载好的,详情见上一篇文章):
bash
docker load -i n8n_latest.tar
三、启动并验证
7️⃣ 启动 n8n
bash
cd /home/projects/docker-services/n8n-dev
docker-compose up -d
查看日志:
bash
docker logs -f n8n
8️⃣ 验证清单(2 分钟)
打开:
bash
http://云服务器IP:5678
确认以下几点:
-
✅ Workflow 全在
-
✅ DataTable 数据还在
-
✅ Read / Write File 节点
-
- /home/node/.n8n-files/images
-
- /home/node/.n8n-files/drafts
-
- 能正常读写
-
✅ 不再出现 Permission denied
四、docker-compose.yml 是否需要改
依据个人的配置代码,我的代码配置的映射目录,主机目录用的都是相对目录,直接不用修改,直接使用。
bash
volumes:
- ./n8n_data:/home/node/.n8n
- ./images:/home/node/.n8n-files/images
- ./drafts:/home/node/.n8n-files/drafts
只要目录 + 权限正确,行为 100% 复现。
五、常见踩坑
| 现象 | 原因 | 解决 |
|---|---|---|
| 文件写入失败 | 权限不对 | chown 1000:1000 |
| workflow 不见 | 没拷 n8n_data | 重新迁移 |
| drafts/images 空 | 路径不一致 | 保证相对路径 |
| 能启动但异常 | 没停机就打包 | 重新来一遍 |