本地存储配置
CloudPaste 支持将 本地文件系统 作为存储后端,适用于 Node.js / Docker 部署环境。
支持的功能
本地存储驱动支持以下能力:
- ✅ READER:读取文件和目录
- ✅ WRITER:上传、创建、重命名、删除文件
- ✅ ATOMIC:原子操作支持(重命名、复制、批量删除)
- ✅ PROXY:代理访问
注意:本地存储不支持 DIRECT_LINK(直链)、MULTIPART(分片上传)和 PAGED_LIST(分页列表)能力。
1. 适用场景
1.1 推荐场景
- 自托管部署:使用 Docker 或 Node.js 直接部署在自己的服务器上
- 内网环境:不需要依赖外部云存储服务
- 开发测试:快速搭建测试环境
- 小规模应用:文件量不大,单机存储足够
1.2 不适用场景
- ❌ Cloudflare Workers 部署:Workers 环境无法访问本地文件系统
- ❌ 无服务器环境:Serverless 环境通常不提供持久化文件系统
- ❌ 分布式部署:多实例部署时无法共享本地存储
2. 新建本地存储配置
- 登录 CloudPaste 后台 → 存储配置
- 点击「新建存储配置」
- 在「存储类型」下拉中选择 LOCAL
- 填写配置信息(见下文)
- 保存后,在「挂载管理」中为这个存储创建挂载点
3. 字段说明
3.1 基本信息
配置名称
任意便于识别的名字,例如「本地存储」「服务器磁盘」存储容量限制(可选)
- 只影响 CloudPaste 自己的配额计算
- 超出后会触发 CloudPaste 的限额提示
- 不会真正限制宿主机的磁盘空间
3.2 路径配置
根目录路径(root_path) 必填
- 本地文件系统的绝对路径,作为存储的根目录
- 必须是绝对路径,例如:
- Linux/Mac:
/data/cloudpaste/storage - Windows:
D:\cloudpaste\storage
- Linux/Mac:
- 所有文件操作都限制在此目录内(监狱机制)
- 路径必须已存在且可读写(除非启用
auto_create_root)
自动创建根目录(auto_create_root)(可选)
- 默认:
false(关闭) - 勾选后:如果
root_path不存在,系统会自动创建 - 不勾选:必须手动在宿主机上创建目录
- 默认:
3.3 权限配置
- 目录/文件权限(dir_permission)(可选)
- 八进制权限值,例如:
0755、0777 - 默认:
0777(所有用户可读写执行) - 同时应用于目录和文件
- 适用场景:单机自托管,通常使用默认值即可
- 八进制权限值,例如:
3.4 高级配置
只读模式(readonly)(可选)
- 默认:
false(允许读写) - 勾选后:禁止所有写入和删除操作
- 适用场景:只读挂载、归档存储
- 默认:
回收站路径(trash_path)(可选)
- 删除文件时移动到回收站而非永久删除
- 支持相对路径(相对于
root_path)或绝对路径 - 示例:
- 相对路径:
.trash(在 root_path 下创建 .trash 目录) - 绝对路径:
/data/cloudpaste/trash
- 相对路径:
- 不配置时:删除操作为永久删除
4. 挂载与权限配合
本地存储配置保存后,需要在「挂载管理」中为其创建挂载点:
- 进入 挂载管理 → 新建挂载
- 选择存储类型为 LOCAL 的那条存储配置
- 填写挂载路径(如
/local)、备注等 - 视情况开启:
- Web 代理:是否强制 Web 场景走 CloudPaste 代理
- 启用签名:是否对
/api/p/ 代理入口签名保护
同时,本地存储配置中有一个 允许 API 密钥使用(is_public) 选项:
- 勾选后,API 密钥可以在其「挂载路径」范围内使用该存储
- 配合 API 密钥的 basic_path 和挂载路径,可以精确限制访问范围
详细的挂载与权限说明,可参考:
5. 安全机制
5.1 路径监狱(Path Jail)
- 所有文件操作严格限制在
root_path目录内 - 自动检测并阻止路径越界(
../等) - 符号链接(symlink)安全检查:
- 检测符号链接是否指向
root_path之外 - 阻止通过符号链接逃逸到其他目录
- 检测符号链接是否指向
5.2 权限控制
- 初始化时检查
root_path的读写权限 - 只读模式下禁止所有写入操作
- 文件和目录权限可配置
5.3 回收站机制
- 配置回收站后,删除操作变为移动到回收站
- 文件名自动添加时间戳避免冲突
- 支持跨文件系统移动(自动降级为复制+删除)
6. 常见问题
6.1 初始化失败:root_path 不存在
错误信息:
LOCAL 驱动 root_path 不存在,请先在宿主机上手动创建该目录解决方法:
- 在宿主机上手动创建目录:
mkdir -p /data/cloudpaste/storage - 或者勾选「自动创建根目录」选项
6.2 权限错误:root_path 不可写
错误信息:
LOCAL 驱动 root_path 不可写解决方法:
- 检查目录权限:
ls -la /data/cloudpaste/ - 修改权限:
chmod 755 /data/cloudpaste/storage - 检查目录所有者:
chown -R user:group /data/cloudpaste/storage
6.3 Docker 容器内无法访问
可能原因:
- 未正确挂载 volume
- 容器内路径与配置不一致
- 权限问题
解决方法:
- 检查 docker-compose.yml 中的 volumes 配置
- 确认容器内路径:
docker exec -it container_name ls -la /data/storage - 检查宿主机目录权限
6.4 符号链接被拒绝访问
错误信息:
符号链接指向 root_path 之外,已被禁止访问原因:
- 安全机制阻止符号链接逃逸到
root_path之外
解决方法:
- 将符号链接目标移动到
root_path内 - 或者使用硬链接/直接复制文件
6.5 Cloudflare Workers 部署无法使用
错误信息:
LOCAL 驱动仅在 Node/Docker 环境可用原因:
- Workers 环境无法访问本地文件系统
解决方法:
- 使用 S3、WebDAV 或 OneDrive 等云存储
- 或者切换到 Node.js / Docker 部署方式
7. 性能优化建议
7.1 磁盘选择
- SSD 优先:读写性能更好
- 避免网络磁盘:NFS/CIFS 会增加延迟
- RAID 配置:根据需求选择 RAID 级别
7.2 目录结构
- 避免单个目录下文件过多(建议 < 10000)
- 使用合理的子目录结构
- 定期清理回收站
7.3 权限配置
- 生产环境建议使用
0755而非0777 - 确保 CloudPaste 进程有足够权限
- 避免使用 root 用户运行
8. 监控与维护
8.1 磁盘空间监控
bash
# 检查磁盘使用情况
df -h /data/cloudpaste/storage
# 检查目录大小
du -sh /data/cloudpaste/storage8.2 回收站清理
bash
# 查看回收站大小
du -sh /data/cloudpaste/storage/.trash
# 清理 30 天前的文件
find /data/cloudpaste/storage/.trash -type f -mtime +30 -delete8.3 备份建议
- 定期备份
root_path目录 - 使用 rsync、tar 等工具
- 考虑增量备份策略
