baodan/SERVER_DEPLOY.md

397 lines
7.8 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.

# 🚀 服务器快速部署指南
## 方案对比
| 方案 | 适用场景 | 部署时间 | 网络要求 | 复杂度 |
|------|---------|---------|---------|--------|
| **方案一:一键脚本** | 有网络环境 | 5 分钟 | 需要外网 | ⭐ |
| **方案二:预构建镜像** | 多次部署 | 2 分钟 | 需要 Docker Hub | ⭐⭐ |
| **方案三:离线部署** | 无网络环境 | 10 分钟 | 无需网络 | ⭐⭐ |
| **方案四:最简部署** | 快速测试 | 3 分钟 | 需要镜像 | ⭐ |
---
## 方案一:一键部署脚本(推荐)
**适用场景**:首次部署、有网络环境
**部署步骤**
```bash
# 1. 上传部署脚本到服务器
scp deploy-package.sh user@server:/opt/
# 2. 在服务器上执行
ssh user@server
chmod +x /opt/deploy-package.sh
./deploy-package.sh
```
**或者直接执行**
```bash
# 一键部署(需要先配置 Git 仓库)
curl -fsSL https://raw.githubusercontent.com/your-repo/deploy.sh | bash
```
---
## 方案二:预构建镜像部署
**适用场景**多台服务器部署、CI/CD 流程
### 步骤一:构建并推送镜像
```bash
# 1. 登录 Docker Hub
docker login
# 2. 修改 build-and-push.sh 中的用户名
vim build-and-push.sh
# DOCKER_HUB_USERNAME="your-username"
# 3. 构建并推送
./build-and-push.sh
```
### 步骤二:服务器部署
```bash
# 1. 创建部署目录
mkdir -p /opt/baodanagent
cd /opt/baodanagent
# 2. 下载配置文件
wget https://raw.githubusercontent.com/your-repo/docker-compose.production.yml -O docker-compose.yml
# 3. 配置环境变量
cat > .env << EOF
JWT_SECRET=$(openssl rand -hex 32)
DB_PASSWORD=your-secure-password
EOF
# 4. 启动服务
docker compose up -d
```
---
## 方案三:离线镜像部署
**适用场景**:无网络环境、内网部署
### 步骤一:导出镜像(有网络的机器)
```bash
# 1. 构建镜像
docker compose build
# 2. 导出镜像
./export-images.sh
# 3. 生成的文件
# - baodanagent-images.tar.gz约 2-3GB
```
### 步骤二:传输到服务器
```bash
# 方式一SCP
scp baodanagent-images.tar.gz user@server:/opt/baodanagent/
# 方式二U盘/移动硬盘
cp baodanagent-images.tar.gz /mnt/usb/
# 方式三:内网文件服务器
scp baodanagent-images.tar.gz fileserver:/data/
```
### 步骤三:服务器部署
```bash
# 1. 进入部署目录
cd /opt/baodanagent
# 2. 解压镜像
tar -xzf baodanagent-images.tar.gz
# 3. 导入镜像
for f in *.tar; do docker load -i $f; done
# 4. 启动服务
./import-and-start.sh
```
---
## 方案四:最简部署
**适用场景**:快速测试、开发环境
```bash
# 一条命令部署
bash quick-start.sh
```
---
## 部署后配置
### 1. 修改默认密码
```bash
# 编辑环境变量
vim .env
# 修改以下配置
ADMIN_PASSWORD=your-secure-password
JWT_SECRET=your-secure-jwt-secret
# 重启服务
docker compose restart
```
### 2. 配置域名和 HTTPS
```bash
# 安装 Nginx
apt install nginx
# 配置 Nginx
cat > /etc/nginx/sites-available/baodanagent << 'EOF'
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /api/ {
proxy_pass http://localhost:5001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF
# 启用配置
ln -s /etc/nginx/sites-available/baodanagent /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
```
### 3. 配置防火墙
```bash
# Ubuntu/Debian
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8080/tcp
ufw allow 5001/tcp
# CentOS/RHEL
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=5001/tcp
firewall-cmd --reload
```
---
## 常用运维命令
### 服务管理
```bash
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 重启服务
docker compose restart
# 停止服务
docker compose down
# 启动服务
docker compose up -d
```
### 数据备份
```bash
# 备份数据库
docker compose exec db pg_dump -U postgres baodan > backup_$(date +%Y%m%d).sql
# 备份 Redis
docker compose exec redis redis-cli save
cp /var/lib/docker/volumes/baodanagent_redis_data/_data/dump.rdb backup_redis_$(date +%Y%m%d).rdb
# 备份所有数据
tar -czf backup_$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/baodanagent_*
```
### 数据恢复
```bash
# 恢复数据库
docker compose exec -T db psql -U postgres baodan < backup_20260619.sql
# 恢复 Redis
docker compose exec redis redis-cli shutdown nosave
cp backup_redis_20260619.rdb /var/lib/docker/volumes/baodanagent_redis_data/_data/dump.rdb
docker compose start redis
```
### 更新版本
```bash
# 拉取最新代码
git pull
# 重新构建并启动
docker compose up -d --build
# 或者使用预构建镜像
docker compose pull
docker compose up -d
```
---
## 故障排查
### 服务无法启动
```bash
# 查看详细日志
docker compose logs baodanagent-api
# 检查端口占用
netstat -tulpn | grep -E ':(5001|8080|5433|6380)'
# 检查磁盘空间
df -h
# 检查内存
free -h
```
### 数据库连接失败
```bash
# 检查数据库状态
docker compose exec db pg_isready -U postgres
# 查看数据库日志
docker compose logs db
# 连接数据库
docker compose exec db psql -U postgres -d baodan
```
### 性能优化
```bash
# 增加 Worker 数量
# 编辑 docker-compose.yml
environment:
WORKERS: 4 # 根据 CPU 核心数调整
# 增加内存限制
deploy:
resources:
limits:
memory: 2G
```
---
## 监控配置
### Docker 健康检查
```bash
# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' baodanagent-baodanagent-api-1
# 查看健康检查日志
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' baodanagent-baodanagent-api-1
```
### 系统监控脚本
```bash
#!/bin/bash
# monitor.sh - 服务监控脚本
while true; do
if ! curl -s http://localhost:5001/health > /dev/null; then
echo "[$(date)] API 服务异常,正在重启..."
docker compose restart baodanagent-api
fi
sleep 60
done
```
---
## 文件清单
```
baodanagent/
├── deploy-package.sh # 方案一:一键部署脚本
├── build-and-push.sh # 方案二:构建并推送镜像
├── docker-compose.production.yml # 方案二:生产环境配置
├── export-images.sh # 方案三:导出镜像
├── import-and-start.sh # 方案三:导入并启动
├── quick-start.sh # 方案四:最简部署
└── SERVER_DEPLOY.md # 本文档
```
---
## 推荐部署流程
### 首次部署
1. **选择方案一**:使用一键部署脚本
2. **配置环境变量**:修改密码和密钥
3. **配置域名**:设置 Nginx 反向代理
4. **配置 HTTPS**:申请 SSL 证书
5. **配置备份**:设置定时备份任务
### 多服务器部署
1. **选择方案二**:使用预构建镜像
2. **构建并推送镜像**:执行 build-and-push.sh
3. **服务器部署**:使用 docker-compose.production.yml
4. **配置负载均衡**:使用 Nginx 或 HAProxy
### 无网络环境
1. **选择方案三**:使用离线镜像
2. **导出镜像**:执行 export-images.sh
3. **传输镜像**:使用 U盘或内网传输
4. **导入并启动**:执行 import-and-start.sh
---
**部署时间**: 2-10 分钟
**适用环境**: Linux (Ubuntu/CentOS/Debian)
**推荐方案**: 方案一(首次部署)或 方案二(多服务器)