SILO Console 2.0.0 发布
发布日期: 2026-08-04 · 版本: v2.0.0 · 仓库: pgsty/silo-console
SILO Console 2.0.0 是这套对象存储管理控制台以独立项目身份发布的第一个主版本。它从 georgmangold/console 的 v1.9.1 维护线继续演进,完成了三件事:
- 建立独立身份——产品名称、视觉系统、文档入口、源码归属与发布链路全部迁移到 SILO 项目体系,同时刻意保留 Go 模块路径、环境变量等兼容契约;
- 重塑用户界面——登录页、主题系统、仪表盘与全站细节按统一的设计语言重新打磨,配套全新的品牌图标集;
- 强化工程质量——嵌入式前端资产从约 10MB 压缩到 3.5MB,已知依赖漏洞清零,并修复了包括运行时数据竞争在内的一批上游遗留缺陷。
发布前,本版本经过了两轮独立审查:一轮完整的代码审查与提交历史重组,以及一轮对抗性复核(穷举资产校验、HTTP 语义探测、全站路由回归与发布产物冒烟测试)。
升级前先看兼容边界
2.0.0 的主版本变化发生在公共身份和交付契约上,而不是对象数据格式或 S3 协议上。使用旧仓库、旧发布二进制名或旧容器镜像名的安装脚本必须更新;使用 CONSOLE_MINIO_SERVER、CONSOLE_MINIO_REGION、github.com/minio/console 或 MinIO-compatible Admin API 的现有集成则不应做全局替换。
为什么是 2.0.0
这套控制台最初源自 MinIO Console,随后由 Alevsk/console 与 georgmangold/console 两条社区维护线继续发展。SILO Console 在此基础上由 Pigsty 社区接续维护,为 SILO 提供浏览器管理界面。
版本号从 v1.9.1 提升到 v2.0.0,主要是因为以下对外契约同时发生变化:
- 产品名称统一为 SILO Console,主仓库迁移到
pgsty/silo-console; - 正式发布二进制从
console改为silo-console,容器镜像迁移到ghcr.io/pgsty/silo-console; - 发布资产、校验和、软件包元数据、命令行说明与项目链接全部切换到 SILO;
- 界面中的项目身份、帮助入口、版权归属、源代码供应与商标说明重新建立。
2.0.0 采取的是"对外身份清晰、对内兼容克制"的迁移策略:需要运维人员明确感知,但不对底层兼容接口做机械式改名。
名称与交付契约
| 范围 | 旧名称或旧位置 | 2.0.0 契约 |
|---|---|---|
| 产品 | Console / MinIO Console 的遗留表述 | SILO Console |
| 源码仓库 | georgmangold/console | pgsty/silo-console |
| 正式二进制 | console | silo-console |
| 容器镜像 | ghcr.io/georgmangold/console | ghcr.io/pgsty/silo-console |
| 二进制资产 | console-<os>-<arch> | silo-console-<os>-<arch> |
| 校验和文件 | console_<version>_checksums.txt | silo-console_<version>_checksums.txt |
| 网站与文档 | 上游或前维护者入口 | silo.pgsty.com 与 silo.pgsty.com/docs/ |
命令行程序的作者、用途、帮助文本和项目描述已切换为 Pigsty 与 SILO Console。DEB/RPM/APK 软件包的厂商、维护者、主页、描述与许可证元数据相应更新,可执行文件安装到 /usr/local/bin/silo-console。
刻意保留的兼容标识
以下名称虽然包含 minio 或沿用旧的 console,但它们是接口、协议或安装兼容层的一部分,不属于遗漏的品牌文本:
| 兼容面 | 2.0.0 中的状态 | 原因 |
|---|---|---|
| Go 模块 | 保持 github.com/minio/console | 改动会破坏全部 Go import 与生成代码 |
| 服务端地址 | 保持 CONSOLE_MINIO_SERVER | 现有部署广泛使用的环境变量 |
| 服务端区域 | 保持 CONSOLE_MINIO_REGION | 现有部署兼容契约 |
| 其他配置 | 既有 CONSOLE_* 变量继续有效 | 避免无收益的配置迁移 |
| S3/Admin API 名称 | 保留 MinIO-compatible 字段与枚举 | 它们描述实际协议和 SDK 接口 |
| 源码开发产物 | make console 仍生成 ./console | 保持开发工作流和脚本兼容 |
| 软件包 systemd 单元 | 保持 minio-console.service | 避免升级时出现两个服务或丢失原服务状态 |
| systemd 用户与配置 | 保持 console-user 与 /etc/default/console | 避免不必要的账户和配置文件迁移 |
因此,升级脚本不能简单执行全仓库或全配置的 minio → silo、console → silo-console 替换。未来若要迁移这些兼容接口,需要提供别名、弃用周期和明确的双读策略;2.0.0 不做这件事。
全新界面
2.0.0 不是换个 Logo 的品牌迁移,而是对整套界面的重新设计。
登录页
登录页完全重写:左侧品牌面板以纯 Canvas 生成缓慢流动的正弦光网动画(零外部依赖,遵循 prefers-reduced-motion,切至后台标签页时暂停),文案以 “Keep the S3 Interface / Own the Object Store” 呈现项目主张,底部保留完整的 MinIO 商标声明;右侧表单功能与既有自动化测试选择器完全不变。SILO 字标所用的 Chakra Petch 字体以约 20KB 的本地子集打包,不产生任何外部网络请求。
统一主题系统
控制台的全部颜色收敛到一个亮暗两套的主题层:中性灰阶承载正文与边框,品牌钢蓝色承载主操作与选中态,侧边栏在明暗模式下统一使用与登录页同源的深色系。表单控件与卡片采用统一的圆角与过渡,输入框获得键盘焦点光环,模态框有入场动画(同样遵循 reduced-motion)。服务端下发自定义样式(customStyles)的优先级保持不变。
控制台细节
- 仪表盘(Metrics):统计卡片按统一语法重构——弱化标签、等宽数字、状态圆点对齐;环形图与信息条接入主题;移除了上游实现中的绝对定位布局。
- 空态统一:Watch、Trace、桶事件/复制/生命周期等所有数据面板的占位文本统一为居中弱化样式,不再是左上角的裸文本。
- 垂直选项卡:桶详情等页面的选项卡从带边框的灰色矩阵改为安静的药丸列表,并消除了栏底的空白残留格。
- 许可证页:新增 VERSION 区,同时显示所连接服务端的版本与 Console 自身版本;无
admin:ServerInfo权限的账号不会发起请求,该行自动隐藏。页面同时集中说明 AGPLv3 授权、AGPL 第 13 节下的源码获取权利、来源谱系与商标边界。 - 一批交互修复:移动端首次加载即收起侧边栏(原先要等窗口 resize 事件);侧边栏底部导航不再在窗口高度变化时延迟跟随;桶列表手风琴的高亮条铺满整行;仪表盘在窄屏下不再产生隐式横向溢出;帮助面板改为真正的按需加载——登录页不再向任何外部站点发起请求。
品牌图标集
favicon、PWA 与 Apple Touch 图标此前仍是上一代手绘徽标的 PNG 导出。2.0.0 将全部尺寸(ico 16+32、favicon 16/32/96、apple 180、manifest 192/512)从官方 silo.svg 矢量徽标重新光栅化,主屏尺寸带防裁切安全边距;Web App Manifest 裁剪为现代图标集,移除 2014 时代的 legacy density 条目。图标总体积从 473KB 降至 160KB,浏览器标签页图标从此与站内品牌完全一致。
更小、更快
嵌入式交付是这套控制台的核心形态——前端资产通过 go:embed 打进二进制。2.0.0 对这条链路做了系统性优化:
- 嵌入负载从约 9.6MB 降至 3.5MB。文本资产(JS/CSS/SVG 等)在构建期以确定性 gzip 预压缩后嵌入;仅被现代浏览器忽略的 legacy WOFF 字体(约 1.25MB)、以及一批完全未被引用的孤儿图片资产被移除。
- 首屏传输从约 5.7MB 降至约 1.7MB。此前静态资产完全未压缩传输;现在预压缩资产直接以
Content-Encoding: gzip发出(零运行时压缩开销),对极少数不接受 gzip 的客户端动态解压回退。 - 正确的 HTTP 语义。Accept-Encoding 按 RFC 9110 完整解析 q 值(
gzip;q=0会得到未压缩内容),响应携带Vary: Accept-Encoding;静态路径与 SPA 入口对非 GET/HEAD 请求返回 405 并带Allow头。 - 可复现构建。压缩使用纯 JS 实现(fflate)以保证跨平台字节级确定性;发布流水线新增强制门禁——在干净环境重建嵌入资产后必须与提交内容零差异。
发布二进制(含全部前端资产、strip 后)约 35–40MB;对下游 SILO 服务端而言,内嵌这套控制台的体积代价从约 10MB 降到约 3.5MB。
安全与依赖
Go 侧:构建基线升级到 Go 1.26.5,golang.org/x 系列全部更新至最新。govulncheck 报告的全部可达漏洞已清零:
| 依赖 | 修复版本 | 公告 |
|---|---|---|
google.golang.org/grpc | v1.82.1 | GO-2026-6061 |
github.com/prometheus/prometheus | v0.311.3 | GO-2026-5710 / -5662 / -5381 / -5264(含远程读 DoS) |
github.com/klauspost/compress | v1.18.7 | GO-2026-5841 |
唯一剩余公告位于 golang.org/x/crypto,官方尚未发布修复且代码路径不可达,作为已知事项记录。
前端侧:生产与开发依赖树的完整审计清零,包括 form-data 的高危 CRLF 注入、DOMPurify 与 qs 的多项公告;React Router 迁移至 7.18.2(保留 v6 兼容的声明式 API,全站路由经过完整回归验证)。唯一被显式豁免的公告仅涉及本项目未使用的 unstable API。
运行时正确性:修复了 HTTP 日志目标在初始化与关闭之间的真实数据竞争,以及测试套件中共享 mock 的竞态;受支持的 Go 包全量通过 -race 检测。作为附带收益,go-m1cpu 升级修复了新版 macOS 上本地 go run 的 cgo 崩溃。
更新检查与默认网络行为
本版本对升级和版本目录功能采取保守默认:
silo-console update的自动自更新被禁用,命令只给出提示,不会下载或替换二进制;- 版本目录新增
SILO_RELEASE_SERVICE_HOST配置,原有RELEASE_SERVICE_HOST作为兼容回退;两者均未设置时不连接任何远端版本服务; - 帮助面板的 Blog 内容仅在用户打开时按需拉取,跳转链接只接受
https://silo.pgsty.com。
自动更新会在发布资产签名与回滚链路稳定后再重新评估。
发布产物与平台矩阵
正式发布包含 16 个资产:
| 类型 | 覆盖范围 |
|---|---|
| 独立二进制 | Linux amd64/arm64/arm、macOS amd64/arm64、Windows amd64 |
| 系统软件包 | DEB / RPM / APK × amd64/arm64/armv6 |
| 校验和 | silo-console_2.0.0_checksums.txt(SHA-256) |
容器镜像推送到 ghcr.io/pgsty/silo-console(linux/amd64 与 linux/arm64)。发布流水线在 tag 推送时触发,工作流的第三方 Action 已固定到具体提交,并在构建前强制执行"干净检出 + 资产重建零差异"门禁。
升级指南
独立二进制
install -m 0755 silo-console-linux-amd64 /usr/local/bin/silo-console
/usr/local/bin/silo-console server
从源码构建时,make console 仍生成 ./console;用于正式服务前按发布名称安装。
DEB/RPM/APK 与 systemd
软件包继续安装 /etc/systemd/system/minio-console.service,单元内部启动 /usr/local/bin/silo-console。EnvironmentFile=/etc/default/console、console-user 与既有 CONSOLE_* 变量不变。这个保留让软件包升级继续作用于原有服务,而不是平行创建一个新服务。
容器
docker pull ghcr.io/pgsty/silo-console:v2.0.0
原有端口、挂载和 CONSOLE_* 环境变量继续可用。请固定明确版本,不要把 latest 当作可回滚标识。
配置与集成
- 不要重命名
CONSOLE_MINIO_SERVER或CONSOLE_MINIO_REGION; - 不要修改 Go import 中的
github.com/minio/console; - 自建版本目录优先迁移到
SILO_RELEASE_SERVICE_HOST; - 依赖
console update的脚本改为显式下载、校验并部署发布资产; - 按进程路径识别服务的监控更新为
/usr/local/bin/silo-console; - 镜像白名单加入
ghcr.io/pgsty/silo-console。
本版本不改变对象数据布局,也不要求对存储桶和对象执行迁移。
双重审查与验证范围
2.0.0 在发布前经过两轮独立审查。第一轮完成了全量代码审查、缺陷修复与提交历史重组(13 个过程提交整理为 8 个逻辑提交),并执行了 Go 全包 -race、go vet、golangci-lint、govulncheck、前端类型检查、生产构建、Prettier、死代码检查与完整依赖审计。第二轮为对抗性复核,独立重跑核心门禁并补充:
- 对全部 184 个嵌入文件各发起 gzip 客户端、普通客户端与 HEAD 三种请求,响应体与嵌入源做逐一哈希比对;
- RFC 语义探测(含
gzip;q=0, *;q=0.5等组合 q 值)、方法限制、OIDC 回调与 SPA 深链; - React Router 7 全站路由回归:深链、客户端导航、桶详情选项卡切换与浏览器历史后退;
- 移动端首屏侧边栏行为、登录页外部请求监听、明暗主题全站巡回;
- 下载正式发布资产验证校验和逐字节匹配、二进制版本自报一致,并用发布产物直连真实服务端完成冒烟测试;
- macOS 与 Linux 双平台的资产重建零差异验证。
改写前的完整历史保留在仓库的备份引用中,可随时回滚。
已知限制
- 2.0.0 容器镜像已上传,但在
pgsty组织将该包切换为 Public 前,匿名拉取不可用;GitHub Release 中的二进制、校验和与软件包不受影响; - 自动自更新暂时禁用,升级需要显式执行;
- SSO 端到端测试套件依赖外部 OpenLDAP/Dex/MinIO 拓扑,本轮未在该环境中运行(OIDC 代码路径已由单元测试与 HTTP 层验证覆盖);
golang.org/x/crypto存在一条官方尚未发布修复、且代码路径不可达的公告;- SILO 尚未维护独立的视频资料库,帮助面板中的视频是明确标注的上游兼容性资料;
- 管理能力依赖 MinIO-compatible Admin API,不能把 SILO Console 当作适用于任意 S3 服务的通用浏览器;
- 保留的 Go 模块、环境变量、协议字段和 systemd 服务名仍会在代码、配置和进程管理界面中出现。
关联提交与链接
v2.0.0 的完整变更由以下 8 个逻辑提交构成:
50797de— feat: establish SILO Console identity and compatibility23ae6e8— feat: redesign and harden the SILO Console web app7a83a77— build: update Go toolchain and dependencies1330d25— fix: eliminate logger shutdown and test mock races06b3a34— docs: publish the SILO Console v2.0.0 guide4b24372— build: regenerate optimized embedded web assetsc38eb64— ci: package and publish SILO Console v2 releasesb952a12— brand: regenerate the icon set from the official silo.svg emblem
相关链接: