xlcp/deploy/DEPLOYMENT_CHECKLIST.md
tangweijie bc40155ef0 chore: 添加部署配置及文档
- 新增 deploy/ 目录包含 Docker 部署配置、数据库脚本、部署脚本
- 更新 .gitignore 忽略 deploy 构建产物
- 添加 AGENTS.md AI Agent 指南
- 添加项目构建脚本 build.sh
2026-01-22 21:10:49 +08:00

298 lines
6.1 KiB
Markdown

# XL监狱综合管理平台 - 部署前检查清单
## 🖥️ 远程服务器架构检查
由于无法直接SSH连接,请手动运行以下命令检查远程服务器架构:
```bash
ssh root@192.168.10.150 "uname -m && cat /etc/os-release && docker --version && docker compose version"
```
### 预期输出示例:
**x86_64 架构 (最常见)**:
```
x86_64
NAME="CentOS Linux"
VERSION="7 (Core)"
Docker version 24.0.7
Docker Compose version v2.24.0
```
**ARM64 架构 (树莓派、ARM服务器)**:
```
aarch64
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
Docker version 24.0.7
Docker Compose version v2.24.0
```
## ✅ 部署方式选择
### 方式 A: 在线部署 (服务器网络良好)
**适用场景**:
- 服务器可以访问 Docker Hub
- 网络带宽充足
- 快速测试部署
**步骤**:
```bash
cd deploy
./scripts/deploy.sh
```
### 方式 B: 离线部署 (推荐生产环境) ⭐
**适用场景**:
- 服务器网络受限
- 需要离线部署
- 多服务器部署
- 网络速度慢
**步骤**:
#### 1. 本地打包镜像
```bash
cd deploy
./scripts/save-images.sh
```
这会创建 `images-archive/` 目录,包含:
- `xlcp-docker-images.tar.gz` (约 2-3GB)
- `upload.sh` (自动上传脚本)
- `README.md` (详细说明)
#### 2. 上传镜像到服务器
**方式 2.1: 使用自动脚本** (最简单)
```bash
cd images-archive
./upload.sh
```
**方式 2.2: 手动上传**
```bash
cd images-archive
# 使用 scp
scp xlcp-docker-images.tar.gz root@192.168.10.150:/projects/data/xlcp/
# 或使用 rsync
rsync -avz --progress xlcp-docker-images.tar.gz root@192.168.10.150:/projects/data/xlcp/
```
#### 3. 在服务器加载镜像
```bash
# SSH 到服务器
ssh root@192.168.10.150
# 进入目录
cd /projects/data/xlcp
# 加载镜像
docker load -i xlcp-docker-images.tar.gz
# 验证镜像
docker images | grep -E 'mysql|redis|nginx'
```
#### 4. 部署服务
```bash
# 确保部署文件已上传
cd /projects/data/xlcp
# 启动服务
docker compose up -d
# 查看状态
docker compose ps
```
## 📋 镜像兼容性说明
### ✅ 全平台支持
以下镜像在 **x86_64****ARM64** 上都支持:
| 镜像 | x86_64 | ARM64 | 说明 |
|------|--------|-------|------|
| mysql:8.0 | ✅ | ✅ | 官方支持双架构 |
| redis:7-alpine | ✅ | ✅ | 官方支持双架构 |
| nginx:1.25-alpine | ✅ | ✅ | 官方支持双架构 |
| node:20-alpine | ✅ | ✅ | 官方支持双架构 |
### ⚠️ 构建镜像
以下镜像仅在本地构建时使用,不会影响部署:
| 镜像 | 用途 | x86_64 | ARM64 |
|------|------|--------|-------|
| maven:3.9-eclipse-temurin-21 | 后端编译 | ✅ | ✅ |
| eclipse-temurin:21-jre-alpine | 后端运行 | ✅ | ✅ |
### 🔄 架构不兼容怎么办?
如果远程服务器架构与本地不同,有以下解决方案:
#### 方案 1: 在远程服务器直接构建 (推荐)
```bash
# 上传源代码到服务器
rsync -avz --exclude node_modules --exclude target \
../ root@192.168.10.150:/projects/data/xlcp/
# SSH 到服务器
ssh root@192.168.10.150
# 进入项目目录
cd /projects/data/xlcp
# 构建镜像
cd deploy
docker compose build
```
#### 方案 2: 使用 buildx 构建多架构镜像
```bash
# 启用 buildx
docker buildx create --name multiarch --use
# 构建并导出多架构镜像
docker buildx build --platform linux/amd64,linux/arm64 \
-t xlcp-backend \
--load \
-f docker/backend/Dockerfile \
../backend
```
#### 方案 3: 使用交叉编译 (高级)
需要配置 QEMU 等工具,比较复杂,不推荐。
## 🎯 快速决策树
```
检查服务器网络
|
├─ 可以访问 Docker Hub
| └─ 使用方式 A (在线部署)
|
└─ 无法访问或速度慢
|
├─ 架构相同 (都是 x86_64 或都是 ARM64)
| └─ 使用方式 B (离线部署)
|
└─ 架构不同
|
├─ 服务器性能好
| └─ 方案 1 (远程构建)
|
└─ 服务器性能差
└─ 找一台相同架构的机器做离线包
```
## 📝 实际操作示例
### 示例 1: 本地 Mac (ARM64) -> 远程 Linux (x86_64)
```bash
# 检查本地架构
uname -m
# 输出: arm64 (Apple Silicon)
# 检查远程架构
ssh root@192.168.10.150 "uname -m"
# 输出: x86_64
# 由于架构不同,选择在远程服务器构建
rsync -avz --exclude node_modules --exclude target \
/path/to/xlcp/ root@192.168.10.150:/projects/data/xlcp/
ssh root@192.168.10.150 'cd /projects/data/xlcp/deploy && docker compose up -d --build'
```
### 示例 2: 本地 Mac (x86_64) -> 远程 Linux (x86_64)
```bash
# 架构相同,可以使用离线部署
cd /path/to/xlcp/deploy
./scripts/save-images.sh
cd images-archive
./upload.sh
```
## 🆘 常见问题
### Q1: 如何快速查看服务器架构?
```bash
ssh root@192.168.10.150 "uname -m"
```
输出:
- `x86_64` = Intel/AMD 64位
- `aarch64` = ARM 64位
- `armv7l` = ARM 32位
### Q2: 镜像很大,上传需要多久?
取决于网络速度:
- 100Mbps: 约 3-5 分钟
- 10Mbps: 约 30-50 分钟
- 1Mbps: 约 5-8 小时
建议使用 rsync,支持断点续传。
### Q3: 上传中断了怎么办?
使用 rsync 的断点续传功能:
```bash
rsync -avz --partial --progress \
xlcp-docker-images.tar.gz root@192.168.10.150:/projects/data/xlcp/
```
### Q4: 服务器没有 Docker 怎么办?
先安装 Docker:
```bash
ssh root@192.168.10.150
# CentOS/RHEL
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
```
## ✅ 推荐的最佳实践
1. **开发环境**: 使用在线部署,快速迭代
2. **测试环境**: 使用离线部署,模拟生产
3. **生产环境**:
- 准备离线镜像包
- 多次测试部署流程
- 准备回滚方案
4. **多环境部署**: 建立镜像仓库 (Harbor/Registry)
## 📞 下一步
完成架构检查后,选择对应的部署方式:
- **在线部署**: 直接运行 `./scripts/deploy.sh`
- **离线部署**: 先运行 `./scripts/save-images.sh`
- **远程构建**: 先上传代码,再远程构建
需要帮助? 查看各脚本的帮助信息:
```bash
./scripts/save-images.sh --help
./scripts/deploy.sh --help
```