baodan/SERVER_DEPLOY.md

7.8 KiB
Raw Blame History

🚀 服务器快速部署指南

方案对比

方案 适用场景 部署时间 网络要求 复杂度
方案一:一键脚本 有网络环境 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            # 本文档

推荐部署流程

首次部署

  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) 推荐方案: 方案一(首次部署)或 方案二(多服务器)