📸 功能展示 • ✨ 功能特性 • 🚀 部署指南 • 🔧 技术栈 • 💻 开发 • 📄 许可协议
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
开始部署前,请确保已准备以下内容:
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 | ❌ | 敏感数据加密密钥(未提供时将自动生成) |
创建新API令牌
选择"Edit Cloudflare Workers"模板,并添加D1数据库编辑权限
Fork仓库后填写secrets,然后运行workflow!!!
当backend
目录下的文件发生变更并推送至main
或master
分支时,将自动触发部署。工作流程如下:
⚠️ 请记录您的后端域名
Fork仓库后填写secrets,然后运行workflow。
当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"
重要步骤:然后再次运行前端workflow以完成后端域名加载!!!
请严格按步骤操作,否则后端域名加载将失败
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 = "YOUR_DATABASE_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控制面板
dist
目录中的文件准备前端代码
cd CloudPaste/frontend
npm install
安装并登录Vercel CLI
npm install -g vercel
vercel login
配置环境变量,同Cloudflare Pages
构建并部署
vercel --prod
按提示配置项目。
注册链接:Claw Cloud(无#AFF) 无需信用卡,只要GitHub注册时间超过180天,每月可得$5额度。
注册后点击首页APP Launchpad,然后点击右上角创建应用
先部署后端,如图所示(仅供参考):
后端数据存储在这里:
然后是前端,如图所示(仅供参考):
CloudPaste后端可通过官方Docker镜像快速部署。
创建数据存储目录
mkdir -p sql_data
运行后端容器
docker run -d --name cloudpaste-backend \
-p 8787:8787 \
-v $(pwd)/sql_data:/data \
-e ENCRYPTION_SECRET=your-encryption-key \
-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
使用相同run命令启动新容器(保留数据目录与配置)
使用Docker Compose可一键部署前后端服务,是最简便的推荐方式。
docker-compose.yml
文件version: "3.8"
services:
frontend:
image: dragon730/cloudpaste-frontend:latest
environment:
- BACKEND_URL=https://xxx.com # Fill in the backend service address
ports:
- "8080:80" #"127.0.0.1:8080:80"
depends_on:
- backend # Depends on backend service
networks:
- cloudpaste-network
restart: unless-stopped
backend:
image: dragon730/cloudpaste-backend:latest
environment:
- NODE_ENV=production
- RUNTIME_ENV=docker
- PORT=8787
- ENCRYPTION_SECRET=custom-key # Please modify this to your own security key
volumes:
- ./sql_data:/data # Data persistence
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; # Replace with your domain name
# SSL certificate configuration
ssl_certificate /path/to/cert.pem; # Replace with certificate path
ssl_certificate_key /path/to/key.pem; # Replace with key path
# Frontend proxy configuration
location / {
proxy_pass http://localhost:80; # Docker frontend service address
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Backend API proxy configuration
location /api {
proxy_pass http://localhost:8787; # Docker backend service address
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
# WebSocket support (if needed)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebDAV Configuration
location /dav {
proxy_pass http://localhost:8787/dav; # Points to your backend service
# WebDAV necessary headers
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 method support
proxy_pass_request_headers on;
# Support all WebDAV methods
proxy_method $request_method;
# Necessary header processing
proxy_set_header Destination $http_destination;
proxy_set_header Overwrite $http_overwrite;
# Handle large files
client_max_body_size 0;
# Timeout settings
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}
⚠️ 安全提示:建议配置HTTPS及反向代理(如Nginx)以增强安全性。
登录 Cloudflare 控制面板
点击 R2 存储并创建存储桶
创建 API 令牌
创建后保存所有数据,后续会用到
配置跨域规则:点击对应存储桶,点击设置,按如下示例编辑 CORS 策略:
[
{
"AllowedOrigins": ["http://localhost:3000", "https://replace-with-your-frontend-domain"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
若没有 B2 账号,请先注册,然后创建存储桶
侧边栏点击 Application Key,创建密钥并参照图示操作
配置 B2 跨域;B2 跨域配置较为复杂,请注意
可先尝试方案 1 或 2,进入上传页面测试能否上传。若 F12 控制台显示跨域错误,则采用方案 3。永久解决方案请直接使用方案 3。
关于方案 3 配置,由于面板无法配置,需手动配置,请下载 B2 CLI 工具。详情参考:"https://docs.cloudreve.org/zh/usage/storage/b2"。
下载后,在对应下载目录 CMD 中输入以下命令:
b2-windows.exe account authorize //Log in to your account, following prompts to enter your keyID and applicationKey
b2-windows.exe bucket get <bucketName> //You can execute to get bucket information, replace <bucketName> with your bucket name
Windows 配置使用 ".\b2-windows.exe xxx", Python CLI 类似:
b2-windows.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}]"
将 替换为你的存储桶名称。跨域允许的 allowedOrigins 可根据需求配置,此处为允许全部。
部署 MinIO 服务
使用以下 Docker Compose 配置(参考)快速部署 MinIO:
version: "3"
services:
minio:
image: minio/minio:RELEASE.2025-02-18T16-25-55Z
container_name: minio-server
command: server /data --console-address :9001 --address :9000
environment:
- MINIO_ROOT_USER=minioadmin # 管理员用户名
- MINIO_ROOT_PASSWORD=minioadmin # 管理员密码
- MINIO_BROWSER=on
- MINIO_SERVER_URL=https://minio.example.com # S3 API 访问地址
- MINIO_BROWSER_REDIRECT_URL=https://console.example.com # 控制台访问地址
ports:
- "9000:9000" # S3 API 端口
- "9001:9001" # 控制台端口
volumes:
- ./data:/data
- ./certs:/root/.minio/certs # SSL 证书(如需)
restart: always
运行 docker-compose up -d
启动服务。
配置反向代理(参考)
为确保 MinIO 正常工作,特别是文件预览功能,需正确配置反向代理。推荐 OpenResty/Nginx 设置:
MinIO S3 API 反向代理 (minio.example.com):
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# HTTP 优化
proxy_http_version 1.1;
proxy_set_header Connection ""; # 启用 HTTP/1.1 长连接
# 关键:解决 403 错误 & 预览问题
proxy_cache off;
proxy_buffering off;
proxy_request_buffering off;
# 无文件大小限制
client_max_body_size 0;
}
MinIO 控制台反向代理 (console.example.com):
location / {
proxy_pass http://127.0.0.1:9001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 关键设置
proxy_cache off;
proxy_buffering off;
# 无文件大小限制
client_max_body_size 0;
}
访问控制台创建存储桶 & 访问密钥
详细配置参考官方文档:
https://min.io/docs/minio/container/index.html
中文:https://min-io.cn/docs/minio/container/index.html
额外配置(可选)
允许的来源必须包含你的前端域名。
在 CloudPaste 中配置 MinIO
https://minio.example.com
)故障排除
proxy_set_header Accept-Encoding "identity"
,且有缓存问题需考虑。建议仅使用 DNS 解析。proxy_cache off
和 proxy_buffering off
MINIO_SERVER_URL
和 MINIO_BROWSER_REDIRECT_URL
是否正确设置Connection "upgrade"
CloudPaste 提供简单的 WebDAV 协议支持,可将存储空间挂载为网络驱动器,方便通过文件管理器直接访问和管理文件。
https://你的后端域名/dav
使用管理员账号和密码直接访问 WebDAV 服务:
更安全的访问方式,建议创建专用 API 密钥:
若使用 NGINX 作为反向代理,需添加特定 WebDAV 配置以确保所有 WebDAV 方法正常工作:
# WebDAV Configuration
location /dav {
proxy_pass http://localhost:8787; # Points to your backend service
# WebDAV necessary headers
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 method support
proxy_pass_request_headers on;
# Support all WebDAV methods
proxy_method $request_method;
# Necessary header processing
proxy_set_header Destination $http_destination;
proxy_set_header Overwrite $http_overwrite;
# Handle large files
client_max_body_size 0;
# Timeout settings
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/ # Frontend Vue.js application
│ ├── src/ # Source code
│ │ ├── components/ # Vue components
│ │ ├── api/ # API clients and services
│ │ ├── i18n/ # Internationalization resource files
│ │ ├── utils/ # Utility functions
│ │ └── assets/ # Static assets
│ └── ...
└── backend/ # Cloudflare Workers backend
├── worker.js # Main Worker file
├── schema.sql # D1 database schema
└── ...
如需自定义 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=development-test-key \
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✨✨,非常感谢!