# 服务器部署 - 最佳实践

## 问题根源
当前主要问题：**SSH 长连接不稳定**，导致部署命令被 SIGKILL。

## 解决方案

### 方案 A：服务器本机执行（推荐）
最稳定的方式，不依赖外部 SSH。

#### 1. 上传部署脚本
```bash
# 只需执行一次
scp infra/docker/deploy-control.sh xiaoxia-server:/usr/local/bin/xiaoxia-deploy
ssh xiaoxia-server "chmod +x /usr/local/bin/xiaoxia-deploy"
```

#### 2. 服务器本机部署
```bash
# SSH 进服务器后执行
ssh xiaoxia-server
xiaoxia-deploy staging deploy
```

或者用 tmux 隔离：
```bash
ssh xiaoxia-server
tmux new -s deploy
xiaoxia-deploy staging deploy
# Ctrl+B, D 离开 tmux，部署继续跑
```

#### 3. 日常操作
```bash
# 查看状态
xiaoxia-deploy staging status

# 查看日志
xiaoxia-deploy staging logs api
xiaoxia-deploy staging logs web

# 重启服务
xiaoxia-deploy staging restart web
```

### 方案 B：systemd 服务（生产推荐）
让部署变成系统服务，可手动触发或定时执行。

#### 1. 安装服务
```bash
scp infra/systemd/xiaoxia-saas-staging-deploy.service xiaoxia-server:/etc/systemd/system/
ssh xiaoxia-server "systemctl daemon-reload"
```

#### 2. 触发部署
```bash
ssh xiaoxia-server "systemctl start xiaoxia-saas-staging-deploy"
```

#### 3. 查看日志
```bash
ssh xiaoxia-server "tail -f /var/lib/xiaoxia-saas-staging/deploy.log"
# 或
ssh xiaoxia-server "journalctl -u xiaoxia-saas-staging-deploy -f"
```

### 方案 C：Gitea CI（全自动）
推送代码后自动部署，完全不依赖手工 SSH。

已配置在 `.gitea/workflows/deploy.yml`，只需：
```bash
git push origin main
```

## 当前建议

**立即执行**
1. 把 `deploy-control.sh` 上传到服务器
2. SSH 进服务器，开 tmux
3. 在 tmux 里执行 `xiaoxia-deploy staging deploy`
4. 退出 tmux，部署继续跑

**稍后优化**
1. 配置 systemd 服务
2. 或者启用 Gitea CI 自动部署

## 为什么不再用本地 SSH 长命令
- SSH 连接不稳定
- 长时间构建容易断
- 重试成本高
- 难以恢复中间状态

服务器本机执行 + tmux/systemd = 最稳定的部署方式。
