小吾云匣 部署教程

Flask 单文件网盘系统 · 从零到上线完整指南

关于小吾云匣

小吾云匣是一个基于 Python Flask 的单文件网盘系统,专为个人开发者和小团队设计。全部功能集成在一个 server.py 文件中,无需数据库、无需复杂配置,上传即用。

下载源码包 (ZIP)

核心功能

技术栈

组件技术
后端Python 3.8+ / Flask / Jinja2 模板
前端纯 HTML/CSS/JS,零外部依赖
存储本地文件系统,无数据库
进程守护systemd
可选依赖Pillow(图片缩略图加速)
环境要求 安装步骤 配置说明 进程守护 反向代理 防火墙 验证与维护 API 接口

1. 环境要求

服务器最低配置

项目最低要求推荐配置
操作系统Ubuntu 18.04 / CentOS 7 / Debian 10Ubuntu 22.04 LTS
CPU1 核2 核
内存512 MB1 GB
磁盘按需(建议 20 GB 起)按需
网络公网 IP + 端口 80 可用域名 + DNS 解析

软件依赖

软件版本要求用途
Python3.8 及以上运行 Flask 服务
pip跟随 Python 版本安装依赖
Flask3.0 及以上Web 框架
Pillow9.0 及以上 (可选)图片缩略图
systemd系统自带进程守护
说明:Pillow 是可选的。如果不安装,图片文件列表仍会显示缩略图(原图缩放),但性能略差。安装后会用 PIL 生成 64px 缩略图,加载更快。

2. 安装步骤

以下操作在服务器终端逐条执行。

1SSH 连接服务器

ssh root@你的服务器IP

2安装 Python 和 pip

# Ubuntu / Debian
apt-get update && apt-get install -y python3 python3-pip

# CentOS
# yum install -y python3 python3-pip

3安装 Flask 和 Pillow

pip3 install --break-system-packages flask pillow
注意:较新的 Python 版本(3.11+)使用 pip 安装时可能需要 --break-system-packages 参数,否则会报错。如果不需要缩略图功能,可省略 pillow

4创建部署目录

mkdir -p /opt/filebox/files

5上传程序文件

server.py 上传到服务器 /opt/filebox/ 目录。

# 方式一:scp 上传(在本地执行)
scp server.py root@你的服务器IP:/opt/filebox/

# 方式二:直接在服务器上用 cat 写入
# (复制 server.py 全部内容,粘贴到终端)

6启动服务

cd /opt/filebox
nohup python3 server.py > server.log 2>&1 &

7访问验证

浏览器打开 http://你的服务器IP,应看到登录页面。

重要:初始密码为 1,建议首次登录后立即修改。文件存储在 /opt/filebox/files/,请确保磁盘空间充足。

3. 配置说明

修改密码

登录后,点击右上角「改密」按钮,输入旧密码和新密码即可。密码以 SHA256 哈希存储在 /opt/filebox/password.hash

如果忘记密码:删除 /opt/filebox/password.hash 文件,重启服务后会重置为初始密码 1
rm /opt/filebox/password.hash
systemctl restart filebox

存储路径

所有文件存储在 /opt/filebox/files/。如需更换位置,修改 server.py 中第 10 行的 STORAGE 变量:

STORAGE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files")

Session 有效期

默认 7 天。修改 server.py 第 8 行:

app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(days=7)

登录限制

3 次失败触发数学验证码,5 次失败 IP 锁定 10 分钟。锁定时间和阈值可在 server.py 中调整:

# 第 68 行:锁定 600 秒(10 分钟)
_ip_attempts[ip][2] = now + 600
# 第 53 行:触发验证码的失败次数
if fail_count >= 3:

4. systemd 进程守护

推荐使用 systemd 管理服务,支持开机自启、崩溃自动重启。

1创建服务文件

