工作空间管理员脚本和命令
清理数据库
./scripts/clean-db.sh
通过删除所有数据同时保留数据库模式和结构来清理数据库。
Caution
使用时请谨慎,因为这将删除所有现有数据。
清理构建工件和依赖项
scripts/clean-workspace.sh
删除所有构建工件、node_modules 目录和其他生成的文件,以确保清洁状态。这在您需要执行新安装或解决依赖项问题时很有用。该命令将删除:
node_modules/目录.next/构建目录dist/目录out/目录.turbo/目录pnpm-lock.yamldata/*.json(开发 JSON 备份文件)public/documentationdocumentation/.docusaurus、.cache、.cache-*、build、node_modules、pnpm-lock.yaml.genkit/目录*.tsbuildinfo文件- pnpm 存储缓存(通过
pnpm store prune) - Docker 构建缓存和系统剪裁(镜像、网络、卷)
清理 Docker Compose 和 Docker 环境
scripts/clean-docker.sh
执行完整的 Docker 清理,这对于以下情况很有用:
- 释放磁盘空间
- 删除旧的/未使用的 Docker 工件
- 清理开发或测试会话后
- 维护清洁的 Docker 环境
更新包到最新版本
您可以手动使用:
ncu --upgrade
pnpm update
或使用自动脚本(首选 source,因此 nvm 应用于当前 shell;对于 CI 或非交互式运行,请使用 CI=1 或 UPGRADE_ALLOW_EXEC=1):
source ./scripts/upgrade-dependencies.sh
upgrade-dependencies.sh 脚本自动执行整个依赖项升级过程。它是项目无关的:包管理器、工作空间包和每个包的验证命令都是自动检测的(因此根包和 documentation/ 包都升级,没有硬编码路径)。它:
- 通过
upgrade-tools.sh设置工具(nvm / Node LTS、全局pnpm、npm-check-updates、doctoc) - 使用
npm-check-updates医生模式执行 build-safe 升级,每个包:它保留通过包的typecheck/lint的升级,并撤销破坏构建的升级(具有嵌入式 ESLint 同行网关,因此eslint和 React 插件升级保持兼容) - 更新工作空间 pnpm 锁定文件并安装依赖项
- 更新浏览器列表数据库
- 检查漏洞(
pnpm audit)并应用非破坏性修复(pnpm audit --fix) - 优先考虑安全:如果易受攻击的直接依赖项只能通过破坏构建的升级来修复,则强制应用安全版本并报告构建错误,以便代码可以更新以保持兼容性
- 打印摘要(升级的包与跳过的破坏构建的包、修复的漏洞/剩余的漏洞以及手动回滚的清单快照路径)
此脚本提供了保持依赖项最新和安全的完整工作流程。
检查未使用的包
pnpm depcheck
更新版本信息
./scripts/update-version.sh
此脚本自动更新多个文件中的版本信息以保持同步。它:
- 从
package.json中提取版本 - 更新
.env文件中的VERSION变量(如果不存在则创建它) - 更新
Dockerfile中的VERSION变量(如果存在) - 更新
documentation/package.json版本字段(如果存在) - 仅在版本更改时更新
- 对每个操作提供反馈
预检查脚本
./scripts/pre-checks.sh
此脚本在启动开发服务器、构建或启动生产服务器之前运行预检查。它:
- 确保
.duplistatus.key文件存在(通过ensure-key-file.sh) - 更新版本信息(通过
update-version.sh)
此脚本由 pnpm dev、pnpm build 和 pnpm start-local 自动调用。
确保关键文件存在
./scripts/ensure-key-file.sh
此脚本确保 .duplistatus.key 文件存在于 data 目录中。它:
- 如果不存在则创建
data目录 - 如果缺失则生成新的 32 字节随机密钥文件
- 将文件权限设置为 0400(所有者只读)
- 修复权限如果它们不正确
密钥文件用于应用程序中的加密操作。
管理员账户恢复
./admin-recovery <username> <new-password>
此脚本允许在锁定或忘记密码时恢复管理员账户。它:
- 重置指定用户的密码
- 如果账户被锁定则解锁它
- 重置失败登录尝试计数
- 清除 "必须更改密码" 标志
- 验证密码是否满足安全要求
- 将操作记录到审计日志
示例:
./admin-recovery admin NewPassword123
Caution
此脚本直接修改数据库。仅在必要时用于账户恢复时使用。
复制图像
./scripts/copy-images.sh
将图像文件从 documentation/static/img 复制到应用程序中的相应位置:
- 将
favicon.ico复制到src/app/ - 将
duplistatus_logo.png复制到public/images/ - 将
duplistatus_banner.png复制到public/images/
用于保持应用程序图像与文档图像同步。
比较开发环境和 Docker 之间的版本
./scripts/compare-versions.sh
此脚本比较开发环境和运行的 Docker 容器之间的版本。它:
- 仅比较 SQLite 版本的主要版本(例如,3.45.1 与 3.51.1 被认为是兼容的,显示为 "✅ (主要)"")
- 精确比较 Node、npm 和 Duplistatus 版本(必须完全匹配)
- 显示一个格式化的表格,显示所有版本比较
- 提供一个带有颜色编码结果的摘要(✅ 表示匹配,❌ 表示不匹配)
- 如果所有版本匹配则退出代码为 0,如果存在不匹配则退出代码为 1
要求:
- Docker 容器名为
duplistatus必须正在运行 - 脚本从 Docker 容器日志中读取版本信息
示例输出:
┌─────────────────────────┬──────────────────────────────┬──────────────────────────────┬──────────────┐
│ Component │ Development │ Docker │ Match │
├─────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────┤
│ SQLite │ 3.45.1 │ 3.51.1 │ ✅ (major) │
│ Node │ 24.12.0 │ 24.12.0 │ ✅ │
│ npm │ 10.9.2 │ 10.9.2 │ ✅ │
│ Duplistatus │ 1.2.1 │ 1.2.1 │ ✅ │
└─────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────┘
注意: SQLite 版本仅按主要版本比较,因为同一主要版本内的不同补丁版本通常是兼容的。脚本将指示如果 SQLite 版本在主要级别上匹配但补丁版本不同。
查看数据库中的配置
sqlite3 data/backups.db "SELECT key, value FROM configurations;" | awk -F'|' '
{print "\n" $1 ": ";
if(index($2,"{")>0) {print $2 |"jq -C ."; close("jq -C .")}
else {print $2;}}' | less -R
sqlite3 /var/lib/docker/volumes/duplistatus_data/_data/backups.db "SELECT key, value FROM configurations;" | awk -F'|' '
{print "\n" $1 ": ";
if(index($2,"{")>0) {print $2 |"jq -C ."; close("jq -C .")}
else {print $2;}}' | less -R
显示备份设置
./scripts/show-backup-settings.sh [database_path]
以格式化表格显示配置表中 backup_settings 值的内容。用于调试通知配置。默认数据库路径:data/backups.db。