部署指南
将海狸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