file.xpcool.com 下载站迁移到 FileBrowser Quantum(v1.5.5);记录部署要点与 CLI 改密方法

This commit is contained in:
夏犀麟 2026-09-04 00:06:57 +08:00
parent a14e162bd1
commit 2776914d07
4 changed files with 72 additions and 1 deletions

View File

@ -0,0 +1,27 @@
# 2026-09-03 工作日志
## file.xpcool.com 文件下载站上线Filebrowser
- **需求**/data/share 文件经 file.xpcool.com 提供下载;仅下载 + 访问控制 + 临时分享。
- **方案**Filebrowser 容器127.0.0.1:10880→80restart unless-stopped+ 宿主机 nginx 反代80→301→443。证书 file.xpcool.com_bundle.crt/.key 已上传至 /data/nginx/ssl/file.xpcool.com/。
- **关键安全点**/data/share 以 `:ro` 只读挂载 /srv —— 文件系统层面禁止任何写入;数据目录 /data/filebrowser/database属主改容器 user uid=1000=lighthouse
- **DNS**file.xpcool.com → 193.112.118.168(用户加记录)。
- **SSH 通道**22025 曾禁+密码禁;用户重新绑定密钥后以 `CentOS.pem`(RSA)→xxcool 登录成功root 被拒)。本机经 HTTP 代理 127.0.0.1:65195 可 CONNECT 443 但 22025 不通502需安全组放行直连。
- **大坑记录**filebrowser 新版 v2.3x
1. **不再默认 admin/admin**——全新 db 首次启动生成随机密码,仅打印在容器日志(`docker logs filebrowser` 找 "initialized with randomly generated password")。
2. db 是 **bbolt** 非 sqlitesqlite3 读报 "file is not a database")。
3. CLI `users update` 走本地 HTTP/需服务停止操作 db运行时直连 db 报 `Error: timeout`(文件锁);经 API PUT /api/users/1 改密码始终 400invalid data type需完整对象且字段严格
4. 镜像默认以 `user`(uid 1000) 运行(非 root宿主挂载目录须 chown 1000 否则写库 permission denied。
5. **镜像 entrypoint 即 filebrowser**docker run 传参勿重复 `filebrowser` 前缀。
6. ⚠️ **filebrowser 官方项目已于 2026-09-01 归档**(日志 NOTICE停止发布与安全修复已知问题见其 security/advisories有分叉 FileBrowser Quantum 可关注。
- **对外验证通过**:公网 https://file.xpcool.com 登录 → API 列目录返回两个安装包(精密智控平台 1.0.0/1.0.1,各 ~94MB。注意 filebrowser 对 `HEAD /` 返回 404无害浏览器 GET 正常)。
- **admin 初始密码**`8iXK_m4z7TAHbiMQ`重置后日志生成值API 改密失败未改待用户网页登录后自改。locale 默认 en网页改 zh-cn。
- **运维要点**:容器重建后如需找回密码看日志;/config 匿名卷保存 settings.jsonport 80/root /srv/db 路径);旧 db 备份 /data/filebrowser/database/filebrowser.db.bak.*。
- 部署脚本/说明nginx conf 模板保留在 `.workbuddy/tmp/file.xpcool.com.conf`scp 至 /tmp 后 sudo cp 到 /data/nginx/conf.d/ 并 reload
- **账号管理补充**API 建号/改密不可用POST/PUT `/api/users` 均 400 "invalid data type",含最小 body 与 GET roundtrip判定归档版 users 管理 API 受限)。结论:**改密/建只读账号/语言切换一律走网页 UI**admin 登录后 设置→用户管理CLI/API 勿再尝试。当前仅 admin 一账号。
- **迁移到 FileBrowser Quantumv1.5.5-stable晚间完成**:镜像 `gtstef/filebrowser:stable`60MB 含 ffmpeg容器 **fbq**`127.0.0.1:10881→80`restart unless-stopped挂载 `/data/share:/srv:ro` + `/data/filebrowser-q:/home/filebrowser/data`config.yaml+database.db+tmp 缓存全在此chown 1000:1000=lighthouse。nginx 反代已切 10881。旧容器 `filebrowser`(原版 10880已 stop **保留回滚**
- **初始凭据**admin/admin与归档原版不同——原版随机密码打日志Quantum 首启日志 "Resetting admin user to default username and password"),要求用户首登后立即改密。
- config.yaml 最小配置:`server.cacheDir: /home/filebrowser/data/tmp` + `sources[0]: path=/srv, config.defaultEnabled: true, defaultUserScope: /`(模板在 `.workbuddy/tmp/fbq-config.yaml`)。
- **Quantum API 变化**POST /api/login、/api/users 等原版路径 404API 需用户创建 long-live tokenSwagger /swagger 亦需 token管理操作走网页 UI。
- 验证:公网 title "FileBrowser Quantum";容器内 /srv 两 exe 可见touch /srv 报 Read-only file system只读保护生效
- 文档:官方 docs filebrowserquantum.comv1.5.x stable 用 legacy database.dbv2.0.0 beta 权限模型大改 per-sourceview/download/modify/create/delete per scope
- **Quantum CLI 改密成功2026-09-03 深夜)**:顶层语法 `filebrowser set -u admin,<新密码> -a -c /home/filebrowser/data/config.yaml`(其 --help 里 "Use 'set user' or 'set rule'" 是**误导**,实际没有 set user 子命令,直接顶层 `set -u`)。**坑**:① 服务运行中执行报 "the database is locked",须先 `docker stop fbq`;② 停服后无法 exec`docker run --rm --entrypoint /home/filebrowser/filebrowser -v /data/filebrowser-q:/home/filebrowser/data gtstef/filebrowser:stable set -u ...` 改完再 start③ 成功标志 `successfully updated user: admin`。**登录 API**v1.5POST `/api/auth/login`(原版 /api/login 及 /api/user/login 等均 404错误与正确密码均返回 401 "user unauthorized" 无法区分验证以浏览器为准。admin 新密码为 CLI 生成的 24 位 hex见对话用户可再网页自改

View File

@ -55,7 +55,8 @@
- service 后端容器:`service.xpcool.com:new``127.0.0.1:10100:10100`,网络 `xpcool-net`env`GF_GCFG_ENV=prod` + `DB_DSN=mysql:service:xxx@tcp(xpcool-mysql:3306)/service?...`**必须带 mysql: 类型前缀**+ `JWT_SECRET`;容器内必须有 `manifest/config/config.yaml`(基础配置),否则 GF 启动报「找不到 config」构建目录 `/data/deploy/projects/service.xpcool.com/`main + manifest/config + resourceDockerfile 用 COPY manifest/config 整体拷贝)。
- DB`xpcool-mysql` 容器root 密码见该容器 env库名 `service`,种子执行顺序 003→004→004b→007服务器表结构旧必须先 003 加列;导入用 `sudo sh -c 'docker exec -i xpcool-mysql mysql ... < file'` 宿主机重定向)。
- 权限映射admin_menu type=2 行的 path 必须匹配实际路由(现为 `POST /api/service/admin/...`,见 manifest/sql/007_menu_permissions_v3.sql
- SSH 凭据/密码不入库,需要时询问用户或查对话记忆;远程批量命令用 paramiko 脚本(`%TEMP%\wb_deploy\ssh_exec.py`,支持第 2 参数超时秒数docker build 用服务器端 nohup+日志轮询防超时。
- 文件下载站2026-09-03 上线,当晚迁移):`file.xpcool.com` = **FileBrowser Quantum** 容器 `fbq``gtstef/filebrowser:stable` v1.5.5`127.0.0.1:10881→80`restart unless-stopped`/data/share:/srv:ro` **只读挂载**,数据卷 `/data/filebrowser-q`config.yaml+database.db+tmp属主=镜像 uid1000+ nginx 反代。**要点**:初始凭据 **admin/admin**(首登后立即改密);配置走 `config.yaml`sources/cacheDir管理走网页 UIAPI 与原版不兼容(需用户建 long-live token/swagger 亦需);镜像默认非 root(uid1000);原版 filebrowser(容器 `filebrowser`/10880/db `/data/filebrowser/database`)已于 2026-09-01 归档、现已停用**保留回滚**Quantum v2.0 beta 权限模型改 per-source(view/download/modify/create/delete)。改密/建只读账号/临时分享(过期+密码+匿名)均在网页 UI。
- SSH 凭据/密码不入库,需要时询问用户或查对话记忆;远程批量命令用 paramiko 脚本(`%TEMP%\wb_deploy\ssh_exec.py`,支持第 2 参数超时秒数docker build 用服务器端 nohup+日志轮询防超时。**2026-09-03 实测/更新)**:当前登录 = 项目目录 `CentOS.pem`(RSA) → `xxcool@193.112.118.168:22025`root 被拒;密码登录已禁);安全组按出口 IP 限放 22025本机出口 1.204.105.116 曾因未放行连不上80/443 可达);本机旧记录 `~/.ssh/id_ed25519` 与 wb_deploy 脚本**在当前设备不存在**。
- **服务器安全加固2026-08-27 完成)**firewalld 已启用(放行 22025/80/443/3000/2222cockpit/rpcbind 已停fail2ban 保护 sshd(port=22025, maxretry5/bantime1h);监控脚本 `/usr/local/bin/server-monitor.sh` + cron 每 10 分钟(日志 `/var/log/server-monitor.log`Bark 推送配 `/etc/server-monitor.conf``BARK_URL`dnf-automatic 每天 06:00 自动安全补丁SSH 密钥登录已部署(本地 `~/.ssh/id_ed25519`)但用户要求保留密码登录。**坑**:① 腾讯云安全组未放行 3000/2222/8081Gitea 走 nginx 反代 80/443② 改 sshd 前必须先 `sshd -t` 预检+备份(曾因脏行导致 SSH 断开);③ EPEL 源需腾讯云镜像(`mirrors.cloud.tencent.com/epel`)且 baseurl 必须手动写全;④ CentOS9 的 fail2ban 在 EPEL。
- 本地 pnpm 修复2026-08-27 升级为 wrapper 方案):根因=本环境 MSYS 路径转换故障,把 `/c/...` 参数转成 `E:\c\...`(多 `E:\c\` 前缀)致 corepack shim 与 node 都找不到 pnpm.js。**已建持久 wrapper**`~/.workbuddy/binaries/node/bin/pnpm`(内容:`export NODE_OPTIONS=--experimental-sqlite; exec "<托管node.exe>" "C:/Users/ybtdevxxl/.workbuddy/binaries/node/workspace/node_modules/pnpm/bin/pnpm.cjs" "$@"`,关键=给 node 传 Windows 风格路径 `C:/...` 规避 MSYS 转换)。**提交/构建前需 `PATH="~/.workbuddy/binaries/node/bin:$PATH"` 前置**pre-commit 钩子(lefthook oxlint/oxfmt/eslint/stylelint/checkType)即可正常运行;否则钩子崩 → 只能 --no-verify。已验证 pnpm 11.16.0 + `pnpm exec oxlint` 1.79.0。

View File

@ -0,0 +1,9 @@
# FileBrowser Quantum (v1.5.x stable) 配置文件
# 数据卷挂载点:/home/filebrowser/dataconfig.yaml + database.db + tmp 缓存都在此)
server:
cacheDir: /home/filebrowser/data/tmp # 缩略图/媒体缓存放在数据卷,可跨重启保留
sources:
- path: /srv # 对应宿主 /data/share容器内只读挂载 :ro
config:
defaultEnabled: true # 默认授予所有新用户该源访问权
defaultUserScope: "/" # 默认可访问范围为源根目录

View File

@ -0,0 +1,34 @@
# file.xpcool.com 文件下载服务HTTPS 反代后端 FileBrowser Quantum(127.0.0.1:10881)
# 仅只读下载(/data/share 以只读方式挂载进容器,写入被文件系统层禁止)
# 2026-09-03 迁移:原版 filebrowser(10880 旧容器 filebrowser) → Quantum v1.5.5(容器 fbq)
# HTTP -> HTTPS 跳转
server {
listen 80;
server_name file.xpcool.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name file.xpcool.com;
ssl_certificate /data/nginx/ssl/file.xpcool.com/file.xpcool.com_bundle.crt;
ssl_certificate_key /data/nginx/ssl/file.xpcool.com/file.xpcool.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
# 大文件下载调优:关闭缓冲让文件流式转发,避免占用过多内存/磁盘临时文件
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
location / {
proxy_pass http://127.0.0.1:10881;
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;
proxy_set_header X-Auth-Request-Remote-User "";
}
}