From dbf6f72dac5411f2f258b426eccf73805bc672a4 Mon Sep 17 00:00:00 2001 From: "mula.liu" Date: Mon, 13 Apr 2026 17:55:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 8 ++++---- DOCKER_README.md | 21 ++++++++++++--------- backend/.env.example | 2 +- start-external.sh | 23 ++++++++++------------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.env.example b/.env.example index 3f34216..5a9b6eb 100644 --- a/.env.example +++ b/.env.example @@ -2,13 +2,13 @@ # 1. 默认 Docker 一体化部署(./start.sh / docker-compose.yml): # 只使用当前文件(根目录 .env)和 Docker Compose 注入的环境变量,不读取 backend/.env。 # 2. 直接运行后端或外接中间件部署: -# 后端可读取当前文件中的 MYSQL_HOST / REDIS_HOST, -# 也可改用 backend/.env 中的 DB_* / REDIS_* 配置。 +# `start-external.sh` 也只读取当前文件; +# 外接中间件时可直接在这里填写 MYSQL_* / REDIS_*,脚本会转换给后端使用。 # ==================== 数据库配置 ==================== # MySQL 初始化参数(Docker 内置 MySQL)。 # 当后端也运行在 Docker 中时,数据库主机应为服务名 `mysql`。 -# 只有在宿主机直接运行后端时,才需要改成 127.0.0.1 或实际地址。 +# 使用 `./start-external.sh` 时,请改成外部 MySQL 地址或服务名。 MYSQL_HOST=mysql MYSQL_ROOT_PASSWORD=change_this_password MYSQL_DATABASE=imeeting @@ -19,7 +19,7 @@ MYSQL_PORT=3306 # ==================== 缓存配置 ==================== # Redis 初始化参数(Docker 内置 Redis)。 # 当后端也运行在 Docker 中时,Redis 主机应为服务名 `redis`。 -# 只有在宿主机直接运行后端时,才需要改成 127.0.0.1 或实际地址。 +# 使用 `./start-external.sh` 时,请改成外部 Redis 地址或服务名。 REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD=change_this_password diff --git a/DOCKER_README.md b/DOCKER_README.md index d20369e..0150d15 100644 --- a/DOCKER_README.md +++ b/DOCKER_README.md @@ -121,18 +121,21 @@ HTTPS_PORT=443 ### 外接 MySQL / Redis 部署 -如果使用 `./start-external.sh`,还需要额外配置 `backend/.env`: +如果使用 `./start-external.sh`,直接修改根目录 `.env` 即可,不需要 `backend/.env`: ```bash -cp backend/.env.example backend/.env -vim backend/.env +cp .env.example .env +vim .env ``` -`backend/.env` 主要负责: +根目录 `.env` 里需要重点配置: -- `DB_HOST` / `DB_PORT` / `DB_USER` / `DB_PASSWORD` / `DB_NAME` +- `MYSQL_HOST` / `MYSQL_PORT` / `MYSQL_USER` / `MYSQL_PASSWORD` / `MYSQL_DATABASE` - `REDIS_HOST` / `REDIS_PORT` / `REDIS_DB` / `REDIS_PASSWORD` -- 可选的 `BASE_URL`(如显式设置,会覆盖根目录 `.env` 中传给后端容器的值) +- `BASE_URL` + +说明: +- `start-external.sh` 会优先读取 `.env` 中的 `DB_*`;如果未设置,则自动回退到 `MYSQL_*` ### 音频预处理依赖 @@ -272,7 +275,7 @@ curl http://localhost/docs |------|----------| | 端口被占用 | 修改.env中的HTTP_PORT | | 502错误 | 检查backend和frontend是否健康 | -| 数据库连接失败 | 一体化部署检查 `docker-compose.yml` 和根目录 `.env`,外接中间件模式检查 `backend/.env` | +| 数据库连接失败 | 检查根目录 `.env` 中的数据库配置;外接中间件模式确认 `MYSQL_HOST` / `DB_HOST` 是否正确 | | 前端无法访问API | 检查VITE_API_BASE_URL配置 | | 音频转录拉不到音频文件 | 检查 `BASE_URL` 是否为云端可访问的完整地址 | | 如何配置HTTPS | 参考本文档中的反向代理章节 | @@ -343,7 +346,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 frontend/nginx.conf +tar czf imeeting_config_$(date +%Y%m%d).tar.gz .env frontend/nginx.conf ``` ### 恢复数据 @@ -371,7 +374,7 @@ tar xzf imeeting_backup_20240101.tar.gz 3. ✅ **设置文件权限** ```bash - chmod 600 .env backend/.env + chmod 600 .env 确保接入层反向代理证书文件权限正确 ``` diff --git a/backend/.env.example b/backend/.env.example index 1f675ec..9380679 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,5 +1,5 @@ # ==================== 数据库配置 ==================== -# 供“直接运行 backend”或“./start-external.sh 外接 MySQL/Redis”使用 +# 仅供“宿主机直接运行 backend”使用 # 如果 backend 运行在 Docker 中,且数据库也在同一 Docker 网络,主机名应填服务名(如 mysql) # 如果是宿主机直接运行 backend,再填写 127.0.0.1 或实际地址 DB_HOST=127.0.0.1 diff --git a/start-external.sh b/start-external.sh index 7de1388..0559832 100755 --- a/start-external.sh +++ b/start-external.sh @@ -71,15 +71,7 @@ check_env_files() { if [ ! -f .env ]; then print_warning ".env 文件不存在,从模板创建..." cp .env.example .env - print_warning "请编辑 .env 文件,配置访问端口、BASE_URL 等参数" - print_warning "按任意键继续,或 Ctrl+C 退出..." - read -n 1 -s - fi - - if [ ! -f backend/.env ]; then - print_warning "backend/.env 文件不存在,从模板创建..." - cp backend/.env.example backend/.env - print_warning "请编辑 backend/.env 文件,配置外部数据库和 Redis 参数" + print_warning "请编辑 .env 文件,配置外部 MySQL / Redis、访问端口、BASE_URL 等参数" print_warning "按任意键继续,或 Ctrl+C 退出..." read -n 1 -s fi @@ -91,10 +83,15 @@ load_external_env() { print_info "加载外部数据库与 Redis 配置..." set -a - source backend/.env + source .env set +a - DB_PORT="${DB_PORT:-3306}" + DB_HOST="${DB_HOST:-${MYSQL_HOST:-}}" + DB_PORT="${DB_PORT:-${MYSQL_PORT:-3306}}" + DB_USER="${DB_USER:-${MYSQL_USER:-}}" + DB_PASSWORD="${DB_PASSWORD:-${MYSQL_PASSWORD:-}}" + DB_NAME="${DB_NAME:-${MYSQL_DATABASE:-}}" + REDIS_PORT="${REDIS_PORT:-6379}" REDIS_DB="${REDIS_DB:-0}" REDIS_PASSWORD="${REDIS_PASSWORD:-}" @@ -102,7 +99,7 @@ load_external_env() { local required_vars=(DB_HOST DB_USER DB_PASSWORD DB_NAME REDIS_HOST) for var_name in "${required_vars[@]}"; do if [ -z "${!var_name}" ]; then - print_error "backend/.env 缺少必填配置: ${var_name}" + print_error ".env 缺少必填配置: ${var_name}" exit 1 fi done @@ -195,7 +192,7 @@ show_access_info() { echo "" echo -e "${YELLOW}当前模式:${NC}" echo -e " 仅启动: ${BLUE}backend + frontend${NC}" - echo -e " 外部依赖: ${BLUE}backend/.env 中配置的 MySQL / Redis${NC}" + echo -e " 外部依赖: ${BLUE}根目录 .env 中配置的 MySQL / Redis${NC}" echo "" echo -e "${YELLOW}常用命令:${NC}" echo -e " 查看日志: ${BLUE}$COMPOSE_CMD logs -f backend frontend${NC}"