跳转至

开发指南

Meridian 使用 Go 后端、SQLite 和内嵌的原生 JavaScript / CSS 前端。修改前先检查相关测试与现有模块,不需要单独的前端打包框架。

环境与构建

  • Go 1.26.9 或更高版本。
  • Node.js 用于前端测试与语法检查,运行应用不需要 Node。
  • Bash、ShellCheck 用于安装器验证。
  • Docker 用于容器入口测试。
git clone https://github.com/snnabb/Meridian.git
cd Meridian
go build -trimpath -buildvcs=false -o meridian ./cmd/meridian

本地运行仍需要持久密钥与初始化令牌,参考 手工运行。使用独立开发数据库和虚构站点,不把现有生产数据库直接作为测试数据。

主要目录

位置 内容
cmd/meridian/main.go 启动、组件配置与 API 路由。
cmd/meridian/app_*.go 面板、账户、站点和统计接口。
cmd/meridian/database*.go、*_repository.go SQLite、迁移与数据访问。
cmd/meridian/proxy_*.go、dynamic_*.go 代理生命周期与动态播放路由。
cmd/meridian/hls_*.go、dash_*.go 有界清单解析与改写。
cmd/meridian/telegram_*.go Bot API、菜单、填写流程与日报。
web/static 内嵌页面、字体、图标、JavaScript 与 CSS。
tests 前端及安装器回归测试。
install.sh、Dockerfile、docker-entrypoint.sh 安装、更新与容器运行。
docs/wiki 此 Wiki 的 Markdown 源文件。

验证改动

根据影响范围运行相关测试。共享后端行为或发布改动应执行完整竞态与静态检查:

go test -race ./...
go vet ./...
node --test tests/*.test.js
bash -n install.sh
shellcheck install.sh docker-entrypoint.sh

涉及安装器或 Docker 时,再运行对应脚本测试:

bash tests/install_test.sh
bash tests/install_tls_test.sh
bash tests/docker_entrypoint_test.sh
bash tests/dynamic_route_key_test.sh
bash tests/upstream_header_key_test.sh

CI 还检查非 Unix 构建目标、依赖漏洞、代码安全和发布产物。协议改动应覆盖有效播放与失败关闭行为,不只检查源码字符串。

修改前端

静态文件嵌入程序。交付构建需要重新编译 Go 程序;不要把浏览器里的旧缓存误认为新代码。

核对桌面与手机布局、表单数字边界、加载 / 错误状态、跨页导航,以及依赖后端能力的选项。用真实浏览器验证关键交互。

维护 Wiki

文档以 docs/wiki 为源,站点配置在 mkdocs.yml。在隔离环境中安装文档依赖并构建:

python3 -m venv .venv-docs
. .venv-docs/bin/activate
pip install -r tools/wiki/requirements.txt
mkdocs build --strict
mkdocs serve

修改页面后同步更新导航,验证相对链接、截图与中文搜索。示例只使用保留示例域名、虚构用户与站点,不记录真实凭据或私人部署数据。

合并到 master 的文档改动由 Wiki 工作流自动构建与发布到 文档站。原生 GitHub Wiki 从同一份源文档导出,使用有 Wiki 写入权限的 GitHub 账户同步:

git clone https://github.com/snnabb/Meridian.wiki.git ../Meridian.wiki
python tools/wiki/export.py ../Meridian.wiki
git -C ../Meridian.wiki add '*.md'
git -C ../Meridian.wiki commit -m "docs: sync project wiki"
git -C ../Meridian.wiki push origin master

导出会更新导航内的页面、侧边栏和页脚,保留其他自建页面。维护这些页面时以 docs/wiki 为准。发布应用新版本时,核对文档功能边界与截图版本,不把测试中功能当成已发布行为。

参与项目

先阅读 贡献说明。普通问题使用 Issue,安全问题私下报告。PR 描述应包含具体问题、行为变化与验证结果。