397 lines
7.8 KiB
Markdown
397 lines
7.8 KiB
Markdown
# 🚀 服务器快速部署指南
|
||
|
||
## 方案对比
|
||
|
||
| 方案 | 适用场景 | 部署时间 | 网络要求 | 复杂度 |
|
||
|------|---------|---------|---------|--------|
|
||
| **方案一:一键脚本** | 有网络环境 | 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)
|
||
**推荐方案**: 方案一(首次部署)或 方案二(多服务器)
|