FireflyCloud 部署文档
前后端分离的云存储与文件分享系统:
- 后端:Bun + Elysia + SQLite(Drizzle ORM)
- 前端:Next.js(App Router)
- 特性:本地/R2/OneDrive/WebDAV 存储策略、文件分享与直链、下载令牌、配额与用量统计、SMTP 邮件验证码、管理面板、运行日志 WebSocket 流等。
环境配置
目录结构(节选)
backend/:后端服务(Bun + Elysia)src/:核心源码(路由、服务、数据库、工具)netdisk.db:SQLite 数据库(默认路径,可通过环境变量调整)uploads/:上传文件目录(如使用本地存储)package.json:后端运行脚本
app/:Next.js App Router 页面components/:前端组件(鉴权、布局、文件管理、管理面板等)lib/:前端工具库(如通用下载、文件图标等)
一、快速开始(本地开发)
1. 克隆与安装依赖
bash
# 克隆仓库
git clone https://github.com/ChuxinNeko/FireflyCloud.git
cd FireflyCloud
# 安装前端依赖(根目录)
npm install
# 安装后端依赖(backend 目录)
cd backend
bun install2. 配置后端环境变量(backend/.env)
在 backend 目录下创建 .env 文件:
bash
# 必填
JWT_SECRET=replace_with_a_strong_random_string
DATABASE_URL=./netdisk.db
# 可选
PORT=8080
LOG_LEVEL=INFO # DEBUG, INFO, WARN, ERROR, FATAL说明:
- SMTP、R2、OneDrive、WebDAV 等通常在管理面板内配置,无需写入环境变量。
DATABASE_URL可指向绝对或相对路径的 SQLite 文件。
3. 启动后端(开发模式)
bash
cd backend
bun run dev
# 默认监听 http://localhost:80804. 启动前端(开发模式)
在项目根目录创建前端环境变量 .env:
bash
NEXT_PUBLIC_API_URL=http://localhost:8080 ##请确保前后端的协议一致,不可http与https混用然后运行:
bash
# 回到项目根目录
cd ..
npm run dev
# 默认监听 http://localhost:30005. 初始化管理员账号(可选)
在 backend 目录中提供了管理员初始化/重置脚本:
bash
cd backend
# 重置管理员或创建管理员(按提示)
bun run reset-admin.js
# 或仅重置管理员密码
bun run reset-admin-password.js二、生产部署
方案 A:同机双进程(后端 + 前端)+ 反向代理
- 构建与启动后端(生产)
bash
cd backend
bun run build # 产物输出到 backend/dist
bun run start # 以生产模式运行 dist/index.js
# 建议使用守护进程/服务托管(systemd/pm2/nssm 等)- 构建与启动前端(生产)
bash
# 在项目根目录
npm run build
npm run start # 以生产模式运行 Next.js (默认 3000)- 反向代理(Nginx 示例) 推荐为后端与前端分别使用子域名,如:
- 前端:
https://cloud.example.com - 后端:
https://api.example.com
前端 .env.production:
bash
NEXT_PUBLIC_API_URL=https://api.example.comNginx 示例(仅供参考,按需调整 SSL 证书路径与域名):
nginx
server {
listen 80;
listen 443 ssl http2;
server_name api.example.com;
# SSL 证书(示例)
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
}
server {
listen 80;
listen 443 ssl http2;
server_name cloud.example.com;
ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}前端环境变量需设为:
```bash
NEXT_PUBLIC_API_URL=https://cloud.example.com/api三、环境变量与配置
后端(backend/.env)
必填:
JWT_SECRET:JWT 签名密钥(请使用强随机字符串)DATABASE_URL:SQLite 数据库文件路径(相对/绝对)
可选:
PORT:后端监听端口,默认 8080LOG_LEVEL:日志级别(DEBUG/INFO/WARN/ERROR/FATAL)
说明:
- SMTP/R2/OneDrive/WebDAV 等建议通过管理面板配置。
前端(.env.local / .env.production)
NEXT_PUBLIC_API_URL:后端 API 基础地址,如http://localhost:8080、https://api.example.com或https://cloud.example.com/api
四、功能配置与管理面板
- 管理面板入口:登录后访问“系统管理/管理面板”。
- 站点信息:
/site-config公开接口,前端Providers会在首次加载读取站点标题与描述。 - SMTP 配置:在管理面板填写参数,可通过“发送测试邮件”验证(后端路由
/admin/test-smtp)。 - 存储策略:支持本地、R2、OneDrive、WebDAV 挂载与策略化管理,可在管理面板配置并启用。
- 直链与分享:
- 直链公开访问(新格式):
/dl/:filename?token=xxxxx - 分享与提取:
/share与/pickup流程
- 直链公开访问(新格式):
- 配额与统计:提供用户配额管理与整体用量统计(含 R2/OneDrive 实际用量查询)。
五、数据持久化与备份
- SQLite:默认数据库位于
backend/netdisk.db,请定期备份。 - 本地上传:如启用本地存储,请确保
backend/uploads/(或配置中的目标目录)具备持久化与备份策略。 - R2/OneDrive/WebDAV:对象存储或第三方盘数据依托其各自平台的持久化特性;建议仍保留关键文件的离线备份。
六、常见问题(FAQ)
访问 401/403:
- 检查前端
NEXT_PUBLIC_API_URL是否指向正确后端地址。 - 确认浏览器本地
token有效(可在登录后由后端/auth/me获取用户信息)。 - 管理端需
role=admin才能访问相关接口。
- 检查前端
CORS 问题:
- 后端默认开启
cors(),如生产存在跨域策略,请在反向代理层统一域名或放通必要头部。
- 后端默认开启
数据库路径错误:
- 确认
backend/.env中DATABASE_URL路径有效且进程可写。
- 确认
下载打不开或跨域下载:
- 前端
lib/utils.ts内置 iframe 降级方案;建议在生产使用直链或同源代理以减少跨域跳转。
- 前端
端口被占用:
- 修改后端
PORT或前端 Next 默认端口,或在反向代理层调度。
- 修改后端
七、运维建议
- 使用守护进程(systemd/pm2/nssm)托管后端与前端进程,设置开机自启与重启策略。
- 为后端与前端分别使用子域名,前端仅通过
NEXT_PUBLIC_API_URL访问后端,避免混用路径造成缓存/CORS 问题。 - 启用 HTTPS(Let’s Encrypt/ACME)并强制重定向到 HTTPS。
- 定期备份数据库与本地上传目录;对对象存储配置生命周期与版本控制。
- 配置日志轮转;按需接入外部监控/告警。
八、开发脚本速查
后端(在 backend 目录)
bash
bun run dev # 开发模式
bun run build # 构建到 dist/
bun run start # 生产运行 dist/index.js
bun run reset-admin.js # 初始化/重置管理员
bun run reset-admin-password.js # 重置管理员密码前端(在项目根目录)
bash
npm run dev # 开发模式(默认 3000)
npm run build # 生产构建
npm run start # 生产运行