标准启动默认落陈旧的 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>
69 lines
3.0 KiB
Bash
Executable File
69 lines
3.0 KiB
Bash
Executable File
#!/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-server,profile=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
|