express233

游戏逻辑服 拉模式 部署:中央上传一次,SSH 集群 express233-cli deploy 拉齐;按 server_id 预览配置 diff。
功能概览
| 能力 |
说明 |
| 多版本管理 |
草稿 / 审批 / 发布;语义化版本;列表搜索与批量操作 |
| 文件标签 |
为版本内文件打平台/架构标签,拉取时按标签过滤 |
| 配置替换预览 |
按 server_id 查看替换前后全文 diff(YAML / JSON / properties) |
| 版本 diff |
对比任意两发布版本在同一 server_id 下的有效配置 |
| 存储空间 |
磁盘占用总览、目录树、索引搜索、关联删除(草稿文件 / 版本 / 项目) |
| 安全部署 |
CLI deploy = 拉取到 .tmp → stop → swap → start(见 SAFE_DEPLOY) |
| 多租户与 RBAC |
租户隔离、viewer / operator / admin、项目邀请链接 |
| Blob 去重 |
内容寻址存储,多版本共享相同文件块,删除时按引用计数回收 |
界面截图
多版本列表与搜索:

版本文件标签(上传时或批量打标):

版本间配置 diff(双栏 + 文件树):

server_id 模板替换后的拉取预览:

存储空间:磁盘分类、目录树、索引搜索:

