fix(update): bugcollect-service 升级时自动创建 xuqm_bugcollect 数据库并授权

旧私有化部署从未运行过 bugcollect-service,upgrade.sh 将服务拉起后
Flyway 因 xuqm_bugcollect 数据库不存在(Access denied 1044)立即崩溃。
在启动 bugcollect-service 前检测运行中的 MySQL 容器,读取 secrets.env
中的 root 密码,自动执行 CREATE DATABASE IF NOT EXISTS + GRANT,
避免首次引入该服务时需要手动建库。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
徐勤民 2026-06-23 17:06:57 +08:00
父节点 544aa07fef
当前提交 38eaa8fc83

查看文件

@ -510,6 +510,28 @@ done
# 判断依据docker-compose.yml 中是否定义了 bugcollect-service而非历史容器是否存在 # 判断依据docker-compose.yml 中是否定义了 bugcollect-service而非历史容器是否存在
# 旧部署首次引入此服务时没有历史容器,必须用 compose 文件判断。 # 旧部署首次引入此服务时没有历史容器,必须用 compose 文件判断。
if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; then if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; then
# 确保 xuqm_bugcollect 数据库存在且授权正确(旧部署升级时数据库可能从未创建)
_mysql_ctr="$(docker ps --filter name=mysql --filter status=running --format '{{.Names}}' 2>/dev/null | head -1)"
if [ -n "$_mysql_ctr" ]; then
_bc_db="${BUGCOLLECT_DB:-xuqm_bugcollect}"
_mysql_root_pw="$(grep '^MYSQL_ROOT_PASSWORD=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)"
_mysql_user="$(grep '^MYSQL_USERNAME=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)"
[ -z "$_mysql_user" ] && _mysql_user="$(grep '^MYSQL_USER=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)"
if [ -n "$_mysql_root_pw" ] && [ -n "$_mysql_user" ]; then
docker exec "$_mysql_ctr" mysql -u root -p"${_mysql_root_pw}" -e \
"CREATE DATABASE IF NOT EXISTS \`${_bc_db}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON \`${_bc_db}\`.* TO '${_mysql_user}'@'%';
FLUSH PRIVILEGES;" 2>/dev/null \
&& ok "数据库 ${_bc_db} 已就绪" \
|| warn "数据库 ${_bc_db} 初始化失败,请手动执行 GRANT"
else
warn "无法读取 MySQL root 密码或用户名,请手动创建 ${_bc_db} 数据库并授权"
fi
else
warn "MySQL 容器未运行external 模式),请确保数据库 ${BUGCOLLECT_DB:-xuqm_bugcollect} 已存在并授权"
fi
for _svc in bugcollect-service symbolicator; do for _svc in bugcollect-service symbolicator; do
info "应用新镜像并重启 ${_svc} ..." info "应用新镜像并重启 ${_svc} ..."
COMPOSE_PROFILES=bugcollect $_COMPOSE up -d --no-deps "$_svc" \ COMPOSE_PROFILES=bugcollect $_COMPOSE up -d --no-deps "$_svc" \