feat: 重命名项目为Boardware Genius并添加运行时环境同步功能
- 将项目品牌从nanobot重命名为Boardware Genius,更新所有相关文档、注释和日志输出 - 在web服务器中添加运行时环境变量同步功能,支持授权和后端身份配置 - 更新create-instance脚本以生成运行时环境文件 - 添加实例后端绑定功能到部署控制服务 - 修改入口脚本以加载运行时环境变量 - 更新前端和认证门户的相关描述文本
This commit is contained in:
@ -48,7 +48,7 @@ Required:
|
||||
--instance-id <id> Unique instance id.
|
||||
--auth-username <name> Initial web login username.
|
||||
--auth-password <password> Initial web login password.
|
||||
--api-key <key> Provider API key for nanobot.
|
||||
--api-key <key> Provider API key for Boardware Genius.
|
||||
|
||||
Optional:
|
||||
--image <name> Docker image tag. Default: nano/app-instance:latest
|
||||
@ -248,6 +248,57 @@ target.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encodin
|
||||
PY
|
||||
}
|
||||
|
||||
render_runtime_env_file() {
|
||||
local target_path="$1"
|
||||
|
||||
TARGET_PATH="$target_path" \
|
||||
AUTHZ_BASE_URL="$AUTHZ_BASE_URL" \
|
||||
AUTHZ_OUTLOOK_MCP_URL="$AUTHZ_OUTLOOK_MCP_URL" \
|
||||
BACKEND_ID="$BACKEND_ID" \
|
||||
CLIENT_ID="$CLIENT_ID" \
|
||||
CLIENT_SECRET="$CLIENT_SECRET" \
|
||||
BACKEND_NAME="$BACKEND_NAME" \
|
||||
PUBLIC_URL="$PUBLIC_URL" \
|
||||
python3 - <<'PY'
|
||||
import os
|
||||
import shlex
|
||||
from pathlib import Path
|
||||
|
||||
target = Path(os.environ["TARGET_PATH"])
|
||||
values = {
|
||||
"NANOBOT_AUTHZ__ENABLED": "1" if os.environ["AUTHZ_BASE_URL"].strip() else "0",
|
||||
"NANOBOT_AUTHZ__BASE_URL": os.environ["AUTHZ_BASE_URL"].strip(),
|
||||
"NANOBOT_AUTHZ__OUTLOOK_MCP_URL": os.environ["AUTHZ_OUTLOOK_MCP_URL"].strip(),
|
||||
"NANOBOT_BACKEND_IDENTITY__BACKEND_ID": os.environ["BACKEND_ID"].strip(),
|
||||
"NANOBOT_BACKEND_IDENTITY__CLIENT_ID": os.environ["CLIENT_ID"].strip(),
|
||||
"NANOBOT_BACKEND_IDENTITY__CLIENT_SECRET": os.environ["CLIENT_SECRET"].strip(),
|
||||
"NANOBOT_BACKEND_IDENTITY__NAME": os.environ["BACKEND_NAME"].strip(),
|
||||
"NANOBOT_BACKEND_IDENTITY__PUBLIC_BASE_URL": os.environ["PUBLIC_URL"].strip(),
|
||||
}
|
||||
ordered_keys = [
|
||||
"NANOBOT_AUTHZ__ENABLED",
|
||||
"NANOBOT_AUTHZ__BASE_URL",
|
||||
"NANOBOT_AUTHZ__OUTLOOK_MCP_URL",
|
||||
"NANOBOT_BACKEND_IDENTITY__BACKEND_ID",
|
||||
"NANOBOT_BACKEND_IDENTITY__CLIENT_ID",
|
||||
"NANOBOT_BACKEND_IDENTITY__CLIENT_SECRET",
|
||||
"NANOBOT_BACKEND_IDENTITY__NAME",
|
||||
"NANOBOT_BACKEND_IDENTITY__PUBLIC_BASE_URL",
|
||||
]
|
||||
lines: list[str] = []
|
||||
for key in ordered_keys:
|
||||
value = values.get(key, "")
|
||||
if value:
|
||||
lines.append(f"export {key}={shlex.quote(value)}")
|
||||
continue
|
||||
if key == "NANOBOT_AUTHZ__ENABLED":
|
||||
lines.append("export NANOBOT_AUTHZ__ENABLED=0")
|
||||
else:
|
||||
lines.append(f"unset {key}")
|
||||
target.write_text("\n".join(lines) + "\n", encoding="utf-8")
|
||||
PY
|
||||
}
|
||||
|
||||
image_exists() {
|
||||
docker image inspect "$IMAGE_NAME" >/dev/null 2>&1
|
||||
}
|
||||
@ -457,12 +508,14 @@ INSTANCE_ROOT="${INSTANCES_ROOT}/${INSTANCE_SLUG}"
|
||||
NANOBOT_HOME="${INSTANCE_ROOT}/nanobot-home"
|
||||
CONFIG_PATH="${NANOBOT_HOME}/config.json"
|
||||
AUTH_USERS_PATH="${NANOBOT_HOME}/web_auth_users.json"
|
||||
RUNTIME_ENV_PATH="${NANOBOT_HOME}/runtime.env"
|
||||
WORKSPACE_PATH="${NANOBOT_HOME}/workspace"
|
||||
|
||||
mkdir -p "$NANOBOT_HOME" "$WORKSPACE_PATH"
|
||||
|
||||
render_config_json "$CONFIG_PATH"
|
||||
render_auth_users_json "$AUTH_USERS_PATH"
|
||||
render_runtime_env_file "$RUNTIME_ENV_PATH"
|
||||
|
||||
if [[ "$FORCE_BUILD" -eq 1 ]] || ! image_exists; then
|
||||
log "building image ${IMAGE_NAME}"
|
||||
@ -539,6 +592,7 @@ instance_root=${INSTANCE_ROOT}
|
||||
nanobot_home=${NANOBOT_HOME}
|
||||
config_path=${CONFIG_PATH}
|
||||
auth_users_path=${AUTH_USERS_PATH}
|
||||
runtime_env_path=${RUNTIME_ENV_PATH}
|
||||
username=${USERNAME}
|
||||
email=${EMAIL}
|
||||
instance_host=${INSTANCE_HOST}
|
||||
|
||||
Reference in New Issue
Block a user