后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载NGINX UI 是一个基于 Web 的 Nginx 可视化管理面板。本文围绕仓库中定义在 .claude/skills/release/SKILL.md 的发布工作流系统讲解一次完整发版所需经历的版本准备、发布说明撰写、质量验证、Avira 杀毒预发布门禁、标签推送与 GitHub Release 发布以及可选的 RainYun 云应用商店分发阶段。读完本文你将掌握 NGINX UI 维护者实际使用的发版 SOP并能理解每一步背后对应的仓库源码与测试依据。发布前置条件从干净的工作区开始SKILL.md 明确要求整个发布流程在仓库根目录执行并规定了一系列前置检查基于dev分支工作发版准备以dev分支为基线避免在功能分支上直接进行版本操作。先检查工作区状态改动文件之前先执行git status --short --branch确认当前分支与未提交变更。分离无关改动如果用户要求先提交已有工作区改动应先查看近期提交风格将这部分工作单独提交再开始发版准备暂存staging必须显式不把无关的本地修改混入版本提交。release notes 是临时产物release-notes-vX.Y.Z.md被视为本地临时发布产物不是应提交的文件发布完成后默认保持未跟踪状态。从源码结构看这一步的意义在于保证git diff的纯粹性使后续版本准备提交与功能改动严格分离从而让发布标签指向的提交内容可审计、可回溯。版本准备version.sh 如何驱动版本号提升版本准备的第一步是运行根目录的 version.sh 脚本官方建议尽可能在沙箱外执行因为它会触发前端构建并刷新需要网络访问的生成产物。脚本支持两种模式交互式模式直接运行./version.sh按提示输入版本号并确认。非交互模式./version.sh bump version例如./version.sh bump 2.6.4。版本号必须满足语义化版本SemVer正则^v?[0-9]\.[0-9]\.[0-9](-[a-zA-Z0-9\.])?$即形如2.6.3、v2.0.1-beta.1的格式均合法v前缀在脚本内部会被剥离${VERSION#v}。脚本的实际执行链路对应 version.sh依次为使用跨平台兼容的sed命令macOS 用sed -i Linux 用sed -i将 app/package.json 中的version字段更新为去前缀后的版本号执行bun run build构建前端对应package.json中的build: vite build脚本失败即退出执行go generate重新生成 Go 代码产物失败即退出。因此一次version.sh运行会同时刷新前端构建产物与 Go 生成产物。版本信息在运行时的读取入口位于 internal/version/version.goVersion、BuildId、TotalBuild、Hash四个全局变量通过GetVersionInfo()组装为Info结构含short_hash字段取Hash前 8 位。这解释了为什么 SKILL.md 强调版本准备产物必须整体提交——只提交 package.json 而遗漏生成物会导致运行时版本信息与源码不一致。版本准备完成后用git status --short与git diff --stat检查生成差异随后只暂存版本准备相关文件并提交git add version-prep-files git commit -m chore: prepare vX.Y.Z再次强调不要提交release-notes-vX.Y.Z.md。发布说明release-notes-vX.Y.Z.md 的固定格式与编写规范在仓库根目录创建release-notes-vX.Y.Z.md必须严格使用以下三段式结构## Features - 面向用户的功能摘要 by 贡献者 (short-hash) ## Bug Fixes - 面向用户的修复摘要 by 贡献者 (short-hash) ## Contributors handle编写规范要点如下基于已验证的提交范围以上一个发布标签到HEAD之间的实际提交为准。每条实质变更必须双要素齐备同时包含已验证贡献者的handle与可解析的短提交哈希即使同时附有 PR 链接也不能省略Contributors段落不能替代逐条变更的署名。归属解析规则handle 应从合并 PR 的作者与已验证的共同作者或直接提交的 GitHub 关联作者解析不得自动归功于合并者/提交者绝不允许从显示名或邮箱推断 handle。无法验证时必须向用户询问。提交选择规则必须使用实现该变更的提交且属于已验证的发布范围。squash 合并使用 squash 提交rebase 或 cherry-pick 的变更使用仓库中实际落地的提交不得用发版准备提交顶替。短哈希规则展示唯一的短 SHA从 8 位开始若歧义则延长并链接到 GitHub 上的完整提交 SHA。摘要写法概括对用户可见的实质结果而非照抄原始提交日志只有描述同一连贯变更时才合并分组且要保留全部相关 handle 与支撑摘要的哈希链接无关变更拆分为独立条目。Contributors 去重每个已核实的发布贡献者只列一次包括所有内联署名过的人。空节哨兵若某节无变更使用- None.该哨兵无需署名与哈希。测试状态默认不写除非用户明确要求。发布说明定稿前须逐条核对三个属性署名准确、提交链接可解析、属于发布范围。同一份经审阅的 notes 将复用于标签注解tag annotation与 GitHub Release 正文。该规范参考了 Keep a Changelog 的精选分组摘要理念与 GitHub 自动生成 release notes 的贡献者追溯做法但逐条变更附 handle 短哈希是 NGINX UI 项目的强制格式要求。验证轻量检查优先测试按需执行SKILL.md 对验证阶段给出的原则是./version.sh本身已运行前端构建与 Go 代码生成因此默认只做轻量检查如git diff --check。更宽泛的测试只在发布范围需要或用户要求时运行若用户明确说跳过测试不要反复尝试执行。若本地测试受父级 Go workspace 影响使用仓库隔离模式例如GOWORKoff并指定可写的GOCACHE。仓库中大量*_test.go文件如 internal/version、settings/settings_test.go 等表明测试体系完善但发版流程刻意保持按需执行避免在版本提交后引入不必要的长耗时检查。Avira 预发布门禁Windows 产物的杀毒放行流程这是发布流程中强制性的一环必须在发版准备提交完成之后、创建/推送发布标签或发布 GitHub Release 之前完成。完整步骤如下记录确切的候选提交git rev-parse HEAD。获得明确的发布授权后只推送dev分支让Build工作流从该确切提交构建出 Windows amd64 产物此时不要推送发布标签。等待该候选提交对应的Build工作流成功下载其 Windows amd64 产物确认其中包含预期的nginx-ui.exe。记录可执行文件 SHA-256仅将nginx-ui.exe压缩进受密码保护的 ZIP密码为infected且体积须在 Avira 的 50 MB 限制内。在传输压缩包与联系方式前获得所需的外部提交确认随后以Suspected False Positive (Not Malware)类别向 Avira VirusLab 提交样本附上计划版本、候选提交、可执行文件哈希、源码地址与发布地址。暂停等待 Avira 明确报告Clean。结果为 pending 或检出威胁时发布标签与 GitHub Release 保持不发布状态。复核HEAD与origin/dev仍指向已扫描的候选提交。任何提交变化都会使扫描结果失效需要重新构建产物并重新扫描。需要特别说明的是预发布产物是内容层面的证据并不能保证与最终 GitHub Release 资产逐字节一致因为构建会内嵌settings.buildTime对应 settings/settings.go 中的buildTime字符串字段在 settings/settings.go 中被解析为时间戳。发布后需记录正式发布的 Windows ZIP 与解压后 EXE 的 SHA-256若 WinGet 对最终可执行文件提出告警需将该确切 EXE 再次提交 Avira然后再请求 ESRP 重跑。标签、推送与发布GitHub Release 落地仅当 Avira 预发布结果为Clean且候选提交未变化时才执行以下命令git -c tag.gpgSignfalse tag -a vX.Y.Z -F release-notes-vX.Y.Z.md git push origin vX.Y.Z gh release create vX.Y.Z --verify-tag --title vX.Y.Z -F release-notes-vX.Y.Z.md --discussion-category Announcements要点git -c tag.gpgSignfalse tag -a ...用于本地 GPG 签名阻塞标签创建时的绕过方案即不强制签名仅当必要时使用。该 GitHub Release 命令预期会同时创建对应的Announcements讨论。发布后用gh release view vX.Y.Z验证发布状态必要时检查Announcements分类下的讨论。下载最终的nginx-ui-windows-64.zip记录其 SHA-256解压出nginx-ui.exe并记录可执行文件 SHA-256。发布成功后除非用户要求删除release notes 的 markdown 文件保持未跟踪状态。RainYun 云应用商店发布下游分发阶段RainYun 发布是下游分发阶段必须在 GitHub Release 最终确定、所需发布工作流完成、且对应架构的版本化 Docker 镜像uozi/nginx-ui:version可用之后才启动。RainYun 绝不构成发布 GitHub Release 的前提。当发布请求包含 RainYun 或商店发布时需阅读并遵循 .claude/skills/release/references/rainyun.md。该文件的模板契约、部署验证、外部操作边界、计费确认、CAPTCHA 交接、商店状态回读与 README 推广要求都是此阶段的发布门禁。注意普通的 GitHub Release 授权不等于授权 RainYun 模板变更、可能产生费用的测试部署或应用提交。外部变更前须获得 RainYun 作用域授权并在最终安装/部署控制动作前获得即时确认。RainYun 阶段的发布门禁重新读取官方 GitHub Release 与标签不依赖本地或早期结果要求是非草稿、非预发布版本且标签解析到预期的发布提交。确认相关发布工作流与产物完整验证uozi/nginx-ui:version多平台 OCI 镜像存在并包含所选 RainYun 区域所需的架构。编辑前检查当前 RainYun 模板 schema 与商店复用现有 NGINX UI 模板当前为模板8035避免创建重复模板并确认该版本是否已存在。模板契约RainYun 版本须与官方容器部署保持一致使用单一容器uozi/nginx-ui:version绝不使用latest。设置固定环境变量TZAsia/ShanghaiNGINX_UI_NODE_SKIP_INSTALLATIONtrueNGINX_UI_IGNORE_DOCKER_SOCKETtrue其中NGINX_UI_NODE_SKIP_INSTALLATION对应仓库中NodeSettings.SkipInstallation配置在 internal/kernel/boot.go 中该配置为真时会跳过节点安装逻辑internal/kernel/skip_install.go 与之对应相关行为有 internal/kernel/skip_install_test.go 覆盖验证。环境变量清单可进一步参考 docs/guide/env.md。定义必选用户选项NGINX_UI_PREDEFINED_USER_NAME默认值admin。NGINX_UI_PREDEFINED_USER_PASSWORD随机生成须带NginxUI前缀并满足 RainYun 的密码复杂度校验。提供持久化可写卷/etc/nginx-ui/etc/nginx/var/www/var/log/nginx不挂载 Docker socket也不对这些可写路径使用只读 ConfigMap。暴露容器 TCP 端口80作为 Web 管理服务。RainYun 共享 IP 部署通常会获得随机外部端口不要承诺公网端口80或443标准 HTTP/HTTPS 需要 RainYun 网站代理或独立公网 IP并须单独验证。保持当前最小资源基线0.5CPU、512 MB内存除非平台要求或真实部署证明其不足。外部动作门禁与发布序列RainYun 变更是独立的表征性动作。除非用户当前请求已授权确切范围否则在创建/变更模板或版本、保存外部草稿、上传素材、上架版本或提交应用审核前均须获得明确授权。点击最终安装/部署控制按钮前须展示所选区域、资源、网络模式与外部端口、试用条款、展示的预估费用与潜在持续费用并取得即时确认——因为部署可能产生费用。若出现 CAPTCHA 或其他人工验证必须停下交接给用户绝不绕过。发布序列为按上述契约更新现有模板元数据与版本除非用户要求其他素材使用仓库 Logo 与与现有模板一致的本地化产品文案。上架版本并回读其上架状态应用级提交至少需要一个已上架版本。通过公开商店/安装流程部署模板——已保存模板或成功上架版本不算部署成功证明。等待应用进入健康/运行状态验证分配的端点与有意义的 NGINX UI 响应优先使用健康端点启动失败则检查部署日志。仅在模板部署成功且对 RainYun 可见后才向商店提交应用并回读最终审核/上架状态——仅一个成功 toast 不足为凭。首次上架或推广 URL 变化时在 README 中添加或校验Deploy on RainYun徽章且该仓库编辑必须限定范围不得暂存或提交无关工作也不得从 RainYun 发布授权推断提交/推送权限。完成证据与收尾检查发布完成后需汇总报告发布标签与镜像 digest/架构、RainYun 模板与版本 ID、部署区域/资源/网络端点、运行时验证结果、最终商店状态以及 README 差异/提交状态。若审核仍在进行中应如实报告为 pending而不是声称应用已公开上架。整个发布流程的设计呈现出清晰的门禁链特征版本准备产物必须完整提交 → 发布说明必须逐条可溯源 → Avira 扫描必须Clean且提交不可漂移 → GitHub Release 必须验证通过 → RainYun 分发必须单独授权并回读状态。每一步都以可验证证据而非操作完成作为通过标准这正是该工作流适合作为团队发布 SOP 的原因所在。赞分享后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载相关推荐如何高效完成Rnote发布流程从版本号bump到GitHub Release全指南如何高效完成Rnote发布流程从版本号bump到GitHub Release全指南 Rnote是一款功能强大的手绘笔记应用本文将详细介绍如何从版本号更新到G桌面应用图形学从 Release 包到应用商店上架Easy-Vibe 跨平台发布与审核全流程指南从 Release 包到应用商店上架Easy Vibe 跨平台发布与审核全流程指南 把程序在自己的电脑和手机上跑通和真正把它发布给用户是两回事。本指南以教程文档WebGoat 发布流程实战指南从版本号规范到 Maven 构建、Tag 推送与 GitHub Release 发布WebGoat 发布流程实战指南从版本号规范到 Maven 构建、Tag 推送与 GitHub Release 发布 导读 本文以 WebGoat 仓库根目录网络安全应用安全渗透测试教育创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站