cat > /etc/systemd/system/filebox.service << 'EOF'
[Unit]
Description=小吾云匣 FileBox Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/filebox
ExecStart=/usr/bin/python3 /opt/filebox/server.py
Restart=always
RestartSec=5
StandardOutput=append:/opt/filebox/server.log
StandardError=append:/opt/filebox/server.log

[Install]
WantedBy=multi-user.target
EOF

2启用并启动

systemctl daemon-reload
systemctl enable filebox
systemctl start filebox

常用管理命令

systemctl status filebox    # 查看状态
systemctl restart filebox   # 重启
systemctl stop filebox      # 停止
journalctl -u filebox -f    # 实时日志
tail -f /opt/filebox/server.log  # 查看日志

5. Nginx 反向代理(可选)

如果需要 HTTPS 或与其他站点共用 80/443 端口,可使用 Nginx 反向代理。

安装 Nginx

apt-get install -y nginx

修改 server.py

将 server.py 末尾的端口从 80 改为其他端口(如 5000):

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=False)

添加 Nginx 配置

cat > /etc/nginx/sites-available/filebox << 'EOF'
server {
    listen 80;
    server_name 你的域名或IP;

    client_max_body_size 2000m;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
EOF

ln -s /etc/nginx/sites-available/filebox /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
关于上传限制:client_max_body_size 控制 Nginx 层面的最大上传体积。Flask 本身无上传大小限制。修改后记得 nginx -s reload

6. 防火墙配置

如果服务器启用了防火墙,需要放行端口。

# ufw (Ubuntu)
ufw allow 80/tcp
ufw reload

# firewalld (CentOS)
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

# iptables
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

云服务商(阿里云、腾讯云等)还需要在安全组中放行对应端口。

7. 验证与维护

功能检查清单

  1. 浏览器访问,输入密码 1 登录
  2. 点击上传区域或拖拽文件,确认上传弹窗显示文件大小和重名提示
  3. 上传测试文件,验证进度条显示
  4. 双击文件名进行重命名(不允许修改后缀)
  5. 点击「预览」查看图片/视频/音频/代码文件
  6. 点击「下载」按钮下载文件
  7. 点击「分享」选择有效时长,生成临时下载链接
  8. 在无痕窗口中打开分享链接,验证无需登录即可下载
  9. 点击「改密」修改密码,登出后用新密码重新登录
  10. 验证服务器重启后 systemd 自动拉起服务

数据备份

# 定期备份文件目录
tar -czf filebox-backup-$(date +%Y%m%d).tar.gz /opt/filebox/files/ /opt/filebox/password.hash

磁盘监控

服务主页顶部显示已用 / 总磁盘空间,定期关注避免写满。

df -h /opt/filebox/files

更新程序

  1. 上传新的 server.py 覆盖 /opt/filebox/server.py
  2. systemctl restart filebox
  3. 刷新浏览器验证

8. API 接口一览

方法路径说明认证
GET/首页(文件列表 + 登录)
POST/login登录
GET/logout退出登录
POST/upload上传文件(multipart)
GET/download/<path>下载文件
GET/preview/<path>获取预览信息(JSON)
GET/raw/<path>直接返回文件内容
GET/thumb/<path>图片缩略图(64px)
DELETE/api/delete?path=删除文件/文件夹
POST/api/rename重命名文件
POST/api/share生成分享链接
GET/s/<token>分享链接下载
GET/api/zip?path=打包下载文件夹
POST/api/change-password修改密码
POST/api/exists检测文件是否存在

分享 API 参数

POST /api/share
Content-Type: application/json

{
  "file": "文件名",
  "dir": "子目录路径(可选)",
  "hours": 6       // 有效时长:1/6/24/48/72
}

// 返回
{
  "ok": true,
  "link": "/s/xxxxxxxx",
  "expires_in": "6小时"
}

重命名 API 参数

POST /api/rename
Content-Type: application/json

{
  "old": "旧文件名",
  "new": "新文件名(需保留原后缀)",
  "dir": "子目录路径(可选)"
}

返回云匣