网站搬迁
第八章 网站搬迁
说明旧服务器需要保存什么、如何打迁移包、新服务器怎样恢复。
#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
不会丢失。