TOTP VAULT · OPERATIONS GUIDE · v1.2.0
发布与命令速查
第十章 发布与命令速查
说明源码发布检查、版本更新、常用命令、上线清单与禁止事项。
#51. 发布给其他人前检查源码包
服务器 SSH / 终端🖥️ 执行位置:服务器 SSH / 终端
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
最终发布 ZIP 内不得包含:
.env
database.sqlite
vault.key
secure-store.enc
AGE Private Key
Microsoft Client Secret
Access Token
Refresh Token
真实 Tenant ID
真实 Client ID
真实域名配置
真实管理员账号数据
storage/logs 中真实日志
检查:
unzip -l TOTP-Vault-v1.2.0-Baota-Final-20260824.zip
源码包应该只有模板与空 .gitkeep 数据目录。
#52. 更新最终源码到已有网站
服务器 SSH / 终端🖥️ 执行位置:服务器 SSH / 终端
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
先备份:
cd /www/wwwroot/2fa.example.com
PHP_BINARY=/www/server/php/82/bin/php bash scripts/backup.sh
备份关键运行配置:
UPGRADE_BAK="/root/totp-vault-upgrade-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$UPGRADE_BAK"
cp -a .env "$UPGRADE_BAK/.env"
cp -a /www/server/totp-vault/data/database.sqlite "$UPGRADE_BAK/database.sqlite"
cp -a /www/server/totp-vault/secrets/vault.key "$UPGRADE_BAK/vault.key"
cp -a /www/server/totp-vault/secrets/secure-store.enc "$UPGRADE_BAK/secure-store.enc" 2>/dev/null || true
chmod -R go-rwx "$UPGRADE_BAK"
替换源码时:
保留 .env
不要覆盖 /www/server/totp-vault/data
不要覆盖 /www/server/totp-vault/secrets
替换后:
cd /www/wwwroot/2fa.example.com
/www/server/php/82/bin/php artisan totp:migrate
/www/server/php/82/bin/php artisan totp:test
sudo -u www /www/server/php/82/bin/php artisan totp:health --online
/etc/init.d/php-fpm-82 restart
/etc/init.d/nginx reload
#53. 最常用命令
服务器 SSH / 终端🖥️ 执行位置:服务器 SSH / 终端
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
#PHP
/www/server/php/82/bin/php -v
#项目测试
cd /www/wwwroot/2fa.example.com
/www/server/php/82/bin/php artisan totp:test
#健康检查
sudo -u www /www/server/php/82/bin/php artisan totp:health
#在线健康检查
sudo -u www /www/server/php/82/bin/php artisan totp:health --online
#手动备份
PHP_BINARY=/www/server/php/82/bin/php bash scripts/backup.sh
#延迟备份
PHP_BINARY=/www/server/php/82/bin/php bash scripts/backup-due.sh
#Nginx
/www/server/nginx/sbin/nginx -t
/etc/init.d/nginx reload
#PHP 重启
/etc/init.d/php-fpm-82 restart
#日志
tail -n 100 /www/wwwroot/2fa.example.com/storage/logs/php-error.log
tail -n 100 /www/wwwlogs/2fa.example.com.error.log
#AGE
command -v age
age --version
#proc_open
/www/server/php/82/bin/php -r 'echo function_exists("proc_open") ? "AVAILABLE\n" : "DISABLED\n";'
#54. 最终上线 Checklist
核对 / 预期结果✅ 用途:核对 / 验收 / 发布前检查
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
#系统
- [ ] Ubuntu 时间同步正常
- [ ] 2 GB 服务器已有 Swap
- [ ] 云安全组 TCP 80/443 放行
- [ ] 宝塔端口已限制访问来源
#PHP
- [ ] PHP 8.2+
- [ ] pdo_sqlite
- [ ] sodium
- [ ] curl
- [ ] json
- [ ] mbstring
- [ ] proc_open AVAILABLE
#数据安全
- [ ] database.sqlite 在 Web Root 外
- [ ] vault.key 在 Web Root 外
- [ ] secure-store.enc 在 Web Root 外
- [ ] vault.key 600
- [ ] 运行目录是 public
- [ ] 没有 chmod 777
#Web
- [ ] HTTPS 正常
- [ ] HTTP 强制 HTTPS
- [ ] Nginx 只执行 public/index.php
- [ ]
.env403/404 - [ ]
/admin未登录不可进入 - [ ] 管理员 MFA 已启用
#Microsoft
- [ ] Redirect URI 是 Web
- [ ] Delegated Files.ReadWrite
- [ ] Client Secret 填的是 Value
- [ ] OneDrive Connected
- [ ] TOTP-Vault-Backup/Backups 可访问
- [ ] Refresh Token 已加密保存
#AGE
- [ ] AGE Private Key 只在自己的离线设备
- [ ] AGE Private Key 有至少两份离线副本
- [ ] 网站只填写 age1... Public Key
- [ ] AGE binary PASS
#备份
- [ ] 手动备份成功
- [ ] OneDrive 只有
.tar.gz.age - [ ] SHA256 已记录
- [ ] 每日 03:30 任务成功
- [ ] 每 5 分钟任务成功
- [ ] health --online 无 FAIL
- [ ] 至少进行一次隔离恢复或离线导出演练
#55. 绝对不要做
核对 / 预期结果✅ 用途:核对 / 验收 / 发布前检查
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
不要:
chmod -R 777 /www
不要:
rm -rf /www/server/totp-vault/secrets/vault.key
不要把:
AGE Private Key
vault.key
secure-store.enc
.env
Microsoft Client Secret
Refresh Token
上传公开 GitHub 或发给不可信第三方。
不要用新生成 vault.key 去尝试解密旧数据库。
不要在唯一生产实例上做第一次恢复演练。
#56. 官方参考
核对 / 预期结果✅ 用途:核对 / 验收 / 发布前检查
下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。
宝塔官方安装:
https://docs.bt.cn/getting-started/quick-installation-of-bt-panel
Microsoft Authorization Code Flow:
https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow
Microsoft Graph Files.ReadWrite 权限:
https://learn.microsoft.com/en-us/graph/permissions-reference
Microsoft Graph 创建 OneDrive 文件夹:
https://learn.microsoft.com/en-us/graph/api/driveitem-post-children?view=graph-rest-1.0
AGE 官方:
https://github.com/FiloSottile/age/releases