TOTP Vault DocsDeployment & Recovery
TOTP VAULT · OPERATIONS GUIDE · v1.2.0

网站搬迁

第八章 网站搬迁

说明

旧服务器需要保存什么、如何打迁移包、新服务器怎样恢复。

#39. 网站搬迁:必须保存什么

核对 / 预期结果

用途:核对 / 验收 / 发布前检查

下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。

搬迁前建议先成功执行一次最新 AGE 备份。

#39.1 必须保存

A. 最终源码或你当前实际运行的项目目录
B. /www/wwwroot/你的域名/.env
C. /www/server/totp-vault/data/database.sqlite
D. /www/server/totp-vault/secrets/vault.key
E. /www/server/totp-vault/secrets/secure-store.enc
F. OneDrive 中的 .tar.gz.age 备份
G. AGE Private Key(本来就在你自己的离线电脑,不从服务器下载)

database.sqlite 已包含:

全部 Vault 记录
网站设置
Logo/Favicon
标签
审计日志
管理员账号哈希
管理员 MFA 加密数据
备份记录

secure-store.enc 包含:

Microsoft Tenant/Client 配置
Client Secret
Access Token
Refresh Token

secure-store.enc 不进入 AGE 数据备份


#40. 搬迁前在旧服务器制作迁移包

服务器 SSH / 终端

🖥️ 执行位置:服务器 SSH / 终端

下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。

停止管理员写入操作,先做最新备份。

cd /www/wwwroot/2fa.example.com
PHP_BINARY=/www/server/php/82/bin/php bash scripts/backup.sh

创建仅 root 可读迁移目录:

MIGRATE_DIR="/root/totp-vault-migrate-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$MIGRATE_DIR"
chmod 700 "$MIGRATE_DIR"

复制关键数据:

cp -a /www/wwwroot/2fa.example.com/.env "$MIGRATE_DIR/.env"
cp -a /www/server/totp-vault/data/database.sqlite "$MIGRATE_DIR/database.sqlite"
cp -a /www/server/totp-vault/secrets/vault.key "$MIGRATE_DIR/vault.key"
cp -a /www/server/totp-vault/secrets/secure-store.enc "$MIGRATE_DIR/secure-store.enc"

打包:

tar -czf "${MIGRATE_DIR}.tar.gz" -C "$(dirname "$MIGRATE_DIR")" "$(basename "$MIGRATE_DIR")"
chmod 600 "${MIGRATE_DIR}.tar.gz"
sha256sum "${MIGRATE_DIR}.tar.gz"

这个迁移包含极敏感数据,只能通过安全通道传输。

传输完成后旧服务器删除临时迁移包:

rm -rf "$MIGRATE_DIR"
shred -u "${MIGRATE_DIR}.tar.gz" 2>/dev/null || rm -f "${MIGRATE_DIR}.tar.gz"

#41. 新服务器恢复搬迁数据

服务器 SSH / 终端

🖥️ 执行位置:服务器 SSH / 终端

下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。

先安装最终源码和 PHP/Nginx/AGE,不要重新生成新数据覆盖旧数据。

把迁移包上传到新服务器 root 临时目录。

解压:

mkdir -p /root/totp-migrate-restore
chmod 700 /root/totp-migrate-restore
tar -xzf /root/你的迁移包.tar.gz -C /root/totp-migrate-restore --strip-components=1

停止 PHP 写入:

/etc/init.d/php-fpm-82 stop

复制:

cp -a /root/totp-migrate-restore/.env /www/wwwroot/2fa.example.com/.env
cp -a /root/totp-migrate-restore/database.sqlite /www/server/totp-vault/data/database.sqlite
cp -a /root/totp-migrate-restore/vault.key /www/server/totp-vault/secrets/vault.key
cp -a /root/totp-migrate-restore/secure-store.enc /www/server/totp-vault/secrets/secure-store.enc

权限:

chown root:www /www/server/totp-vault
chmod 750 /www/server/totp-vault
chown -R www:www /www/server/totp-vault/data /www/server/totp-vault/secrets /www/server/totp-vault/tmp
chmod 700 /www/server/totp-vault/data /www/server/totp-vault/secrets /www/server/totp-vault/tmp
chmod 600 /www/server/totp-vault/data/database.sqlite
chmod 600 /www/server/totp-vault/secrets/vault.key
chmod 600 /www/server/totp-vault/secrets/secure-store.enc
chown www:www /www/wwwroot/2fa.example.com/.env
chmod 600 /www/wwwroot/2fa.example.com/.env

清理 SQLite 临时文件:

rm -f /www/server/totp-vault/data/database.sqlite-wal
rm -f /www/server/totp-vault/data/database.sqlite-shm

迁移:

cd /www/wwwroot/2fa.example.com
sudo -u www /www/server/php/82/bin/php artisan totp:migrate
sudo -u www /www/server/php/82/bin/php artisan totp:test
sudo -u www /www/server/php/82/bin/php artisan totp:health

启动 PHP:

/etc/init.d/php-fpm-82 start
/etc/init.d/nginx reload

最后删除新服务器临时迁移包。


#42. 搬迁时域名发生变化

服务器 SSH / 终端

🖥️ 执行位置:服务器 SSH / 终端

下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。

编辑:

/www/wwwroot/新域名/.env

修改:

APP_URL=https://新域名

Entra → Authentication 中增加新:

https://新域名/admin/backups/onedrive/callback

已有 Refresh Token 可能继续工作,但为了确认新 callback 与未来重新授权正常,建议迁移完成后重新连接一次 Microsoft OneDrive。

确认新连接成功后再删除旧 Redirect URI。


#43. 如果不复制 secure-store.enc

服务器 SSH / 终端

🖥️ 执行位置:服务器 SSH / 终端

下方命令块可以直接复制;带“检查/预期”的内容用于核对结果,不要当作命令输入。

可以不迁移它。

新服务器:

后台 → 备份
重新填写 Tenant ID
Client ID
Client Secret Value
点击连接 Microsoft OneDrive

OneDrive 原来的:

TOTP-Vault-Backup/Backups

不会丢失。