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

View File

@ -52,7 +52,7 @@ services:
--maxmemory 2gb
--maxmemory-policy allkeys-lru
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
timeout: 3s
retries: 5

View File

@ -70,7 +70,7 @@ view_status() {
view_logs() {
echo "选择要查看的服务:"
echo "1) 所有服务"
echo "2) Nginx"
echo "2) 前端Web服务"
echo "3) 前端"
echo "4) 后端"
echo "5) MySQL"
@ -79,7 +79,7 @@ view_logs() {
case $log_choice in
1) $COMPOSE_CMD logs -f ;;
2) $COMPOSE_CMD logs -f nginx ;;
2) $COMPOSE_CMD logs -f frontend ;;
3) $COMPOSE_CMD logs -f frontend ;;
4) $COMPOSE_CMD logs -f backend ;;
5) $COMPOSE_CMD logs -f mysql ;;
@ -99,7 +99,7 @@ restart_services() {
# 重启单个服务
restart_single_service() {
echo "选择要重启的服务:"
echo "1) Nginx"
echo "1) 前端Web服务"
echo "2) 前端"
echo "3) 后端"
echo "4) MySQL"
@ -107,7 +107,7 @@ restart_single_service() {
read -p "请选择: " service_choice
case $service_choice in
1) $COMPOSE_CMD restart nginx ;;
1) $COMPOSE_CMD restart frontend ;;
2) $COMPOSE_CMD restart frontend ;;
3) $COMPOSE_CMD restart backend ;;
4) $COMPOSE_CMD restart mysql ;;
@ -122,7 +122,7 @@ restart_single_service() {
# 进入容器
enter_container() {
echo "选择要进入的容器:"
echo "1) Nginx"
echo "1) 前端Web服务"
echo "2) 前端"
echo "3) 后端"
echo "4) MySQL"
@ -130,7 +130,7 @@ enter_container() {
read -p "请选择: " container_choice
case $container_choice in
1) $COMPOSE_CMD exec nginx sh ;;
1) $COMPOSE_CMD exec frontend sh ;;
2) $COMPOSE_CMD exec frontend sh ;;
3) $COMPOSE_CMD exec backend bash ;;
4) $COMPOSE_CMD exec mysql bash ;;
@ -148,12 +148,13 @@ backup_database() {
source .env 2>/dev/null || true
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-Unis@123}
MYSQL_DATABASE=${MYSQL_DATABASE:-imeeting}
$COMPOSE_CMD exec mysql mysqldump -uroot -p"${MYSQL_ROOT_PASSWORD}" \
--single-transaction \
--routines \
--triggers \
imeeting > "$backup_file"
"${MYSQL_DATABASE}" > "$backup_file"
print_success "数据库已备份到: $backup_file"
read -p "按任意键返回菜单..." -n 1
@ -187,8 +188,9 @@ restore_database() {
source .env 2>/dev/null || true
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 "数据库已恢复"
else
@ -265,7 +267,7 @@ export_logs() {
timestamp=$(date +%Y%m%d_%H%M%S)
$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 backend > "logs_export/backend_${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 ""
echo -e "${YELLOW}域名访问HTTPS:${NC}"
echo -e " 需要在接入服务器配置Nginx代理"
echo -e " 参考文档: ${BLUE}GATEWAY_NGINX_CONFIG.md${NC}"
echo -e " 需要在接入服务器配置反向代理"
echo -e " 参考说明: ${BLUE}DOCKER_README.md${NC}"
echo ""
echo -e "${YELLOW}数据目录:${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 ps${NC}"
echo ""
echo -e "${YELLOW}更多信息请查看: ${BLUE}DOCKER_DEPLOYMENT.md${NC}"
echo -e "${YELLOW}更多信息请查看: ${BLUE}DOCKER_README.md${NC}"
echo ""
}