feat: install nodes and the backend from a static compose file; remove dead code [CI]
ci/woodpecker/push/main-amd64-build Pipeline was successful
ci/woodpecker/push/main-amd64-build Pipeline was successful
Agent, Probe and Backend now start from one static compose.yaml plus a local
.env: the panel (or the release assets, for the very first Backend) provides
the file, the panel's command writes the public values into .env, checks the
file's SHA-256 and runs compose up. Updating is compose pull && compose up -d.
The image is chosen by the CI channel (:latest, or MOSHIRO_VERSION in .env),
not by the panel; the previous one-line script stays as a fallback.
- packaging/compose/{agent,probe,backend}/compose.yaml are the single source,
embedded in the Backend and served at /install/compose/{file}; the root
compose.yaml moved there. Releases also carry them and list them in the
signed SHA256SUMS.
- The container entrypoint defaults the node name to the host name.
- Join token creation returns a compose block (.env, url, hash, per-platform
commands); the admin dialog leads with it.
- Remove code with no references (HotLayer members, LiveHub.SubscriberCount,
QueryService.ParseParams, ReleaseService.Forget, a few constants) and reduce
the install-code lookup to the role it is for.
This commit is contained in:
1 parent
e014a19554
commit
12be44645f
31 files changed
+492
-176
No files matched your search
@@ -1,9 +1,15 @@
|
||||
# Docker 和 rootless/rootful Podman 共用。配置、身份和缓存保存在命名 volume 中。
|
||||
# docker compose up -d / podman compose up -d(Podman 以普通用户执行即可 rootless)。
|
||||
# 首次注册、配置导入和自动更新见 docs/ops/deployment.md。
|
||||
# MoShiro Agent(Linux,需要宿主网络)。Docker 和 rootless/rootful Podman 共用。
|
||||
#
|
||||
# 用法(面板「添加 Agent」会给出带好参数的 .env 内容):
|
||||
# mkdir moshiro-agent && cd moshiro-agent
|
||||
# 把面板给的 .env 内容存成 .env,再下载本文件为 compose.yaml
|
||||
# podman compose up -d # Docker 用 docker compose
|
||||
# 更新:podman compose pull && podman compose up -d (身份和配置在命名卷里,不会动)
|
||||
# 固定版本:在 .env 里写 MOSHIRO_VERSION=0.3.3;想要更严,写成 MOSHIRO_VERSION=0.3.3@sha256:<digest>。
|
||||
# 说明见 docs/ops/deployment.md。
|
||||
services:
|
||||
agent:
|
||||
image: ${MOSHIRO_IMAGE:-registry.oeo.one/moshiro/moshiro-agent}:${MOSHIRO_VERSION:-0.1.1}
|
||||
image: ${MOSHIRO_IMAGE:-registry.oeo.one/moshiro/moshiro-agent}:${MOSHIRO_VERSION:-latest}
|
||||
container_name: moshiro-agent
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
@@ -18,6 +24,13 @@ services:
|
||||
- /sys:/host/sys:ro
|
||||
- /:/host/root:ro
|
||||
environment:
|
||||
# 只在第一次启动时用来注册(身份写进 agent-config 卷之后,.env 里的 MOSHIRO_JOIN 就可以删掉)
|
||||
MOSHIRO_SERVER: ${MOSHIRO_SERVER:-}
|
||||
MOSHIRO_JOIN: ${MOSHIRO_JOIN:-}
|
||||
MOSHIRO_NAME: ${MOSHIRO_NAME:-}
|
||||
MOSHIRO_GENESIS: ${MOSHIRO_GENESIS:-}
|
||||
MOSHIRO_CONTROLLERS: ${MOSHIRO_CONTROLLERS:-}
|
||||
MOSHIRO_ALLOW_NO_OWNER: ${MOSHIRO_ALLOW_NO_OWNER:-}
|
||||
MOSHIRO_NETWORK_SCOPE: host
|
||||
HOST_PROC: /host/proc
|
||||
HOST_SYS: /host/sys
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
# MoShiro Backend(面板)。Docker 和 rootless/rootful Podman 共用。
|
||||
#
|
||||
# 用法:
|
||||
# mkdir moshiro-backend && cd moshiro-backend
|
||||
# 下载本文件为 compose.yaml;写一个 .env(可选):
|
||||
# MOSHIRO_PUBLIC_URL=https://panel.example.com # 面板对外的地址;passkey 绑定在这个域名上,改了会让已注册的 passkey 失效
|
||||
# MOSHIRO_CLAIM_CODE= # 认领码,不写就随机生成并打印在日志里(podman logs moshiro-backend)
|
||||
# podman compose up -d # Docker 用 docker compose
|
||||
# 第一次打开面板按页面引导认领:没有默认管理员。面板监听 127.0.0.1:8080,对外请放在反向代理(HTTPS)后面。
|
||||
# 更新:先备份数据卷,再 podman compose pull && podman compose up -d。新版会自动迁移数据库,
|
||||
# 但旧版不认比自己新的数据库:想回滚要先恢复备份,只改 MOSHIRO_VERSION 不够。
|
||||
# 说明见 docs/ops/deployment.md。
|
||||
services:
|
||||
backend:
|
||||
image: registry.oeo.one/${MOSHIRO_IMAGE_NAMESPACE:-moshiro}/moshiro-backend:${MOSHIRO_VERSION:-latest}
|
||||
container_name: moshiro-backend
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
ports:
|
||||
- "127.0.0.1:8080:8080"
|
||||
environment:
|
||||
ASPNETCORE_HTTP_PORTS: "8080"
|
||||
MoShiro__DataDirectory: /data
|
||||
MoShiro__UpdateChannel: ${MOSHIRO_UPDATE_CHANNEL:-auto}
|
||||
MoShiro__ImageNamespace: ${MOSHIRO_IMAGE_NAMESPACE:-moshiro}
|
||||
MoShiro__PublicUrl: "${MOSHIRO_PUBLIC_URL:-}"
|
||||
MoShiro__ClaimCode: "${MOSHIRO_CLAIM_CODE:-}"
|
||||
volumes:
|
||||
- moshiro-backend-data:/data
|
||||
- moshiro-backend-status:/data/update-status:ro
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:rw,noexec,nosuid,size=64m,mode=1777
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
stop_grace_period: 30s
|
||||
|
||||
volumes:
|
||||
moshiro-backend-data:
|
||||
name: moshiro-backend-data
|
||||
moshiro-backend-status:
|
||||
name: moshiro-backend-status
|
||||
@@ -1,15 +1,29 @@
|
||||
# Docker 和 rootless/rootful Podman 共用。配置、身份和缓存保存在命名 volume 中。
|
||||
# docker compose up -d / podman compose up -d(Podman 以普通用户执行即可 rootless)。
|
||||
# 首次注册、配置导入和自动更新见 docs/ops/deployment.md。
|
||||
# MoShiro Probe。Docker 和 rootless/rootful Podman 共用。
|
||||
#
|
||||
# 用法(面板「添加 Probe」会给出带好参数的 .env 内容):
|
||||
# mkdir moshiro-probe && cd moshiro-probe
|
||||
# 把面板给的 .env 内容存成 .env,再下载本文件为 compose.yaml
|
||||
# podman compose up -d # Docker 用 docker compose
|
||||
# 更新:podman compose pull && podman compose up -d (身份和配置在命名卷里,不会动)
|
||||
# 固定版本:在 .env 里写 MOSHIRO_VERSION=0.3.3;想要更严,写成 MOSHIRO_VERSION=0.3.3@sha256:<digest>。
|
||||
# macOS、Windows 的 Docker Desktop 没有宿主网络:面板给的 .env 里已经写了 MOSHIRO_NETWORK_MODE=bridge。
|
||||
# 说明见 docs/ops/deployment.md。
|
||||
services:
|
||||
probe:
|
||||
image: ${MOSHIRO_IMAGE:-registry.oeo.one/moshiro/moshiro-probe}:${MOSHIRO_VERSION:-0.1.1}
|
||||
image: ${MOSHIRO_IMAGE:-registry.oeo.one/moshiro/moshiro-probe}:${MOSHIRO_VERSION:-latest}
|
||||
container_name: moshiro-probe
|
||||
restart: unless-stopped
|
||||
init: true
|
||||
network_mode: host
|
||||
network_mode: ${MOSHIRO_NETWORK_MODE:-host}
|
||||
environment:
|
||||
MOSHIRO_NETWORK_SCOPE: host
|
||||
# 只在第一次启动时用来注册(身份写进 probe-config 卷之后,.env 里的 MOSHIRO_JOIN 就可以删掉)
|
||||
MOSHIRO_SERVER: ${MOSHIRO_SERVER:-}
|
||||
MOSHIRO_JOIN: ${MOSHIRO_JOIN:-}
|
||||
MOSHIRO_NAME: ${MOSHIRO_NAME:-}
|
||||
MOSHIRO_GENESIS: ${MOSHIRO_GENESIS:-}
|
||||
MOSHIRO_CONTROLLERS: ${MOSHIRO_CONTROLLERS:-}
|
||||
MOSHIRO_ALLOW_NO_OWNER: ${MOSHIRO_ALLOW_NO_OWNER:-}
|
||||
MOSHIRO_NETWORK_SCOPE: ${MOSHIRO_NETWORK_SCOPE:-host}
|
||||
volumes:
|
||||
- probe-config:/etc/moshiro
|
||||
- probe-status:/etc/moshiro/update-status:ro
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/sh
|
||||
# 容器入口(Agent 和 Probe 共用):第一次启动用 MOSHIRO_SERVER / MOSHIRO_JOIN / MOSHIRO_NAME 自己注册并写配置,
|
||||
# 容器入口(Agent 和 Probe 共用):第一次启动用 MOSHIRO_SERVER / MOSHIRO_JOIN(MOSHIRO_NAME 不写就用主机名)自己注册并写配置,
|
||||
# 身份和配置都在命名卷 /etc/moshiro 里,之后重启(或换新镜像重建容器)直接启动,不需要再给参数。
|
||||
set -eu
|
||||
|
||||
@@ -9,8 +9,10 @@ identity="$dir/$role-id"
|
||||
config="$dir/$role.json"
|
||||
|
||||
if [ ! -f "$identity/node.json" ]; then
|
||||
if [ -z "${MOSHIRO_SERVER:-}" ] || [ -z "${MOSHIRO_JOIN:-}" ] || [ -z "${MOSHIRO_NAME:-}" ]; then
|
||||
echo "first start: set MOSHIRO_SERVER, MOSHIRO_JOIN and MOSHIRO_NAME (the panel shows the complete command)" >&2
|
||||
# 节点名字不写就用主机名(宿主网络下容器的主机名就是宿主机的)
|
||||
MOSHIRO_NAME="${MOSHIRO_NAME:-$(hostname -s 2>/dev/null || hostname 2>/dev/null || echo node)}"
|
||||
if [ -z "${MOSHIRO_SERVER:-}" ] || [ -z "${MOSHIRO_JOIN:-}" ]; then
|
||||
echo "first start: set MOSHIRO_SERVER and MOSHIRO_JOIN in .env (the panel shows the complete content)" >&2
|
||||
exit 1
|
||||
fi
|
||||
# 每个节点都必须有属主(passkey):信任根指纹和属主缺一个就不注册
|
||||
|
||||
Reference in new issue
Block a user