Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 622d7e6d0b | |||
| b9d47e0f05 | |||
| ac0d107dba | |||
| 3b4a70c399 | |||
| 7010c9d34a | |||
| 3f80164190 | |||
| 246328e9ed | |||
| 77c8e863a6 |
@@ -1,3 +1,44 @@
|
||||
# releases
|
||||
# 翎羽笔记 · 自托管组件发布仓
|
||||
|
||||
构建产物发布仓(install.sh 下载源)— 只放二进制包,无源码
|
||||
本仓库只存放**构建产物**(tar.gz + SHA256SUMS),供一键安装脚本下载,不含源码。
|
||||
|
||||
## 一键安装 / 升级
|
||||
|
||||
在目标 Linux 机器上执行(重复执行即为升级,配置与数据保留,失败自动回滚):
|
||||
|
||||
### miiot — 小米 IoT MCP(设备/场景)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://git.lingyu.org.cn/lingyu-note/releases/raw/branch/main/miiot/install.sh | sudo bash
|
||||
```
|
||||
- 架构:amd64 / arm64,Go 静态二进制,零依赖
|
||||
- 端口 8677;配置 `/opt/miiot/.env`(安装时自动生成随机 token)
|
||||
|
||||
### cloud-mcp — 聚合 MCP 网关(browser 代理 / weather / train / maps)
|
||||
|
||||
```bash
|
||||
curl -fsSL https://git.lingyu.org.cn/lingyu-note/releases/raw/branch/main/cloud-mcp/install.sh | sudo bash
|
||||
```
|
||||
- 架构:amd64 / arm64,Go 静态二进制,零依赖
|
||||
- 端口 8550;配置 `/opt/cloud-mcp/.env`
|
||||
|
||||
### sandbox-worker — 沙箱执行器
|
||||
|
||||
```bash
|
||||
curl -fsSL https://git.lingyu.org.cn/lingyu-note/releases/raw/branch/main/sandbox-worker/install.sh | sudo bash
|
||||
```
|
||||
- 前置:Node ≥ 22、Docker(worker 通过 docker API 启动沙箱容器)
|
||||
- 端口 8443;配置 `/opt/sandbox-worker/.env`
|
||||
|
||||
## 常用操作
|
||||
|
||||
```bash
|
||||
VERSION=0.1.0 bash install.sh # 安装指定版本(默认最新)
|
||||
bash install.sh --uninstall # 卸载(保留数据与 .env)
|
||||
journalctl -u <服务名> -f # 看日志(服务名 = miiot / cloud-mcp / sandbox-worker)
|
||||
```
|
||||
|
||||
## 版本与校验
|
||||
|
||||
- Release tag 格式:`<组件>-v<semver>`(如 `miiot-v0.1.0`),各组件独立演进
|
||||
- 每个 release 附 `SHA256SUMS`,安装脚本自动校验;手动下载请自行 `sha256sum -c`
|
||||
|
||||
@@ -23,9 +23,14 @@ KEEP_BACKUPS=3
|
||||
[[ "$(id -u)" == "0" ]] || { echo "❌ 请用 root / sudo 运行" >&2; exit 1; }
|
||||
[[ "$(uname -s)" == "Linux" ]] || { echo "❌ 仅支持 Linux" >&2; exit 1; }
|
||||
command -v curl >/dev/null || { echo "❌ 需要 curl" >&2; exit 1; }
|
||||
command -v node >/dev/null || { echo "❌ 需要 Node.js ≥ 22" >&2; exit 1; }
|
||||
NODE_MAJOR=$(node -e 'console.log(process.versions.node.split(".")[0])')
|
||||
[[ "${NODE_MAJOR}" -ge 22 ]] || { echo "❌ Node ≥ 22(当前 $(node -v))" >&2; exit 1; }
|
||||
# node 可能装在普通用户的 nvm 下(root PATH 看不见)—— 先 PATH 找,再借 SUDO_USER 的登录环境找
|
||||
NODE_BIN="$(command -v node || true)"
|
||||
if [[ -z "${NODE_BIN}" && -n "${SUDO_USER:-}" ]]; then
|
||||
NODE_BIN="$(su - "${SUDO_USER}" -c 'command -v node' 2>/dev/null || true)"
|
||||
fi
|
||||
[[ -n "${NODE_BIN}" ]] || { echo "❌ 需要 Node.js ≥ 22(root 与 ${SUDO_USER:-当前用户} 的 PATH 均未找到 node)" >&2; exit 1; }
|
||||
NODE_MAJOR=$("${NODE_BIN}" -e 'console.log(process.versions.node.split(".")[0])')
|
||||
[[ "${NODE_MAJOR}" -ge 22 ]] || { echo "❌ Node ≥ 22(当前 $("${NODE_BIN}" -v))" >&2; exit 1; }
|
||||
command -v docker >/dev/null || { echo "❌ 需要 Docker(worker 用它起沙箱容器)" >&2; exit 1; }
|
||||
|
||||
if [[ "${1:-}" == "--uninstall" ]]; then
|
||||
@@ -76,6 +81,9 @@ if [[ ! -f "${APP_DIR}/.env" ]]; then
|
||||
PORT=${PORT}
|
||||
# 调用方 x-api-key(已随机生成;server 侧需配同一值)
|
||||
WORKER_API_KEY=$(rnd)
|
||||
# Web UI 登录(/ui,查看连接信息 + 一键升级;首次安装随机密码,请尽快修改)
|
||||
SANDBOX_UI_USER=admin
|
||||
SANDBOX_UI_PASSWORD=$(rnd | head -c 16)
|
||||
ENV
|
||||
chmod 600 "${APP_DIR}/.env"
|
||||
fi
|
||||
@@ -88,7 +96,7 @@ Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=${APP_DIR}/.env
|
||||
ExecStart=$(command -v node) ${APP_DIR}/current/dist/server.js
|
||||
ExecStart=${NODE_BIN} ${APP_DIR}/current/dist/server.js
|
||||
WorkingDirectory=${APP_DIR}/current
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
|
||||
Reference in New Issue
Block a user