7.8 KiB
7.8 KiB
🚀 服务器快速部署指南
方案对比
| 方案 | 适用场景 | 部署时间 | 网络要求 | 复杂度 |
|---|---|---|---|---|
| 方案一:一键脚本 | 有网络环境 | 5 分钟 | 需要外网 | ⭐ |
| 方案二:预构建镜像 | 多次部署 | 2 分钟 | 需要 Docker Hub | ⭐⭐ |
| 方案三:离线部署 | 无网络环境 | 10 分钟 | 无需网络 | ⭐⭐ |
| 方案四:最简部署 | 快速测试 | 3 分钟 | 需要镜像 | ⭐ |
方案一:一键部署脚本(推荐)
适用场景:首次部署、有网络环境
部署步骤:
# 1. 上传部署脚本到服务器
scp deploy-package.sh user@server:/opt/
# 2. 在服务器上执行
ssh user@server
chmod +x /opt/deploy-package.sh
./deploy-package.sh
或者直接执行:
# 一键部署(需要先配置 Git 仓库)
curl -fsSL https://raw.githubusercontent.com/your-repo/deploy.sh | bash
方案二:预构建镜像部署
适用场景:多台服务器部署、CI/CD 流程
步骤一:构建并推送镜像
# 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
步骤二:服务器部署
# 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
方案三:离线镜像部署
适用场景:无网络环境、内网部署
步骤一:导出镜像(有网络的机器)
# 1. 构建镜像
docker compose build
# 2. 导出镜像
./export-images.sh
# 3. 生成的文件
# - baodanagent-images.tar.gz(约 2-3GB)
步骤二:传输到服务器
# 方式一: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/
步骤三:服务器部署
# 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 quick-start.sh
部署后配置
1. 修改默认密码
# 编辑环境变量
vim .env
# 修改以下配置
ADMIN_PASSWORD=your-secure-password
JWT_SECRET=your-secure-jwt-secret
# 重启服务
docker compose restart
2. 配置域名和 HTTPS
# 安装 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. 配置防火墙
# 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
常用运维命令
服务管理
# 查看服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 重启服务
docker compose restart
# 停止服务
docker compose down
# 启动服务
docker compose up -d
数据备份
# 备份数据库
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_*
数据恢复
# 恢复数据库
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
更新版本
# 拉取最新代码
git pull
# 重新构建并启动
docker compose up -d --build
# 或者使用预构建镜像
docker compose pull
docker compose up -d
故障排查
服务无法启动
# 查看详细日志
docker compose logs baodanagent-api
# 检查端口占用
netstat -tulpn | grep -E ':(5001|8080|5433|6380)'
# 检查磁盘空间
df -h
# 检查内存
free -h
数据库连接失败
# 检查数据库状态
docker compose exec db pg_isready -U postgres
# 查看数据库日志
docker compose logs db
# 连接数据库
docker compose exec db psql -U postgres -d baodan
性能优化
# 增加 Worker 数量
# 编辑 docker-compose.yml
environment:
WORKERS: 4 # 根据 CPU 核心数调整
# 增加内存限制
deploy:
resources:
limits:
memory: 2G
监控配置
Docker 健康检查
# 查看健康状态
docker inspect --format='{{.State.Health.Status}}' baodanagent-baodanagent-api-1
# 查看健康检查日志
docker inspect --format='{{range .State.Health.Log}}{{.Output}}{{end}}' baodanagent-baodanagent-api-1
系统监控脚本
#!/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 # 本文档
推荐部署流程
首次部署
- 选择方案一:使用一键部署脚本
- 配置环境变量:修改密码和密钥
- 配置域名:设置 Nginx 反向代理
- 配置 HTTPS:申请 SSL 证书
- 配置备份:设置定时备份任务
多服务器部署
- 选择方案二:使用预构建镜像
- 构建并推送镜像:执行 build-and-push.sh
- 服务器部署:使用 docker-compose.production.yml
- 配置负载均衡:使用 Nginx 或 HAProxy
无网络环境
- 选择方案三:使用离线镜像
- 导出镜像:执行 export-images.sh
- 传输镜像:使用 U盘或内网传输
- 导入并启动:执行 import-and-start.sh
部署时间: 2-10 分钟 适用环境: Linux (Ubuntu/CentOS/Debian) 推荐方案: 方案一(首次部署)或 方案二(多服务器)