基于Worker的在线剪贴板和文件分享服务,支持 Markdown、阅后即焚、文本/大文件分享、密码保护等功能,支持多种部署方式,可作为WebDav挂载
📸 展示 • ✨ 特点 • 🚀 部署教程 • 🔧 技术栈 • 💻 开发 • 📄 许可证
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
在开始部署前,请确保您已准备以下内容:
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_BUCKET_NAME
S3_ENDPOINT
使用 GitHub Actions 可以实现代码推送后自动部署应用。
Secret 名称 | 必需 | 用途 |
---|---|---|
CLOUDFLARE_API_TOKEN |
✅ | Cloudflare API 令牌(需要 Workers、D1 和 Pages 权限) |
CLOUDFLARE_ACCOUNT_ID |
✅ | Cloudflare 账户 ID |
ENCRYPTION_SECRET |
❌ | 用于加密敏感数据的密钥(如不提供,将自动生成) |
Fork 仓库,填好密钥,然后运行工作流!!!
每当 backend
目录中的文件有更改并推送到 main
或 master
分支时,会自动触发部署。工作流程如下:
⚠️ 记住你的后端域名
Fork 仓库,填好密钥,然后运行工作流
每当 frontend
目录中的文件有更改并推送到 main
或 master
分支时,会自动触发部署。部署后需在 Cloudflare Pages 控制面板设置环境变量:
导航到 Pages → 您的项目(如 “cloudpaste-frontend”)
点击 “Settings” → “Environment variables”
添加环境变量:
名称:VITE_BACKEND_URL
值:刚刚部署的后端 Worker URL(如 https://cloudpaste-backend.your-username.workers.dev
),末尾不带"/", 同时建议使用自定义的 worker 后端域名。
一定要完整的填写后端域名,“https://xxxx.com” 格式
重要步骤: 随后要再次运行一遍前端的工作流,以便完成后端域名加载!!!
务必严格按照步骤操作,否则会出现后端域名加载失败
Vercel 建议使用以下方式部署:
Framework Preset(框架预设): Vite
Build Command(构建命令): npm run build
Output Directory(输出目录): dist
Install Command(安装命令): npm install
☝️ 以上二选一即可
git clone https://github.com/ling-drag0n/CloudPaste.git
cd CloudPaste/backend
安装依赖
npm install
登录 Cloudflare
npx wrangler login
创建 D1 数据库
npx wrangler d1 create cloudpaste-db
记下输出的数据库 ID。
修改 wrangler.toml 配置
[[d1_databases]]
binding = "DB"
database_name = "cloudpaste-db"
database_id = "您的数据库ID"
部署 Worker
npx wrangler deploy
记下输出的 URL,这是您的后端 API 地址。
初始化数据库(自动)
访问您的 Worker URL 触发初始化:
https://cloudpaste-backend.your-username.workers.dev
⚠️ 安全提示:请在系统初始化后立即修改默认管理员密码(用户名: admin, 密码: admin123)。
准备前端代码
cd CloudPaste/frontend
npm install
配置环境变量
创建或修改 .env.production
文件:
VITE_BACKEND_URL=https://cloudpaste-backend.your-username.workers.dev
VITE_APP_ENV=production
VITE_ENABLE_DEVTOOLS=false
构建前端项目
npm run build
部署到 Cloudflare Pages
方法一:通过 Wrangler CLI
npx wrangler pages deploy dist --project-name=cloudpaste-frontend
方法二:通过 Cloudflare Dashboard
dist
目录内的文件准备前端代码
cd CloudPaste/frontend
npm install
安装并登录 Vercel CLI
npm install -g vercel
vercel login
配置环境变量,与 Cloudflare Pages 相同
构建并部署
vercel --prod
根据提示配置项目。
CloudPaste 后端支持通过官方 Docker 镜像快速部署。
创建数据存储目录
mkdir -p sql_data
运行后端容器
docker run -d --name cloudpaste-backend \
-p 8787:8787 \
-v $(pwd)/sql_data:/data \
-e ENCRYPTION_SECRET=您的加密密钥 \
-e NODE_ENV=production \
-e RUNTIME_ENV=docker \
dragon730/cloudpaste-backend:latest
记下部署的 URL(如 http://your-server-ip:8787
),后续前端部署需要用到。
⚠️ 安全提示:请务必自定义 ENCRYPTION_SECRET 并保存好,此密钥用于加密敏感数据。
前端使用 Nginx 提供服务,并在启动时配置后端 API 地址。
docker run -d --name cloudpaste-frontend \
-p 80:80 \
-e BACKEND_URL=http://your-server-ip:8787 \
dragon730/cloudpaste-frontend:latest
⚠️ 注意:BACKEND_URL 必须包含完整 URL(包括协议 http:// 或 https://)
⚠️ 安全提示:请在系统初始化后立即修改默认管理员密码(用户名: admin, 密码: admin123)。
当项目发布新版本时,您可以按以下步骤更新 Docker 部署:
拉取最新镜像
docker pull dragon730/cloudpaste-backend:latest
docker pull dragon730/cloudpaste-frontend:latest
停止并移除旧容器
docker stop cloudpaste-backend cloudpaste-frontend
docker rm cloudpaste-backend cloudpaste-frontend
使用上述相同的运行命令启动新容器(保留数据目录和配置)
使用 Docker Compose 可以一键部署前后端服务,是最简单推荐的方式。
docker-compose.yml
文件version: "3.8"
services:
frontend:
image: dragon730/cloudpaste-frontend:latest
environment:
- BACKEND_URL=https://xxx.com # 填写后端服务地址
ports:
- "8080:80" #"127.0.0.1:8080:80"
depends_on:
- backend # 依赖backend服务
networks:
- cloudpaste-network
restart: unless-stopped
backend:
image: dragon730/cloudpaste-backend:latest
environment:
- NODE_ENV=production
- RUNTIME_ENV=docker
- PORT=8787
- ENCRYPTION_SECRET=自定义密钥 # 请修改为您自己的安全密钥
volumes:
- ./sql_data:/data # 数据持久化
ports:
- "8787:8787" #"127.0.0.1:8787:8787"
networks:
- cloudpaste-network
restart: unless-stopped
networks:
cloudpaste-network:
driver: bridge
docker-compose up -d
⚠️ 安全提示:请在系统初始化后立即修改默认管理员密码(用户名: admin, 密码: admin123)。
前端: http://your-server-ip:80
后端: http://your-server-ip:8787
当需要更新到新版本时:
拉取最新镜像
docker-compose pull
使用新镜像重新创建容器(保留数据卷)
docker-compose up -d --force-recreate
💡 提示:如果遇到配置变更,可能需要备份数据后修改 docker-compose.yml 文件
server {
listen 443 ssl;
server_name paste.yourdomain.com; # 替换为您的域名
# SSL 证书配置
ssl_certificate /path/to/cert.pem; # 替换为证书路径
ssl_certificate_key /path/to/key.pem; # 替换为密钥路径
# 前端代理配置
location / {
proxy_pass http://localhost:80; # Docker前端服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 后端API代理配置
location /api {
proxy_pass http://localhost:8787; # Docker后端服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
# WebSocket支持 (如果需要)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebDav 配置
location /dav/ {
proxy_pass http://localhost:8787/dav/; # 指向您的后端服务
# WebDAV 必要头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebDAV 方法支持
proxy_pass_request_headers on;
# 支持所有WebDAV方法
proxy_method $request_method;
# 必要的头信息处理
proxy_set_header Destination $http_destination;
proxy_set_header Overwrite $http_overwrite;
# 处理大文件
client_max_body_size 0;
# 超时设置
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}
⚠️ 安全提示:建议配置 HTTPS 和反向代理(如 Nginx)以提升安全性。
登录 Cloudflare Dashboard
点击 R2 存储,创建一个存储桶。
创建 API 令牌
创建后把全部数据都保存好,后续要用
配置跨域规则,点击对应存储桶,点击设置,编辑 CORS 策略,如下所示:
[
{
"AllowedOrigins": ["http://localhost:3000", "https://根据自己的前端域名来替代"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
若没有 B2 账号,可以先注册一个,然后创建一个存储桶。
点击侧边栏的 Application Key,点击 Create Key,然后如图所示。
配置 B2 的跨域,B2 跨域配置比较麻烦,需注意
可以先尝试一下 1 或 2,去到上传页面看看是否能上传,F12 打开控制台若显示跨域错误,则使用 3。要一劳永逸就直接使用 3。
关于 3 的配置由于面板无法配置,只能手动配置,需下载 B2 CLI对应工具。具体可以参考:"https://docs.cloudreve.org/use/policy/s3#backblaze-b2 " 。
下载后,在对应下载目录 cmd,在命令行输入以下命令:
b2.exe account authorize //进行账号登录,根据提示填入之前的 keyID 和 applicationKey
b2.exe bucket get <bucketName> //你可以执行获取bucket信息,<bucketName>换成桶名字
windows 配置,采用“.\b2-windows.exe xxx”,
所以在对应 cli 的 exe 文件夹中 cmd 输入,python 的 cli 也同理:
b2.exe bucket update <bucketName> allPrivate --cors-rules "[{\"corsRuleName\":\"CloudPaste\",\"allowedOrigins\":[\"*\"],\"allowedHeaders\":[\"*\"],\"allowedOperations\":[\"b2_upload_file\",\"b2_download_file_by_name\",\"b2_download_file_by_id\",\"s3_head\",\"s3_get\",\"s3_put\",\"s3_post\",\"s3_delete\"],\"exposeHeaders\":[\"Etag\",\"content-length\",\"content-type\",\"x-bz-content-sha1\"],\"maxAgeSeconds\":3600}]"
其中
CloudPaste 提供简易的 WebDAV 协议支持,允许您将存储空间挂载为网络驱动器,便于直接通过文件管理器访问和管理文件。
https://你的后端域名/dav
使用管理员账户和密码直接访问 WebDAV 服务:
为更安全的访问方式,建议创建专用 API 密钥:
如果使用 NGINX 作为反向代理,需要添加特定的 WebDAV 配置以确保所有 WebDAV 方法正常工作:
# WebDAV 配置
location /dav {
proxy_pass http://localhost:8787; # 指向您的后端服务
# WebDAV 必要头信息
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebDAV 方法支持
proxy_pass_request_headers on;
# 支持所有WebDAV方法
proxy_method $request_method;
# 必要的头信息处理
proxy_set_header Destination $http_destination;
proxy_set_header Overwrite $http_overwrite;
# 处理大文件
client_max_body_size 0;
# 超时设置
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
连接问题:
权限错误:
⚠️⚠️ Webdav 上传问题:
服务器 文件直传 API 文档 - 服务器 文件直传接口详细说明
克隆项目仓库
git clone https://github.com/ling-drag0n/cloudpaste.git
cd cloudpaste
后端设置
cd backend
npm install
# 初始化 D1 数据库
wrangler d1 create cloudpaste-db
wrangler d1 execute cloudpaste-db --file=./schema.sql
前端设置
cd frontend
npm install
配置环境变量
backend
目录下,创建 wrangler.toml
文件设置开发环境变量frontend
目录下,配置 .env.development
文件设置前端环境变量启动开发服务器
# 后端
cd backend
npm run dev
# 前端 (另一个终端)
cd frontend
npm run dev
CloudPaste/
├── frontend/ # 前端 Vue.js 应用
│ ├── src/ # 源代码
│ │ ├── components/ # Vue 组件
│ │ ├── api/ # API 客户端和服务
│ │ ├── i18n/ # 国际化资源文件
│ │ ├── utils/ # 工具函数
│ │ └── assets/ # 静态资源
│ └── ...
└── backend/ # Cloudflare Workers 后端
├── worker.js # 主要 Worker 文件
├── schema.sql # D1 数据库模式
└── ...
如果您希望自定义 Docker 镜像或进行开发调试,可以按照以下步骤手动构建:
构建后端镜像
# 在项目根目录执行
docker build -t cloudpaste-backend:custom -f docker/backend/Dockerfile .
# 运行自定义构建的镜像
docker run -d --name cloudpaste-backend \
-p 8787:8787 \
-v $(pwd)/sql_data:/data \
-e ENCRYPTION_SECRET=开发测试密钥 \
cloudpaste-backend:custom
构建前端镜像
# 在项目根目录执行
docker build -t cloudpaste-frontend:custom -f docker/frontend/Dockerfile .
# 运行自定义构建的镜像
docker run -d --name cloudpaste-frontend \
-p 80:80 \
-e BACKEND_URL=http://localhost:8787 \
cloudpaste-frontend:custom
开发环境 Docker Compose
创建 docker-compose.dev.yml
文件:
version: "3.8"
services:
frontend:
build:
context: .
dockerfile: docker/frontend/Dockerfile
environment:
- BACKEND_URL=http://backend:8787
ports:
- "80:80"
depends_on:
- backend
backend:
build:
context: .
dockerfile: docker/backend/Dockerfile
environment:
- NODE_ENV=development
- RUNTIME_ENV=docker
- PORT=8787
- ENCRYPTION_SECRET=dev_secret_key
volumes:
- ./sql_data:/data
ports:
- "8787:8787"
启动开发环境:
docker-compose -f docker-compose.yml up --build
Apache License 2.0
本项目使用 Apache License 2.0 许可证 - 详情请参阅 LICENSE 文件。
如果觉得项目不错希望您能给个免费的 star✨✨,非常感谢!