diff --git a/backend/.env.example b/backend/.env.example index 086189c..05d6fcf 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,28 +1,96 @@ +# ============================================ +# 玩玩云 - 环境配置文件示例 +# ============================================ +# +# 使用说明: +# 1. 复制此文件为 .env +# 2. 根据实际情况修改配置值 +# 3. ⚠️ 生产环境必须修改默认密码和密钥 +# + +# ============================================ # 服务器配置 +# ============================================ + +# 服务端口 PORT=40001 + +# 运行环境(production 或 development) NODE_ENV=production -# JWT安全密钥 (必须设置!使用随机字符串) -# 生成方法: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" -JWT_SECRET=your-secret-key-change-in-production-PLEASE-CHANGE-THIS +# 公开访问端口(nginx监听的端口,用于生成分享链接) +# 标准端口(80/443)可不配置 +PUBLIC_PORT=80 -# 管理员账号配置 +# ============================================ +# 安全配置 +# ============================================ + +# JWT密钥(必须修改!) +# 生成方法: openssl rand -base64 32 +JWT_SECRET=your-secret-key-PLEASE-CHANGE-THIS-IN-PRODUCTION + +# 管理员账号配置(首次启动时创建) ADMIN_USERNAME=admin ADMIN_PASSWORD=admin123 -# 存储根目录(本地存储模式) -STORAGE_ROOT=/app/storage +# ============================================ +# CORS 跨域配置(重要!) +# ============================================ -# CORS允许的来源(多个用逗号分隔,* 表示允许所有) -# 生产环境建议设置为具体域名,例如: https://yourdomain.com,https://www.yourdomain.com -ALLOWED_ORIGINS=* +# 允许访问的前端域名 +# +# 格式说明: +# - 单个域名: https://yourdomain.com +# - 多个域名: https://domain1.com,https://domain2.com +# - 开发环境: 留空或设置为 * (不安全,仅开发使用) +# +# ⚠️ 生产环境安全要求: +# 1. 必须配置具体的域名,不要使用 * +# 2. 必须包含协议 (http:// 或 https://) +# 3. 如果使用非标准端口,需要包含端口号 +# +# 示例: +# ALLOWED_ORIGINS=https://pan.example.com +# ALLOWED_ORIGINS=https://pan.example.com,https://admin.example.com +# ALLOWED_ORIGINS=http://localhost:8080 # 开发环境 +# +ALLOWED_ORIGINS= -# Cookie安全配置 -# 如果使用HTTPS,设置为true +# Cookie 安全配置 +# 使用 HTTPS 时必须设置为 true +# HTTP 环境设置为 false COOKIE_SECURE=false -# FTP服务器配置(可选,用户可在界面配置) -FTP_HOST=your-ftp-host.com -FTP_PORT=21 -FTP_USER=your-username -FTP_PASSWORD=your-password +# ============================================ +# 存储配置 +# ============================================ + +# 数据库路径 +DATABASE_PATH=./data/database.db + +# 本地存储根目录(本地存储模式使用) +STORAGE_ROOT=./storage + +# ============================================ +# SFTP 配置(可选) +# ============================================ +# +# 说明: 用户可以在 Web 界面配置自己的 SFTP 服务器 +# 此处配置仅作为全局默认值(通常不需要配置) +# + +# FTP_HOST=your-ftp-host.com +# FTP_PORT=22 +# FTP_USER=your-username +# FTP_PASSWORD=your-password + +# ============================================ +# 开发调试配置 +# ============================================ + +# 日志级别 (error, warn, info, debug) +# LOG_LEVEL=info + +# 是否启用调试模式 +# DEBUG=false diff --git a/backend/server.js b/backend/server.js index 118b38a..66a3dd1 100644 --- a/backend/server.js +++ b/backend/server.js @@ -59,6 +59,28 @@ app.use((req, res, next) => { next(); }); +// 获取正确的协议(考虑反向代理) +function getProtocol(req) { + // 1. 检查 X-Forwarded-Proto 头(nginx 代理传递的协议) + const forwardedProto = req.get('X-Forwarded-Proto'); + if (forwardedProto) { + return forwardedProto.split(',')[0].trim(); + } + + // 2. 检查 req.protocol + if (req.protocol) { + return req.protocol; + } + + // 3. 如果配置了SSL,默认使用https + if (req.secure) { + return 'https'; + } + + // 4. 默认使用https(因为生产环境应该都配置了SSL) + return 'https'; +} + // 文件上传配置(临时存储) const upload = multer({ dest: path.join(__dirname, 'uploads'), @@ -1230,7 +1252,7 @@ app.post('/api/share/create', authMiddleware, (req, res) => { db.prepare('UPDATE shares SET storage_type = ? WHERE id = ?') .run(req.user.current_storage_type || 'sftp', result.id); - const shareUrl = `${req.protocol}://${req.get('host')}/s/${result.share_code}`; + const shareUrl = `${getProtocol(req)}://${req.get('host')}/s/${result.share_code}`; res.json({ success: true, @@ -1257,7 +1279,7 @@ app.get('/api/share/my', authMiddleware, (req, res) => { success: true, shares: shares.map(share => ({ ...share, - share_url: `${req.protocol}://${req.get('host')}/s/${share.share_code}` + share_url: `${getProtocol(req)}://${req.get('host')}/s/${share.share_code}` })) }); } catch (error) { diff --git a/frontend/index.html b/frontend/index.html index 3563b19..1ce131b 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,125 +3,672 @@
-简单、安全、高效的文件管理解决方案
连接你的SFTP服务器,随时随地管理文件
+ 简单、安全、高效的现代化云存储管理解决方案
+ 连接你的 SFTP 服务器,随时随地管理文件,轻松分享
+
+ 为现代化文件管理而生,提供完整的文件操作、分享、管理功能 +
++ 支持连接任何 SFTP 服务器,数据存储在你自己的服务器上,更安全可靠。支持多用户配置,每个用户独立管理。 +
+ 自主可控 ++ 网盘式界面,支持文件浏览、上传、下载、重命名、删除。拖拽上传,实时进度显示,单文件最大 5GB。 +
+ 简单易用 ++ 一键生成分享链接,支持密码保护和有效期设置。提供分享统计,查看访问次数和下载次数。 +
+ 安全分享 ++ 服务器零存储,纯中转下载。支持 HTTP 直链和 SFTP 流式下载,实时显示下载进度。 +
+ 高效传输 ++ 完整的用户注册、登录、权限管理系统。管理员可以管理所有用户和分享,支持用户封禁。 +
+ 权限管理 ++ JWT 认证,密码 bcrypt 加密存储,SQL 注入防护,XSS 防护。所有数据传输经过加密处理。 +
+ 企业级安全 ++ 完美支持桌面和移动设备,自适应各种屏幕尺寸。随时随地访问你的文件,移动办公更便捷。 +
+ 跨平台 ++ 提供桌面端上传工具,支持拖拽上传,实时显示进度。自动配置连接,让大文件上传更简单。 +
+ 效率工具 ++ 完整的 Docker 容器化部署方案,一键部署脚本,自动环境检查。易于维护,快速升级。 +
+ 开箱即用 ++ 基于最新技术构建,保证性能和可扩展性 +
+
+ 立即注册,开始使用玩玩云管理你的文件。
+ 完全免费,开源透明,数据完全由你掌控。
+