Files
newapi-yx-diy/.claude/commands/migrate-server.md
nosqli 835cd8e74b feat: add SMS verification registration with UniSMS provider
- Add phone field to user model with index and helper methods
- Implement SMS provider interface with UniSMS (合一短信) implementation
- Add SMS verification code sending endpoint with rate limiting (1/60s)
- Support SMS registration in Register() (mutually exclusive with email)
- Add SMS configuration to admin settings (provider, keys, signature, template)
- Display phone number in admin user list contact column
- Add i18n translations for all SMS-related messages (zh-CN, en, zh-TW)
- Add Claude Code skills: sync-upstream, migrate-server
- Update CLAUDE.md with git conventions and deployment guide

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 23:57:15 +08:00

176 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Migrate Server - 服务器迁移指南
帮助将 new-api 服务从老服务器迁移到新服务器,包括代码部署、数据库迁移和配置同步。
## 执行步骤
### 1. 收集信息
先向用户确认以下信息:
- 老服务器 IP / 访问方式
- 新服务器 IP / 访问方式
- 当前使用的数据库类型SQLite / MySQL / PostgreSQL
- 当前部署方式Docker Compose / 直接部署)
- 是否使用 Redis
- 是否有自定义域名需要迁移
### 2. 老服务器 - 备份数据
#### 2.1 数据库备份
**如果使用 SQLite**
```bash
# 找到 SQLite 数据库文件(通常在项目根目录或 data/ 目录下)
# 停止服务防止写入
docker compose stop # 或 systemctl stop new-api
# 复制数据库文件
cp /path/to/new-api.db /backup/new-api.db
# 或者使用 sqlite3 导出
sqlite3 /path/to/new-api.db .dump > /backup/new-api-dump.sql
```
**如果使用 MySQL**
```bash
# 导出完整数据库
mysqldump -u root -p --single-transaction --routines --triggers new_api > /backup/new-api-mysql.sql
# 或者如果 MySQL 在 Docker 中
docker exec <mysql_container> mysqldump -u root -p<password> new_api > /backup/new-api-mysql.sql
```
**如果使用 PostgreSQL**
```bash
# 导出完整数据库
pg_dump -U postgres -d new_api -F c -f /backup/new-api-pg.dump
# 或者如果在 Docker 中
docker exec <pg_container> pg_dump -U postgres -d new_api -F c > /backup/new-api-pg.dump
```
#### 2.2 配置备份
```bash
# 备份环境变量文件
cp .env /backup/.env
# 备份 Docker Compose 配置
cp docker-compose.yml /backup/docker-compose.yml
# 备份其他配置文件(如果有)
cp -r config/ /backup/config/ 2>/dev/null
```
#### 2.3 Redis 数据备份(如果使用)
```bash
# Redis 数据通常不需要迁移(缓存会自动重建)
# 但如果需要:
redis-cli BGSAVE
cp /var/lib/redis/dump.rdb /backup/redis-dump.rdb
```
### 3. 传输备份到新服务器
```bash
# 使用 scp 传输
scp -r /backup/ user@new-server:/path/to/backup/
# 或使用 rsync
rsync -avz /backup/ user@new-server:/path/to/backup/
```
### 4. 新服务器 - 部署准备
#### 4.1 安装基础环境
```bash
# Docker + Docker Compose推荐
curl -fsSL https://get.docker.com | sh
apt install docker-compose-plugin # 或 docker compose v2
# 或者直接部署需要 Go 1.22+ 和 Node.js/Bun
```
#### 4.2 拉取代码
```bash
git clone https://git.586vip.cn/huangzhenpc/newapi-yx-diy.git
cd newapi-yx-diy
git checkout dev-v0.11.0-alpha.9 # 或目标分支
```
#### 4.3 恢复配置
```bash
# 恢复环境变量
cp /path/to/backup/.env .env
# 恢复 Docker Compose 配置(如有定制)
cp /path/to/backup/docker-compose.yml docker-compose.yml
```
### 5. 新服务器 - 恢复数据库
**如果使用 SQLite**
```bash
# 直接复制数据库文件到项目目录
cp /path/to/backup/new-api.db ./data/new-api.db
# GORM AutoMigrate 会在启动时自动添加新字段(如 Phone
```
**如果使用 MySQL**
```bash
# 先启动 MySQL 容器
docker compose up -d mysql
# 等待 MySQL 完全启动
sleep 10
# 导入数据
docker exec -i <mysql_container> mysql -u root -p<password> new_api < /path/to/backup/new-api-mysql.sql
```
**如果使用 PostgreSQL**
```bash
# 先启动 PostgreSQL 容器
docker compose up -d postgres
# 等待 PostgreSQL 完全启动
sleep 5
# 创建数据库(如果不存在)
docker exec <pg_container> createdb -U postgres new_api
# 导入数据
docker exec -i <pg_container> pg_restore -U postgres -d new_api < /path/to/backup/new-api-pg.dump
```
### 6. 新服务器 - 启动服务
```bash
# Docker Compose 部署
docker compose up -d
# 检查服务状态
docker compose ps
docker compose logs -f --tail=50
```
### 7. 验证
向用户确认以下检查项:
- [ ] 服务是否正常启动(访问 `/api/status`
- [ ] 管理员账号能否正常登录
- [ ] 用户数据是否完整
- [ ] 渠道配置是否正常
- [ ] API 密钥是否可用
- [ ] 如果有自定义域名DNS 是否已切换
### 8. 切换流量
- 更新 DNS 记录指向新服务器
- 或更新反向代理Nginx/Caddy配置
- 老服务器保留一段时间作为回退方案
## 注意事项
1. **GORM AutoMigrate**:新版本可能有新的数据库字段(如 `phone`),启动时 GORM 会自动添加,不需要手动执行迁移脚本
2. **环境变量**:确保 `.env` 中的数据库连接字符串指向正确的地址
3. **数据一致性**:迁移前停止老服务器的写入,避免数据不一致
4. **Redis**Redis 缓存数据不需要迁移,服务启动后会自动重建
5. **密钥安全**传输过程中注意保护敏感信息数据库密码、API 密钥等)
6. **回退方案**:保留老服务器至少 1 周,确认新服务器稳定后再关闭