oh-my-muse/muse-cloud/scripts/dev/start-muse-server-infra.sh
lili 9af471289a fix(solo): 修复 2.0.0 单人版 live 后端启动(DB 口径对齐 + moderation 关停)
标准启动默认落陈旧的 muse_local(仅 V0 baseline、缺 yudao 基座、update_updated_at_column()
函数属第三个角色 muse)→ Flyway V1 CREATE OR REPLACE FUNCTION 报 "must be owner"。唯一健康
的 live 库是 root@muse_slice_live(已迁 V34、含基座+登录种子)。将 application-infra.yaml 与
start-muse-server-infra.sh 的默认库/用户改为 muse_slice_live/root(真实值仍由 infra.env 覆盖)。

S4 关停 spring.ai.model.* 时漏了 moderation;OpenAiModerationAutoConfiguration 默认
matchIfMissing=true → 全量 boot 实例化 openAiModerationModel、无 OpenAI key 直接抛
"OpenAI API key must be set" 使单体启动失败。在 monolith 真正加载的 muse-server/application.yaml
与 ai-server/application.yaml 两处补 moderation: none(单人形态输出合规走自研 MuseAiCandidateReviewService)。

workspace.spec 冒烟原缺 token 注入,被 S5 新增的 AuthGuard 拦重定向 /login → 补 test1 token 注入。
external-deps 记录 Dify 实例被游戏/Muse 共用、workspace 须隔离的约束。

验证:muse-server 干净启动(Started in 22.4s、Flyway up-to-date 零 owner error);MSW-off 创作主线
e2e 33 passed/0 failed/31 隔离(候选采纳/导入/导出/知识草稿/图谱/绑定/agent 生命周期/AI 真生成全绿);
run-p1r-verification.sh local 65 tests/0 fail BUILD SUCCESS。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:41:12 -07:00

69 lines
3.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -euo pipefail
# 使用远端 infra 基础组件启动本地 muse-server。
# 默认读取 ~/.config/muse-repo/infra.env也可以通过 MUSE_INFRA_ENV 指定其它文件。
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
REPO_DIR="$(cd -- "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd)"
ENV_FILE="${MUSE_INFRA_ENV:-${HOME}/.config/muse-repo/infra.env}"
# 大模型/RAGFlow 接入凭据文件(仓内、按授权明文)。脚本只 source 文件路径,不在此硬编凭据值。
AI_ENV_FILE="${MUSE_AI_ENV:-${SCRIPT_DIR}/p1r-external-acceptance.env}"
if [[ -f "${ENV_FILE}" ]]; then
set -a
# shellcheck disable=SC1090
source "${ENV_FILE}"
set +a
fi
# WHY 必须追加 source AI 凭据infra.env 只带 DB/Redis 基础设施凭据,缺 MUSE_AI_NEW_API_* 时
# RealNewApiMuseAiRuntimeClientCondition 不满足 → 后端装 Unavailable 兜底 runtime → 任何 AI 任务在十几毫秒内
# 秒失败报“接入不可用”,污染验证现场、让长任务超时缺陷被误诊。固化在启动脚本里,避免按脚本重启即复发。
if [[ -f "${AI_ENV_FILE}" ]]; then
set -a
# shellcheck disable=SC1090
source "${AI_ENV_FILE}"
set +a
else
echo "警告:未找到 AI 凭据文件 ${AI_ENV_FILE}AI 任务将走 Unavailable 兜底而秒失败。" >&2
fi
require_env() {
local name="$1"
if [[ -z "${!name:-}" ]]; then
echo "缺少环境变量 ${name}。请先复制 scripts/dev/infra.env.example 到 ${ENV_FILE} 并填入真实值。" >&2
exit 1
fi
}
require_env MUSE_POSTGRES_PASSWORD
require_env MUSE_REDIS_PASSWORD
export MUSE_POSTGRES_HOST="${MUSE_POSTGRES_HOST:-100.64.0.8}"
export MUSE_POSTGRES_PORT="${MUSE_POSTGRES_PORT:-5433}"
# 默认库/用户对齐健康的 live 库(见 application-infra.yaml 注释):
# muse_local/muse_dev 是失效陷阱(缺基座 + 函数 owner 属 muse 角色 → Flyway V1 must-be-owner
export MUSE_POSTGRES_DATABASE="${MUSE_POSTGRES_DATABASE:-muse_slice_live}"
export MUSE_POSTGRES_USERNAME="${MUSE_POSTGRES_USERNAME:-root}"
export MUSE_REDIS_HOST="${MUSE_REDIS_HOST:-100.64.0.8}"
export MUSE_REDIS_PORT="${MUSE_REDIS_PORT:-6379}"
cd "${REPO_DIR}"
echo "启动 muse-serverprofile=local,infra数据库=${MUSE_POSTGRES_HOST}:${MUSE_POSTGRES_PORT}/${MUSE_POSTGRES_DATABASE}Redis=${MUSE_REDIS_HOST}:${MUSE_REDIS_PORT}"
echo "编译 muse-server 及其依赖模块..."
# Maven 在本机并发下载大量依赖时偶发 TLS 握手中断;单线程下载更稳。
# 本地启动只需要可运行 jar不需要编译和执行测试代码clean 可避免复用旧的 fat jar 依赖产物。
mvn -U -Dmaven.artifact.threads=1 -pl muse-server -am -Dmaven.test.skip=true clean package
echo "运行 muse-server/target/muse-server.jar"
exec java \
-DsocksProxyHost= \
-DsocksProxyPort= \
-Dhttp.proxyHost= \
-Dhttps.proxyHost= \
-Djava.net.useSystemProxies=false \
-jar muse-server/target/muse-server.jar --spring.profiles.active=local,infra