onlyWeb 文件夹数据存储、私有备份与迁移恢复流程
目录
- 1. 文档目的
- 2. 当前存储方式
- 3. GitHub 上传规则
- 4. 旧 Mac:导出加密数据包
- 5. 旧 Mac:提交到 GitHub Private
- 6. 新 Mac:拉取项目
- 7. 新 Mac:解密并解压数据包
- 8. 新 Mac:恢复数据到文件夹
- 9. 新 Mac:启动和验证
- 10. LinuxOS 服务器恢复方式
- 11. 日常更新流程
- 12. 常见问题
1. 文档目的
onlyWeb 已改为文件夹持久化,不再把 SQLite 数据库和上传文件放到 Docker volume 中。
这样做的目标是:
数据位置更直观
迁移更简单
整机复制项目文件夹时更容易理解
仍然避免把裸数据库和上传文件直接提交到 GitHub2. 当前存储方式
Docker Compose 现在使用项目目录绑定挂载:
volumes:
- ./data:/app/data
- ./public/uploads:/app/public/uploads对应关系:
data/ SQLite 数据库目录,对应容器内 /app/data
public/uploads/ 上传文件目录,对应容器内 /app/public/uploadsSQLite 默认文件路径仍然是容器内路径:
DATABASE_PATH=/app/data/onlyweb.db但因为有绑定挂载,实际文件会落在项目目录:
data/onlyweb.db上传文件会落在项目目录:
public/uploads/3. GitHub 上传规则
.gitignore 已配置为不上传运行数据目录:
data/
public/uploads/也不上传明文敏感文件:
.env
*.db
backup/
private-backups/*只允许上传加密后的备份包:
private-backups/onlyweb-private-data.tar.gz.enc推荐规则:
GitHub Private:代码、文档、Docker 配置、加密备份包
不上传:.env 明文、data/、public/uploads/、裸数据库、明文备份文件4. 旧 Mac:导出加密数据包
4.1 进入项目目录
cd /Users/mac/workspace/onlyWeb4.2 确认数据文件夹存在
ls -la data
ls -la public/uploads如果目录不存在,先启动一次项目让 Docker 自动创建:
docker compose up -d --build4.3 执行一键导出脚本
./scripts/export-private-backup.sh脚本会自动完成:
1. 检查 data/ 是否存在
2. 检查 public/uploads/ 是否存在
3. 把 data/ 打包为 sqlite_data.tar.gz
4. 把 public/uploads/ 打包为 uploads_data.tar.gz
5. 如果存在 .env,则复制为 .env.backup
6. 生成 MANIFEST.txt
7. 使用 openssl 加密成 onlyweb-private-data.tar.gz.enc
8. 删除导出过程中的明文临时文件执行过程中会要求输入加密密码。
请记住这个密码。新 Mac 或 LinuxOS 恢复时必须使用同一个密码。
4.4 导出结果
成功后会生成:
private-backups/onlyweb-private-data.tar.gz.enc这个文件可以提交到 GitHub Private。
5. 旧 Mac:提交到 GitHub Private
查看状态:
git status --short提交代码、文档、脚本和加密包:
git add .
git commit -m "sync onlyweb folder storage and encrypted data backup"
git push如果只想提交数据备份包:
git add private-backups/onlyweb-private-data.tar.gz.enc
git commit -m "update encrypted onlyweb data backup"
git push6. 新 Mac:拉取项目
新 Mac 需要先安装:
Docker Desktop
Git首次拉取:
cd /Users/mac/workspace
git clone 你的GitHub仓库地址 onlyWeb
cd onlyWeb如果项目已经存在:
cd /Users/mac/workspace/onlyWeb
git pull7. 新 Mac:解密并解压数据包
7.1 使用脚本解密解压
进入项目目录:
cd /Users/mac/workspace/onlyWeb确认加密包存在:
ls -lh private-backups/onlyweb-private-data.tar.gz.enc执行:
./scripts/decrypt-private-backup.sh脚本会要求输入旧 Mac 导出时设置的加密密码。
解密解压结果默认放到:
private-backups/restore/正常会看到:
private-backups/restore/sqlite_data.tar.gz
private-backups/restore/uploads_data.tar.gz
private-backups/restore/.env.backup
private-backups/restore/MANIFEST.txt如果旧 Mac 导出时没有 .env,则不会有 .env.backup。
7.2 手动解密解压方式
如果不使用脚本,可以手动执行:
cd /Users/mac/workspace/onlyWeb
mkdir -p private-backups/restore
openssl enc -d -aes-256-cbc -pbkdf2 \
-in private-backups/onlyweb-private-data.tar.gz.enc | \
tar xzf - -C private-backups/restore这条命令的含义:
openssl enc -d 负责解密 .enc 文件
tar xzf - 负责把解密后的 tar.gz 内容解压到 private-backups/restore/8. 新 Mac:恢复数据到文件夹
8.1 恢复 .env
如果存在:
private-backups/restore/.env.backup可以恢复为:
cp private-backups/restore/.env.backup .env新 Mac 本地访问时,建议检查 .env:
APP_URL=http://localhost:18473如果要局域网访问,改成新 Mac 的局域网 IP:
APP_URL=http://新Mac局域网IP:184738.2 恢复 SQLite 数据库目录
注意:下面命令会清空新 Mac 当前项目目录下的 data/。
mkdir -p data
rm -rf data/*
tar xzf private-backups/restore/sqlite_data.tar.gz -C data8.3 恢复上传文件目录
注意:下面命令会清空新 Mac 当前项目目录下的 public/uploads/。
mkdir -p public/uploads
rm -rf public/uploads/*
tar xzf private-backups/restore/uploads_data.tar.gz -C public/uploads9. 新 Mac:启动和验证
启动:
docker compose up -d --build查看容器:
docker compose ps查看日志:
docker compose logs -f访问:
http://localhost:18473验证作品是否存在:
http://localhost:18473/projects/po-pdf-spec-compare如果能看到“采购订单规格自动核对助手”,说明数据同步成功。
10. LinuxOS 服务器恢复方式
LinuxOS 与新 Mac 的核心逻辑相同,只是通常使用 docker-compose V1。
10.1 拉取代码
cd /root/onlyWeb
git pull10.2 解密解压
./scripts/decrypt-private-backup.sh也可以手动执行:
mkdir -p private-backups/restore
openssl enc -d -aes-256-cbc -pbkdf2 \
-in private-backups/onlyweb-private-data.tar.gz.enc | \
tar xzf - -C private-backups/restore10.3 恢复 .env
cp private-backups/restore/.env.backup .envLinuxOS 上要根据真实访问地址检查 .env:
APP_URL=http://服务器IP:18473如果已经配置 HTTPS 域名:
APP_URL=https://你的域名10.4 恢复文件夹数据
停止容器:
docker-compose down恢复数据库和上传文件:
mkdir -p data public/uploads
rm -rf data/* public/uploads/*
tar xzf private-backups/restore/sqlite_data.tar.gz -C data
tar xzf private-backups/restore/uploads_data.tar.gz -C public/uploads
chown -R 1001:1001 data public/uploads其中 chown -R 1001:1001 data public/uploads 用于保证容器内 nextjs 用户可以写入绑定挂载目录。
启动:
docker-compose up -d --build验证:
docker-compose ps访问:
http://服务器IP:18473/projects/po-pdf-spec-compare11. 日常更新流程
11.1 只更新代码
旧 Mac:
git add .
git commit -m "update onlyweb"
git push新 Mac 或 LinuxOS:
git pullmacOS Docker Compose V2:
docker compose up -d --buildLinuxOS Docker Compose V1:
docker-compose down
docker-compose up -d --build11.2 更新代码和数据
旧 Mac:
./scripts/export-private-backup.sh
git add .
git commit -m "update onlyweb code and encrypted data backup"
git push新 Mac 或 LinuxOS:
git pull
./scripts/decrypt-private-backup.sh然后按本文“恢复数据到文件夹”的步骤恢复 data/ 和 public/uploads/。
12. 常见问题
12.1 现在还需要导出 Docker volume 吗?
不需要。
现在数据已经直接保存在项目目录:
data/
public/uploads/备份脚本直接打包这两个文件夹。
12.2 只复制整个项目文件夹可以吗?
可以,但要注意:
data/
public/uploads/
.env这些本地文件不会被 GitHub 同步。如果你是用 U 盘或内网直接复制整个项目文件夹,它们可以一起复制过去。
如果你是通过 GitHub 迁移,则需要使用加密备份包。
12.3 为什么不直接上传 data/ 和 public/uploads/?
因为里面可能包含:
管理员账号
个人联系方式
微信二维码
简历内容
HR 定制页
项目附件
知识库配置即使 GitHub 是 Private,也建议只上传加密包。
12.4 忘记加密密码怎么办?
无法从已有加密包恢复。
只能回到旧 Mac,重新执行:
./scripts/export-private-backup.sh并设置新的密码。
12.5 docker compose down 会删除数据吗?
不会。
当前数据在项目目录中:
data/
public/uploads/docker compose down 只删除容器和默认网络,不会删除这两个项目目录。