SILO Console 2.0.0 发布

SILO Console 首个独立主版本:完成品牌与发布链路迁移,全面重塑登录页与控制台界面,嵌入资产从约 10MB 压缩到 3.5MB,清零已知依赖漏洞,并修复多处上游遗留缺陷。

发布日期: 2026-08-04 · 版本: v2.0.0 · 仓库: pgsty/silo-console

SILO Console 2.0.0 是这套对象存储管理控制台以独立项目身份发布的第一个主版本。它从 georgmangold/console 的 v1.9.1 维护线继续演进,完成了三件事:

  1. 建立独立身份——产品名称、视觉系统、文档入口、源码归属与发布链路全部迁移到 SILO 项目体系,同时刻意保留 Go 模块路径、环境变量等兼容契约;
  2. 重塑用户界面——登录页、主题系统、仪表盘与全站细节按统一的设计语言重新打磨,配套全新的品牌图标集;
  3. 强化工程质量——嵌入式前端资产从约 10MB 压缩到 3.5MB,已知依赖漏洞清零,并修复了包括运行时数据竞争在内的一批上游遗留缺陷。

发布前,本版本经过了两轮独立审查:一轮完整的代码审查与提交历史重组,以及一轮对抗性复核(穷举资产校验、HTTP 语义探测、全站路由回归与发布产物冒烟测试)。

为什么是 2.0.0

这套控制台最初源自 MinIO Console,随后由 Alevsk/consolegeorgmangold/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/consolepgsty/silo-console
正式二进制consolesilo-console
容器镜像ghcr.io/georgmangold/consoleghcr.io/pgsty/silo-console
二进制资产console-<os>-<arch>silo-console-<os>-<arch>
校验和文件console_<version>_checksums.txtsilo-console_<version>_checksums.txt
网站与文档上游或前维护者入口silo.pgsty.comsilo.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 → siloconsole → 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/grpcv1.82.1GO-2026-6061
github.com/prometheus/prometheusv0.311.3GO-2026-5710 / -5662 / -5381 / -5264(含远程读 DoS)
github.com/klauspost/compressv1.18.7GO-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-consolelinux/amd64linux/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-consoleEnvironmentFile=/etc/default/consoleconsole-user 与既有 CONSOLE_* 变量不变。这个保留让软件包升级继续作用于原有服务,而不是平行创建一个新服务。

容器

docker pull ghcr.io/pgsty/silo-console:v2.0.0

原有端口、挂载和 CONSOLE_* 环境变量继续可用。请固定明确版本,不要把 latest 当作可回滚标识。

配置与集成

  • 不要重命名 CONSOLE_MINIO_SERVERCONSOLE_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 全包 -racego vetgolangci-lintgovulncheck、前端类型检查、生产构建、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 compatibility
  • 23ae6e8 — feat: redesign and harden the SILO Console web app
  • 7a83a77 — build: update Go toolchain and dependencies
  • 1330d25 — fix: eliminate logger shutdown and test mock races
  • 06b3a34 — docs: publish the SILO Console v2.0.0 guide
  • 4b24372 — build: regenerate optimized embedded web assets
  • c38eb64 — ci: package and publish SILO Console v2 releases
  • b952a12 — brand: regenerate the icon set from the official silo.svg emblem

相关链接:

最后修改:2026-08-05: 2026-08-04 release (131ac3d)