截图由 test/visual/tests/readme-assets.spec.ts 在本地控制台生成,存放于 .assets/(非 .github/)。
工作流
| 步骤 |
说明 |
| 中央上传 |
项目 → 版本(草稿)→ 上传 / zip → 发布 |
| 配置约束 |
配置文件 basename 全局唯一;server.yaml 按 文件名 替换(无视路径) |
| 预览 |
Web 或 express233-cli preview 查看每个键 before → after |
| 节点部署 |
express233-cli deploy = 拉取 + 替换 + post_hook |
安装
CLI(节点)
curl -fsSL https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install.sh | bash
iwr -useb https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install.ps1 | iex
Server(中央)
curl -fsSL https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install-server.sh | bash
iwr -useb https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install-server.ps1 | iex
安装指定版本:
curl -fsSL https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install-server.sh | bash -s -- v0.1.0
iwr -useb https://raw.githubusercontent.com/neko233-com/express233/main/scripts/install-server.ps1 | iex; Install-Express233Server -Ver v0.1.0
或 go install ./cmd/express233-cli ./cmd/express233-server
Release 资产(tag v* 触发 release.yml):
express233-cli-{linux,darwin,windows}-{amd64,arm64}[.exe]
express233-server-{...}(同上)
- 各文件
.sha256 校验
中央服运维命令
默认监听 127.0.0.1:23380,数据目录优先读取 EXPRESS233_DATA,否则使用 ~/.express233-server。
首次安装后推荐顺序:
express233-server start
express233-server status
express233-server reset-root-password --password 'change-me-now'
常用命令:
express233-server port
express233-server set-port 32380
express233-server restart
express233-server enable-autostart
express233-server autostart-status
express233-server update
express233-server backup-config
express233-server reload-config
express233-server disable-autostart
express233-server restore-config
express233-server stop
说明:
start:后台启动并写入 run/server.pid、run/server-state.json、run/server.log
enable-autostart / disable-autostart:安装或移除原生开机自启动。Linux 使用 systemd,macOS 使用 launchd,Windows 使用 schtasks /SC ONSTART
autostart-status:查看当前是否已安装原生开机自启动,以及当前是否 active
status:查看当前 PID、访问地址、数据目录、默认端口
port:查看默认端口 23380 与当前持久化监听地址
set-port:修改中央服监听端口,默认会自动重启正在运行的中央服
update:更新到最新 Release(或 --version vX.Y.Z 指定版本),自动替换二进制并重启中央服
reload-config:校验并热重载租户 server.yaml,无需重启进程
backup-config / restore-config:备份并恢复中央 server.yaml;restore-config --default 可恢复为示例模板
reset-root-password:仅命令行强制重置 root 密码,适合忘记密码时救援
- 运行日志:默认
info 级别,写入 run/server.log,按大小滚动,避免单文件无限增长;高频 2xx 请求默认不记日志
PowerShell 示例:
express233-server start
express233-server enable-autostart
express233-server set-port 32380
express233-server reset-root-password --password "change-me-now"
生产落地建议:
- Linux(Ubuntu / Debian / CentOS 7+):优先用
express233-server enable-autostart 落到 systemd
- macOS:落到
launchd
- Windows:落到计划任务
ONSTART
- 开启原生自启动后,后续
start / stop / restart 会优先走原生服务控制面
一行部署
export EXPRESS233_SERVER=http://10.0.0.1:23380
export EXPRESS233_TOKEN=<token>
express233-cli deploy --project mygame --server-id game-logic-042 --dest /opt/game/042
也可不用 pull token,改用账号密码:
export EXPRESS233_SERVER=http://10.0.0.1:23380
export EXPRESS233_USERNAME=root
export EXPRESS233_PASSWORD=root
express233-cli deploy --project mygame --server-id game-logic-042 --version 1.0.0 --dest /opt/game/042
批量:examples/deploy-batch.csv + express233-cli pull-batch --file ...
列出中央已配置的 server_id:express233-cli servers --server URL --token TOKEN
环境自检:express233-cli doctor(检查 healthz、token、server_id、已发布版本)
版本回滚:express233-cli rollback --server-id ID(部署上一发布版;--to 1.0.0 指定版本)
版本 diff:express233-cli diff --from 1.0.0 --to 1.1.0 --server-id ID(对比两版本在 server_id 下的有效配置键)
项目拉取日志:GET /api/projects/{id}/logs?server_id=game-logic-042&version=1.0.0(默认保留最近 30 天)
审批流:operator 上传并「提交审批」→ admin「正式发布」或「驳回」
多租户:默认租户 default;root 登录后可 POST /api/tenants 创建新租户。每租户独立 server.yaml 与项目空间。
配置覆盖(server.yaml)示例——只覆盖必要字段:
replacements:
application.yaml:
mysql:
url: jdbc:mysql://db-a:3306/game
password: secret
同名配置文件须为同一格式(.yaml 用嵌套对象,.properties 用扁平或嵌套展平为 dotted 键)。
本地脚本
仓库根目录(Windows 双击 / 命令行):
可视化验收技能:.cursor/skills/express233-visual-verify/SKILL.md
子目录(同上逻辑):
项目协作与邀请
- 创建项目后,创建者自动成为 项目管理员(读写)。
- 项目管理员在 Web「团队与邀请」生成链接,形如:
https://中央服务/#invite?token=...
- 被邀请人登录同一租户账号后打开链接 → 接受邀请。
- 只读成员(
viewer):预览、列表、拉取已发布版本;不能上传/发布。
- 项目管理员(
admin):在该项目内可上传、审批、发布。
- 租户级
root 可查看租户内全部项目;普通用户仅能看到已加入的项目。
运维:GET /metrics(Prometheus)、GET /api/audit-logs(管理员)、scripts/backup-data.sh
Docker 本地中央服
docker compose up --build
# http://localhost:23380 root/root
Cloudflare
Cloudflare Workers / Pages 不能直接运行 express233-server Go 二进制;推荐用 Worker 作为现有中央服的 HTTPS 反向代理,或 Pages 托管静态控制台并把 /api/* 代理到中央服。示例见 docs/CLOUDFLARE.md 与 examples/cloudflare/worker-proxy。
HTTP 自动化 Demo
管理端受保护 API 现在支持两种方式:
POST /api/login 获取 Cookie / JWT
- 直接用 HTTP Basic Auth,例如
root/root
多版本、整包上传、server_id 注册与替换预览、diff、发布、拉取的完整 curl 演示见 docs/HTTP_AUTOMATION_DEMO.md。
Ansible 批量
examples/ansible/:inventory.ini 中为每台逻辑服设置 express233_server_id 与 express233_dest。
开发
make test
make build
make smoke # 本地冒烟(同 CI)
make lint # golangci-lint v2(.golangci.yml version: "2")
make run-server # :23380 root/root
run-server 会设置 EXPRESS233_WEB_DIR=internal/api/web:开发时修改 html/css/js 后刷新浏览器即可,无需重启 Go 进程。
重复启动时脚本会探测 http://127.0.0.1:23380/healthz,仅停止进程名或命令行含 express233-server 的实例(不会误杀 proxysss 等)。跳过:set EXPRESS233_NO_KILL=1。
GitHub Actions
详见 docs/GITHUB_ACTIONS.md。
存储空间(Web)
左侧导航 存储空间 提供中央服数据目录的可视化运维:
| 功能 |
API |
说明 |
| 占用总览 |
GET /api/storage/overview |
分类统计(userdata / blobs / SQLite / run)、Blob 去重、可用磁盘 |
| 目录树 |
GET /api/storage/tree?path= |
租户 userdata/{slug}/... 与 blobs/ 结构 |
| 索引搜索 |
GET /api/storage/search?q= |
SQLite storage_index 表,重建:POST /api/storage/reindex |
| 关联删除 |
GET /api/storage/delete-plan + DELETE /api/storage/items |
草稿文件、版本、项目;孤立 blob 需 admin |
数据布局:{dataDir}/userdata/{slug}/projects/{name}/{version}/;去重块在 {dataDir}/blobs/。
文档
Go 1.26 · MIT