tursom 629d6d5dbc
Some checks failed
Go / build (.exe, 386, windows, windows-386) (push) Has been cancelled
Go / build (.exe, amd64, windows, windows-amd64) (push) Has been cancelled
Go / build (.exe, arm64, windows, windows-arm64) (push) Has been cancelled
Go / build (386, freebsd, freebsd-386) (push) Has been cancelled
Go / build (386, linux, linux-386) (push) Has been cancelled
Go / build (386, netbsd, netbsd-386) (push) Has been cancelled
Go / build (386, openbsd, openbsd-386) (push) Has been cancelled
Go / build (386, plan9, plan9-386) (push) Has been cancelled
Go / build (amd64, darwin, darwin-amd64) (push) Has been cancelled
Go / build (amd64, dragonfly, dragonfly-amd64) (push) Has been cancelled
Go / build (amd64, freebsd, freebsd-amd64) (push) Has been cancelled
Go / build (amd64, illumos, illumos-amd64) (push) Has been cancelled
Go / build (amd64, linux, linux-amd64) (push) Has been cancelled
Go / build (amd64, netbsd, netbsd-amd64) (push) Has been cancelled
Go / build (amd64, openbsd, openbsd-amd64) (push) Has been cancelled
Go / build (amd64, plan9, plan9-amd64) (push) Has been cancelled
Go / build (amd64, solaris, solaris-amd64) (push) Has been cancelled
Go / build (arm, 6, linux, linux-armv6) (push) Has been cancelled
Go / build (arm, 7, linux, linux-armv7) (push) Has been cancelled
Go / build (arm, freebsd, freebsd-arm) (push) Has been cancelled
Go / build (arm, netbsd, netbsd-arm) (push) Has been cancelled
Go / build (arm, openbsd, openbsd-arm) (push) Has been cancelled
Go / build (arm, plan9, plan9-arm) (push) Has been cancelled
Go / build (arm64, darwin, darwin-arm64) (push) Has been cancelled
Go / build (arm64, freebsd, freebsd-arm64) (push) Has been cancelled
Go / build (arm64, linux, linux-arm64) (push) Has been cancelled
Go / build (arm64, netbsd, netbsd-arm64) (push) Has been cancelled
Go / build (arm64, openbsd, openbsd-arm64) (push) Has been cancelled
Go / build (loong64, linux, linux-loong64) (push) Has been cancelled
Go / build (mips, linux, linux-mips) (push) Has been cancelled
Go / build (mips64, linux, linux-mips64) (push) Has been cancelled
Go / build (mips64le, linux, linux-mips64le) (push) Has been cancelled
Go / build (mipsle, linux, linux-mipsle) (push) Has been cancelled
Go / build (ppc64, aix, aix-ppc64) (push) Has been cancelled
Go / build (ppc64, linux, linux-ppc64) (push) Has been cancelled
Go / build (ppc64, openbsd, openbsd-ppc64) (push) Has been cancelled
Go / build (ppc64le, linux, linux-ppc64le) (push) Has been cancelled
Go / build (riscv64, freebsd, freebsd-riscv64) (push) Has been cancelled
Go / build (riscv64, linux, linux-riscv64) (push) Has been cancelled
Go / build (riscv64, openbsd, openbsd-riscv64) (push) Has been cancelled
Go / build (s390x, linux, linux-s390x) (push) Has been cancelled
Go / merge-artifacts (push) Has been cancelled
Docker Image / docker (push) Has been cancelled
feat(plugin): add governance release gates
2026-06-26 12:09:20 +08:00
2026-06-25 21:16:11 +08:00
2026-06-25 21:16:11 +08:00
2026-06-25 21:16:11 +08:00
2026-06-25 21:16:11 +08:00
2024-10-03 19:38:39 +08:00
2026-06-25 21:16:11 +08:00
2026-06-25 21:16:11 +08:00

mc-gateway

一个简易的 Minecraft 网关,通过客户端握手里的 host 将流量转发到对应的后端 Minecraft 服务器。

启动

mc-gateway 默认不依赖配置文件。直接启动后会在 25565 端口同时提供 Minecraft TCP 转发入口和后台管理入口:

  • Admin 页面:/admin/
  • Admin API/admin/api
  • SQLite 数据库:mc-gateway.sqlite3

首次启动时,如果用户表为空,可以通过 Admin 页面初始化管理员账号。也可以用 MC_GATEWAY_ADMIN_PASSWORD 在启动时创建默认管理员用户 admin

启动期环境变量

