codex/dev
mula.liu 2026-04-08 13:29:54 +08:00
parent f3d9429b28
commit 31708df6cb
4 changed files with 40 additions and 54 deletions

View File

@ -12,22 +12,19 @@
| `start.sh` ⭐ | 一键启动脚本(推荐) | | `start.sh` ⭐ | 一键启动脚本(推荐) |
| `stop.sh` | 停止服务脚本 | | `stop.sh` | 停止服务脚本 |
| `manage.sh` | 服务管理脚本 | | `manage.sh` | 服务管理脚本 |
| `generate-ssl-cert.sh` | SSL证书生成脚本 |
| `DOCKER_DEPLOYMENT.md` | 详细部署文档 |
| `DOCKER_README.md` | 本文档 | | `DOCKER_README.md` | 本文档 |
## 🏗️ 系统架构 ## 🏗️ 系统架构
``` ```
方式一:直接访问 方式一:直接访问
用户 → http://服务器IP → iMeeting Nginx (80) → Frontend/Backend 用户 → http://服务器IP → iMeeting Frontend(Web) (80) → Frontend/Backend
方式二域名访问HTTPS 方式二域名访问HTTPS
用户 → https://domain → 接入服务器Nginx (SSL) → iMeeting服务器 (80) → Frontend/Backend 用户 → https://domain → 接入服务器Nginx (SSL) → iMeeting服务器 (80) → Frontend/Backend
``` ```
**5个服务容器** **4个服务容器**
- **Nginx**: HTTP入口仅HTTPSSL由接入服务器处理
- **Frontend**: React前端应用 - **Frontend**: React前端应用
- **Backend**: FastAPI后端服务 - **Backend**: FastAPI后端服务
- **MySQL**: 数据库 - **MySQL**: 数据库
@ -52,9 +49,6 @@ vim .env # 配置七牛云、LLM密钥等
脚本会自动完成: 脚本会自动完成:
- ✅ 检查Docker依赖 - ✅ 检查Docker依赖
- ✅ 创建必要目录 - ✅ 创建必要目录
- ✅ 生成SSL证书
- ✅ 配置后端环境变量
- ✅ 构建前端
- ✅ 启动所有服务 - ✅ 启动所有服务
- ✅ 等待健康检查 - ✅ 等待健康检查
@ -67,19 +61,10 @@ cp backend/.env.example backend/.env
vim .env # 配置主环境变量 vim .env # 配置主环境变量
vim backend/.env # 配置后端环境变量 vim backend/.env # 配置后端环境变量
# 2. 生成SSL证书 # 2. 启动所有服务
./generate-ssl-cert.sh
# 3. 构建前端
cd frontend
npm install
npm run build
cd ..
# 4. 启动所有服务
docker-compose up -d docker-compose up -d
# 5. 查看服务状态 # 3. 查看服务状态
docker-compose ps docker-compose ps
``` ```
@ -94,7 +79,7 @@ docker-compose ps
**域名访问HTTPS** **域名访问HTTPS**
- 需要在接入服务器配置Nginx反向代理 - 需要在接入服务器配置Nginx反向代理
- 参考文档:[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md) - 参考本文“域名和 HTTPS 配置”章节
- 访问示例https://imeeting.yourdomain.com - 访问示例https://imeeting.yourdomain.com
## ⚙️ 环境变量配置 ## ⚙️ 环境变量配置
@ -129,9 +114,9 @@ BASE_URL=http://localhost # 生产环境改为: https://your-domain.com
HTTP_PORT=80 HTTP_PORT=80
HTTPS_PORT=443 HTTPS_PORT=443
# 如需直接访问后端/前端(开发调试用) # 如需调整容器对外端口
# BACKEND_PORT=8001 # BACKEND_PORT=8000
# FRONTEND_PORT=3001 # HTTP_PORT=80
``` ```
## 📦 数据目录 ## 📦 数据目录
@ -146,7 +131,7 @@ data/
└── logs/ # 日志文件 └── logs/ # 日志文件
├── backend/ ├── backend/
├── frontend/ ├── frontend/
└── nginx/ └── frontend/
``` ```
**重要提示** **重要提示**
@ -182,13 +167,13 @@ docker-compose ps
# 查看日志 # 查看日志
docker-compose logs -f # 所有服务 docker-compose logs -f # 所有服务
docker-compose logs -f nginx # Nginx日志 docker-compose logs -f frontend # 前端Web日志
docker-compose logs -f backend # 后端日志 docker-compose logs -f backend # 后端日志
tail -f data/logs/nginx/imeeting_access.log # 访问日志 tail -f data/logs/frontend/*.log # 前端容器日志目录
# 重启服务 # 重启服务
docker-compose restart # 重启所有 docker-compose restart # 重启所有
docker-compose restart nginx # 重启Nginx docker-compose restart frontend # 重启前端
# 停止服务 # 停止服务
./stop.sh # 交互式停止 ./stop.sh # 交互式停止
@ -201,7 +186,7 @@ iMeeting服务器本身仅提供HTTP服务。如需通过域名访问HTTPS
### 配置接入服务器 ### 配置接入服务器
完整配置步骤请参考[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md) 完整配置步骤请参考本文档中的反向代理章节
**简要步骤** **简要步骤**
1. 在接入服务器安装Nginx 1. 在接入服务器安装Nginx
@ -225,7 +210,7 @@ server {
} }
``` ```
详见:[GATEWAY_NGINX_CONFIG.md](GATEWAY_NGINX_CONFIG.md) 详见:本文档中的反向代理章节
## 🔍 故障排查 ## 🔍 故障排查
@ -236,7 +221,7 @@ server {
docker-compose logs -f docker-compose logs -f
# 文件日志 # 文件日志
tail -f data/logs/nginx/imeeting_error.log tail -f data/logs/frontend/*.log
tail -f data/logs/backend/*.log tail -f data/logs/backend/*.log
``` ```
@ -269,17 +254,16 @@ curl http://localhost/docs
| 502错误 | 检查backend和frontend是否健康 | | 502错误 | 检查backend和frontend是否健康 |
| 数据库连接失败 | 检查backend/.env配置 | | 数据库连接失败 | 检查backend/.env配置 |
| 前端无法访问API | 检查VITE_API_BASE_URL配置 | | 前端无法访问API | 检查VITE_API_BASE_URL配置 |
| 如何配置HTTPS | 参考GATEWAY_NGINX_CONFIG.md配置接入服务器 | | 如何配置HTTPS | 参考本文档中的反向代理章节 |
详见:`DOCKER_DEPLOYMENT.md` 故障排查章节 详见:`DOCKER_README.md` 故障排查章节
## 📊 服务组件 ## 📊 服务组件
| 服务 | 容器名 | 内部端口 | 外部端口 | 健康检查 | | 服务 | 容器名 | 内部端口 | 外部端口 | 健康检查 |
|------|--------|----------|----------|----------| |------|--------|----------|----------|----------|
| Nginx | imeeting-nginx | 80 | 80 | ✅ | | Frontend(Web) | imeeting-frontend | 80 | 80 | ✅ |
| Frontend | imeeting-frontend | 3001 | - | ✅ | | Backend | imeeting-backend | 8000 | 8000 | ✅ |
| Backend | imeeting-backend | 8001 | - | ✅ |
| MySQL | imeeting-mysql | 3306 | - | ✅ | | MySQL | imeeting-mysql | 3306 | - | ✅ |
| Redis | imeeting-redis | 6379 | - | ✅ | | Redis | imeeting-redis | 6379 | - | ✅ |
@ -309,7 +293,7 @@ npm run build
cd .. cd ..
docker-compose build frontend docker-compose build frontend
docker-compose up -d frontend docker-compose up -d frontend
docker-compose restart nginx docker-compose restart frontend
``` ```
### 仅更新后端 ### 仅更新后端
@ -338,7 +322,7 @@ docker-compose exec mysql mysqldump -uroot -p imeeting > backup.sql
tar czf imeeting_backup_$(date +%Y%m%d).tar.gz data/ tar czf imeeting_backup_$(date +%Y%m%d).tar.gz data/
# 备份配置 # 备份配置
tar czf imeeting_config_$(date +%Y%m%d).tar.gz .env backend/.env nginx/ tar czf imeeting_config_$(date +%Y%m%d).tar.gz .env backend/.env frontend/nginx.conf
``` ```
### 恢复数据 ### 恢复数据
@ -367,7 +351,7 @@ tar xzf imeeting_backup_20240101.tar.gz
3. ✅ **设置文件权限** 3. ✅ **设置文件权限**
```bash ```bash
chmod 600 .env backend/.env chmod 600 .env backend/.env
chmod 600 nginx/ssl/server.key 确保接入层反向代理证书文件权限正确
``` ```
4. ✅ **启用防火墙** 4. ✅ **启用防火墙**
@ -389,8 +373,8 @@ tar xzf imeeting_backup_20240101.tar.gz
详细的部署说明、配置选项、性能优化等,请查看: 详细的部署说明、配置选项、性能优化等,请查看:
- **详细部署文档**: [DOCKER_DEPLOYMENT.md](DOCKER_DEPLOYMENT.md) - **部署说明**: [DOCKER_README.md](DOCKER_README.md)
- **Nginx配置说明**: [nginx/README.md](nginx/README.md) - **前端代理配置**: [frontend/nginx.conf](frontend/nginx.conf)
## 🆘 获取帮助 ## 🆘 获取帮助
@ -398,7 +382,7 @@ tar xzf imeeting_backup_20240101.tar.gz
1. 查看日志:`docker-compose logs -f` 1. 查看日志:`docker-compose logs -f`
2. 查看健康状态:`docker-compose ps` 2. 查看健康状态:`docker-compose ps`
3. 查看详细文档:`DOCKER_DEPLOYMENT.md` 3. 查看详细文档:`DOCKER_README.md`
4. 提交Issue到项目仓库 4. 提交Issue到项目仓库
## 📞 快速命令参考 ## 📞 快速命令参考

View File

@ -52,7 +52,7 @@ services:
--maxmemory 2gb --maxmemory 2gb
--maxmemory-policy allkeys-lru --maxmemory-policy allkeys-lru
healthcheck: healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"] test: ["CMD-SHELL", "redis-cli -a \"$${REDIS_PASSWORD:-${REDIS_PASSWORD:-Unis@123}}\" ping | grep PONG"]
interval: 10s interval: 10s
timeout: 3s timeout: 3s
retries: 5 retries: 5

View File

@ -70,7 +70,7 @@ view_status() {
view_logs() { view_logs() {
echo "选择要查看的服务:" echo "选择要查看的服务:"
echo "1) 所有服务" echo "1) 所有服务"
echo "2) Nginx" echo "2) 前端Web服务"
echo "3) 前端" echo "3) 前端"
echo "4) 后端" echo "4) 后端"
echo "5) MySQL" echo "5) MySQL"
@ -79,7 +79,7 @@ view_logs() {
case $log_choice in case $log_choice in
1) $COMPOSE_CMD logs -f ;; 1) $COMPOSE_CMD logs -f ;;
2) $COMPOSE_CMD logs -f nginx ;; 2) $COMPOSE_CMD logs -f frontend ;;
3) $COMPOSE_CMD logs -f frontend ;; 3) $COMPOSE_CMD logs -f frontend ;;
4) $COMPOSE_CMD logs -f backend ;; 4) $COMPOSE_CMD logs -f backend ;;
5) $COMPOSE_CMD logs -f mysql ;; 5) $COMPOSE_CMD logs -f mysql ;;
@ -99,7 +99,7 @@ restart_services() {
# 重启单个服务 # 重启单个服务
restart_single_service() { restart_single_service() {
echo "选择要重启的服务:" echo "选择要重启的服务:"
echo "1) Nginx" echo "1) 前端Web服务"
echo "2) 前端" echo "2) 前端"
echo "3) 后端" echo "3) 后端"
echo "4) MySQL" echo "4) MySQL"
@ -107,7 +107,7 @@ restart_single_service() {
read -p "请选择: " service_choice read -p "请选择: " service_choice
case $service_choice in case $service_choice in
1) $COMPOSE_CMD restart nginx ;; 1) $COMPOSE_CMD restart frontend ;;
2) $COMPOSE_CMD restart frontend ;; 2) $COMPOSE_CMD restart frontend ;;
3) $COMPOSE_CMD restart backend ;; 3) $COMPOSE_CMD restart backend ;;
4) $COMPOSE_CMD restart mysql ;; 4) $COMPOSE_CMD restart mysql ;;
@ -122,7 +122,7 @@ restart_single_service() {
# 进入容器 # 进入容器
enter_container() { enter_container() {
echo "选择要进入的容器:" echo "选择要进入的容器:"
echo "1) Nginx" echo "1) 前端Web服务"
echo "2) 前端" echo "2) 前端"
echo "3) 后端" echo "3) 后端"
echo "4) MySQL" echo "4) MySQL"
@ -130,7 +130,7 @@ enter_container() {
read -p "请选择: " container_choice read -p "请选择: " container_choice
case $container_choice in case $container_choice in
1) $COMPOSE_CMD exec nginx sh ;; 1) $COMPOSE_CMD exec frontend sh ;;
2) $COMPOSE_CMD exec frontend sh ;; 2) $COMPOSE_CMD exec frontend sh ;;
3) $COMPOSE_CMD exec backend bash ;; 3) $COMPOSE_CMD exec backend bash ;;
4) $COMPOSE_CMD exec mysql bash ;; 4) $COMPOSE_CMD exec mysql bash ;;
@ -148,12 +148,13 @@ backup_database() {
source .env 2>/dev/null || true source .env 2>/dev/null || true
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Unis@123} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Unis@123}
MYSQL_DATABASE=${MYSQL_DATABASE:-imeeting}
$COMPOSE_CMD exec mysql mysqldump -uroot -p"${MYSQL_ROOT_PASSWORD}" \ $COMPOSE_CMD exec mysql mysqldump -uroot -p"${MYSQL_ROOT_PASSWORD}" \
--single-transaction \ --single-transaction \
--routines \ --routines \
--triggers \ --triggers \
imeeting > "$backup_file" "${MYSQL_DATABASE}" > "$backup_file"
print_success "数据库已备份到: $backup_file" print_success "数据库已备份到: $backup_file"
read -p "按任意键返回菜单..." -n 1 read -p "按任意键返回菜单..." -n 1
@ -187,8 +188,9 @@ restore_database() {
source .env 2>/dev/null || true source .env 2>/dev/null || true
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Unis@123} MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Unis@123}
MYSQL_DATABASE=${MYSQL_DATABASE:-imeeting}
$COMPOSE_CMD exec -T mysql mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" imeeting < "$backup_file" $COMPOSE_CMD exec -T mysql mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" < "$backup_file"
print_success "数据库已恢复" print_success "数据库已恢复"
else else
@ -265,7 +267,7 @@ export_logs() {
timestamp=$(date +%Y%m%d_%H%M%S) timestamp=$(date +%Y%m%d_%H%M%S)
$COMPOSE_CMD logs --no-color > "logs_export/all_services_${timestamp}.log" $COMPOSE_CMD logs --no-color > "logs_export/all_services_${timestamp}.log"
$COMPOSE_CMD logs --no-color nginx > "logs_export/nginx_${timestamp}.log" $COMPOSE_CMD logs --no-color frontend > "logs_export/frontend_web_${timestamp}.log"
$COMPOSE_CMD logs --no-color frontend > "logs_export/frontend_${timestamp}.log" $COMPOSE_CMD logs --no-color frontend > "logs_export/frontend_${timestamp}.log"
$COMPOSE_CMD logs --no-color backend > "logs_export/backend_${timestamp}.log" $COMPOSE_CMD logs --no-color backend > "logs_export/backend_${timestamp}.log"
$COMPOSE_CMD logs --no-color mysql > "logs_export/mysql_${timestamp}.log" $COMPOSE_CMD logs --no-color mysql > "logs_export/mysql_${timestamp}.log"

View File

@ -165,8 +165,8 @@ show_access_info() {
echo -e " API文档: ${BLUE}http://localhost/docs${NC}" echo -e " API文档: ${BLUE}http://localhost/docs${NC}"
echo "" echo ""
echo -e "${YELLOW}域名访问HTTPS:${NC}" echo -e "${YELLOW}域名访问HTTPS:${NC}"
echo -e " 需要在接入服务器配置Nginx代理" echo -e " 需要在接入服务器配置反向代理"
echo -e " 参考文档: ${BLUE}GATEWAY_NGINX_CONFIG.md${NC}" echo -e " 参考说明: ${BLUE}DOCKER_README.md${NC}"
echo "" echo ""
echo -e "${YELLOW}数据目录:${NC}" echo -e "${YELLOW}数据目录:${NC}"
echo -e " 数据持久化: ${BLUE}./data/${NC}" echo -e " 数据持久化: ${BLUE}./data/${NC}"
@ -182,7 +182,7 @@ show_access_info() {
echo -e " 重启服务: ${BLUE}docker-compose restart${NC}" echo -e " 重启服务: ${BLUE}docker-compose restart${NC}"
echo -e " 查看状态: ${BLUE}docker-compose ps${NC}" echo -e " 查看状态: ${BLUE}docker-compose ps${NC}"
echo "" echo ""
echo -e "${YELLOW}更多信息请查看: ${BLUE}DOCKER_DEPLOYMENT.md${NC}" echo -e "${YELLOW}更多信息请查看: ${BLUE}DOCKER_README.md${NC}"
echo "" echo ""
} }