Skip to content

部署指南

将海狸IM部署到生产环境的完整指南,支持Docker和传统部署方式。

🎯 部署方式选择

🐳 Docker 部署

推荐

  • 一键部署,环境隔离
  • 支持容器编排
  • 便于扩展和维护
  • 适合大部分场景

📦 传统部署

备选

  • 直接安装到系统
  • 性能相对更好
  • 配置相对复杂
  • 适合高性能场景

🖥️ 服务器要求

最低配置

硬件要求
  • CPU:2核心 2.4GHz+
  • 内存:4GB RAM
  • 存储:50GB SSD
  • 网络:10Mbps+
系统要求
  • 操作系统:Ubuntu 20.04+ LTS
  • 架构:x86_64
  • 权限:sudo 权限
  • 网络:公网IP + 域名

推荐配置(100-1000用户)

生产环境
  • CPU:4核心 3.0GHz+
  • 内存:8GB+ RAM
  • 存储:200GB+ SSD
  • 网络:100Mbps+ 专线
高可用环境
  • CPU:8核心+ 高频
  • 内存:16GB+ RAM
  • 存储:500GB+ NVMe SSD
  • 网络:千兆专线 + CDN

🐳 Docker 部署(推荐)

第一步:服务器准备

bash
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要工具
sudo apt install -y curl wget git vim

# 安装 Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 重新登录以生效
exit

第二步:获取部署文件

bash
# 创建部署目录
mkdir -p /opt/beaver-im && cd /opt/beaver-im

# 获取部署配置
git clone https://github.com/wsrh8888/beaver-deploy.git .

# 或手动创建配置文件
mkdir -p {nginx,ssl,logs,data}

第三步:配置 Docker Compose

创建 docker-compose.yml

yaml
version: '3.8'

services:
  # MySQL 数据库
  mysql:
    image: mysql:8.0
    container_name: beaver-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: beaver_im
      MYSQL_USER: beaver_user
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - mysql_data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d
    networks:
      - beaver-net
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  # Redis 缓存
  redis:
    image: redis:7-alpine
    container_name: beaver-redis
    restart: unless-stopped
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    networks:
      - beaver-net

  # 后端服务
  backend:
    image: beaver/server:latest
    container_name: beaver-backend
    restart: unless-stopped
    depends_on:
      - mysql
      - redis
    environment:
      - DB_HOST=mysql
      - DB_PASSWORD=${MYSQL_PASSWORD}
      - REDIS_HOST=redis
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - JWT_SECRET=${JWT_SECRET}
    networks:
      - beaver-net
    volumes:
      - ./logs:/app/logs

  # Nginx 代理
  nginx:
    image: nginx:alpine
    container_name: beaver-nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl:/etc/nginx/ssl
      - ./static:/usr/share/nginx/html
    depends_on:
      - backend
    networks:
      - beaver-net

volumes:
  mysql_data:
  redis_data:

networks:
  beaver-net:
    driver: bridge

第四步:配置环境变量

创建 .env 文件:

env
# 数据库密码
MYSQL_ROOT_PASSWORD=your_strong_root_password
MYSQL_PASSWORD=your_strong_password

# Redis密码
REDIS_PASSWORD=your_redis_password

# JWT密钥
JWT_SECRET=your_jwt_secret_key

# 域名配置
DOMAIN=your-domain.com

第五步:配置 Nginx

创建 nginx/nginx.conf

nginx
events {
    worker_connections 1024;
}

http {
    upstream backend {
        server backend:8888;
    }

    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name your-domain.com;

        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;
        
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;

        location /api/ {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /ws {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

        location / {
            root /usr/share/nginx/html;
            try_files $uri $uri/ /index.html;
        }
    }
}

第六步:SSL 证书配置

bash
# 安装 Certbot
sudo apt install certbot

# 获取证书
sudo certbot certonly --standalone -d your-domain.com

# 复制证书到项目目录
sudo cp /etc/letsencrypt/live/your-domain.com/fullchain.pem ./nginx/ssl/
sudo cp /etc/letsencrypt/live/your-domain.com/privkey.pem ./nginx/ssl/
sudo chown $USER:$USER ./nginx/ssl/*

# 设置自动续期
echo "0 2 * * * /usr/bin/certbot renew --quiet && docker-compose restart nginx" | sudo crontab -

第七步:启动部署

bash
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f backend

# 等待服务启动完成(约1-2分钟)

📊 监控和维护

服务监控

bash
# 查看容器状态
docker-compose ps

# 查看系统资源
docker stats

# 查看服务日志
docker-compose logs -f [service_name]

# 重启服务
docker-compose restart [service_name]

数据备份

创建备份脚本 backup.sh

bash
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"

mkdir -p $BACKUP_DIR

# 数据库备份
docker-compose exec -T mysql mysqldump -u root -p${MYSQL_ROOT_PASSWORD} beaver_im > $BACKUP_DIR/db_$DATE.sql

# Redis备份
docker-compose exec redis redis-cli --rdb /data/backup.rdb
docker cp beaver-redis:/data/backup.rdb $BACKUP_DIR/redis_$DATE.rdb

# 压缩备份
tar -czf $BACKUP_DIR/beaver_backup_$DATE.tar.gz $BACKUP_DIR/db_$DATE.sql $BACKUP_DIR/redis_$DATE.rdb

# 清理旧备份(保留7天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete

echo "Backup completed: $BACKUP_DIR/beaver_backup_$DATE.tar.gz"

设置定时备份:

bash
chmod +x backup.sh
echo "0 2 * * * /opt/beaver-im/backup.sh" | crontab -

🚨 故障排除

常见问题解决

服务无法启动:

bash
# 检查端口占用
sudo netstat -tulpn | grep :80
sudo netstat -tulpn | grep :443

# 检查防火墙
sudo ufw status
sudo ufw allow 80,443/tcp

数据库连接失败:

bash
# 检查数据库容器
docker-compose logs mysql

# 进入数据库容器
docker-compose exec mysql mysql -u root -p

SSL证书问题:

bash
# 检查证书有效期
openssl x509 -in ./nginx/ssl/fullchain.pem -noout -dates

# 手动续期证书
sudo certbot renew
docker-compose restart nginx

🔄 更新升级

bash
# 备份数据
./backup.sh

# 拉取最新镜像
docker-compose pull

# 重启服务
docker-compose down
docker-compose up -d

# 验证更新
docker-compose ps
curl -I https://your-domain.com/api/health

🎉 部署完成!

您的海狸IM系统已成功部署到生产环境

基于 Apache-2.0 许可发布