环境变量 默认值 说明
MC_GATEWAY_TCP_ADMIN_PORT 25565 TCP/Admin 共享监听端口
MC_GATEWAY_ADMIN_PATH /admin/ Admin 页面路径
MC_GATEWAY_ADMIN_API_PREFIX /admin/api Admin API 前缀
MC_GATEWAY_ADMIN_STATIC_DIR cmd/gateway/admin_static Admin 前端静态文件目录Docker 镜像中为 /usr/share/mc-gateway/admin_static
MC_GATEWAY_DB mc-gateway.sqlite3 SQLite 数据库路径
MC_GATEWAY_ADMIN_PASSWORD 首次启动时创建默认管理员密码

服务启停、KCP/QUIC/WebSocket 参数、用户、权限和路由都通过后台管理写入 SQLite不再使用 config.toml 作为启动配置或路由来源。

Docker Compose

生产部署只需要 compose.yaml,可以直接用 Docker Compose 拉取已发布镜像并启动:

docker compose up -d

源码目录中包含 compose.override.yamlDocker Compose 会自动加载它,因此本地构建测试仍然可以直接运行:

docker compose build

默认使用 host network在宿主机 25565/tcp 提供 Minecraft TCP 转发入口和后台管理入口,后台地址为:

http://<host>:25565/admin/

Compose 使用本地 ./data 目录持久化 SQLite 数据库和 WAL 文件,不挂载旧 config.toml。首次启动可以在后台页面初始化管理员,也可以通过 .env 预置默认管理员 admin 的密码:

MC_GATEWAY_ADMIN_PASSWORD=change-me

常用可选项:

MC_GATEWAY_TCP_ADMIN_PORT=25565
MC_GATEWAY_ADMIN_PATH=/admin/
MC_GATEWAY_ADMIN_API_PREFIX=/admin/api
MC_GATEWAY_ADMIN_STATIC_DIR=/usr/share/mc-gateway/admin_static
MC_GATEWAY_DB=/data/mc-gateway.sqlite3

Admin 前端开发

Admin 前端源码位于 cmd/gateway/admin_frontend/src,使用 TypeScript 拆分为原生 ES modules。构建产物输出到 cmd/gateway/admin_static/jsGo 服务不会 embed 前端文件,而是从 MC_GATEWAY_ADMIN_STATIC_DIR 指向的目录透传静态响应。

修改前端后运行:

npm install
npm run build:admin

master 分支和 v* tag 会通过 GitHub Actions 构建并推送 Docker 镜像到 GitHub Container Registry

ghcr.io/tursom/mc-gateway:latest

权限

后台管理内置三类角色:

角色 能力
管理员 管理用户、服务、路由和审计日志
成员 查看状态,管理路由
游客 查看当前路由

路由

路由记录存储在 SQLite 中,后台修改后会刷新内存快照。默认 fallback 路由的 host 为 default

upstream

路由上游支持多种协议。TCP 上游直接填写地址,其他协议在地址前加协议前缀:

协议 前缀 说明
tcp 原始 TCP 连接
kcp kcp:// 使用 KCP 协议连接到服务器
quic quic:// 使用 QUIC 协议连接到服务器
haproxy haproxy:// 使用 HAProxy 协议连接到服务器

HAProxy 协议头会保存客户端真实 IP适合需要在后端服务端获取真实客户端 IP 的场景。

可选服务

TCP/Admin listener 是基础入口默认启用。KCP、QUIC、WebSocket 默认禁用,可以在后台管理中启用并配置端口和参数;配置修改后第一版按重启后生效处理。

服务 默认端口 说明
TCP/Admin 25565 Minecraft TCP 转发和后台管理共享入口
KCP 25565 可选 KCP 入口
QUIC 25565 可选 QUIC 入口
WebSocket 25566 可选 WebSocket 入口

日志

默认日志级别为 info,输出到标准输出。日志文件重开逻辑支持 logrotate 场景:

/var/log/mc-gateway.log {
    copytruncate
    daily
    missingok
    rotate 14
    compress
    compresscmd /usr/bin/zstd
    compressext .zst
    compressoptions -T0 --long
    uncompresscmd /usr/bin/unzstd
    notifempty
    delaycompress
    dateext
    postrotate
        if [ -f /dev/shm/mc-gateway.pid ]; then
            kill -SIGHUP $(cat /dev/shm/mc-gateway.pid)
        fi
    endscript
}
Description
No description provided
Readme 1.8 MiB
Languages
Go 90.4%
TypeScript 7.9%
HTML 0.8%
CSS 0.7%
Dockerfile 0.2%