更新日志

最新新

sh0 中发布的每一项功能、修复和改进。29 个阶段,2 次安全审计,90+ 次工程会话——从零开始用 Rust 构建。

v1.10.0 稳定

v1.10.0:你选择的端口终于抵达你的应用

September 23, 2026

自 v1.8.0 以来的两个版本。最重要的一项:在部署表单中填写的端口终于抵达应用本身。一个预填为 80 的字段悄悄抵消了两项早已发布的修复,而单元测试无法发现它——每一层单独看都是正确的。此外还有第二因素的安全网、回访时轻 99.5% 的登录页,以及面板自己的域名。

316

API 端点

103

MCP 工具

1300+

测试通过

171

部署模板

开发时间线

从首次提交到生产就绪——完整的构建历史

v1.10.0:你选择的端口终于抵达你的应用

September 23, 2026 | v1.10.0
  • 你填写的端口现在会抵达你的应用。部署表单预填的 80 让所有应用都声明了一个显式端口,从而一次性抵消了两项早已发布的修复:该值确实到达了 `EXPOSE`、发布端口和健康探测,却从未到达进程本身。现在四条路径——压缩包上传、git、Dockerfile、Docker 镜像——的该字段都默认为空,另有十二个模板写入 `ENV PORT`,Java 模板为 Spring Boot 写入 `ENV SERVER_PORT`;当你什么都不填时,由镜像自身的 `EXPOSE` 决定。
  • 健康探测失败时会指出真正打开的端口:“Nothing answers on port 3000; the container listens on 9091”。未声明任何 `EXPOSE` 的 Dockerfile 会说明它回退到了哪个端口,而不是悄悄回退;与镜像 `EXPOSE` 相矛盾的端口会在部署之前而非之后被标出。
  • 第二因素获得了安全网和记忆。备用码不再被配置页的重新加载抹除,可凭一个新的验证器代码在面板中重新生成;每一次受保护的登录——无论通过密码还是 Google——都会在审计日志中写下一行带时间的记录,被拒绝的尝试也包括在内。
  • 体积。访客只下载一种语言而不是五种,静态资源带缓存、按 ETag 重新校验,并以 brotli 和 gzip 预压缩。登录页首次访问从 1106 KB 降至 168 KB,再次访问降至 763 字节。
  • 云端连接改为每个实例独立。每次安装现在都带有自己的凭据和通往代理的加密通道,而不是所有人共用一把密钥;面板也可以迁移到你自己的域名——在面板中明确告知,并指出即将停止响应的旧地址。
  • 其余部分:十一个模板崩溃循环被逐一读清并分类——八个已修复,两个已撤下;服务主机名不再返回主容器的内容;修改密码会真正吊销其他会话;内容安全策略放行了 Google Identity 的来源。这里的每一项修复都附有在真实机器上带日期的观察记录;“已在代码中修复但从未见其运行”的计数保持为零。

v1.9.0:面板的专属域名,以及可以区分的故障

September 22, 2026 | v1.9.0
  • 面板获得了启用专属域名的完整路径。设置或清除时会指出即将停止响应的地址,移除失败会以红色显示而不是虚假的成功,并且只有在证书生效后才会提示切换。
  • 代理的三种不同故障过去返回同一个 404。现在它们返回三个不同的状态码,且已知但缺少上游的域名不再自称未知。
  • 仪表盘的三个状态标签改用面板的语言,而不是始终以英文作答。
  • OpenAPI 文档会公布真正提供该文档的二进制版本,而不是源码中写死的号码。

v1.8.0:多服务项目、实例备份、自主更新

September 21, 2026 | v1.8.0
  • 项目内的各服务通过名称互相访问。稳定的内部别名(`<app>.internal`)会随容器地址的变化而跟随:重新部署后 IP 从 172.20.0.4 变为 172.20.0.5,该名称依然可以解析,无需修改任何 URL。此外还有项目级共享变量、启动顺序,以及端到端的 Compose 导入。
  • sh0 现在能备份自己。`sh0 instance backup` 通过 `VACUUM INTO` 为自身数据库生成一致的快照——绝不是文件拷贝,因为数据库运行在 WAL 模式下——主密钥不进入备份文件,但其指纹会被记录;`sh0 instance restore` 可将其恢复到一台全新的机器上。同时支持实例之间的项目导入,以及密钥加密主密钥的轮换。
  • 诊断信息在等待期间就会出现,而不是等待结束之后。健康探测运行时即可看到容器日志,每个构建步骤都会报告耗时,构建日志开头带有上下文行,磁盘状态可通过 API 读取,悬空镜像层的回收会被记录,磁盘告警在写满之前发出而不是事后通报。
  • 归档上传方式,面向没有 git 仓库、直接部署自己代码的用户。上传时可指定应用类型,启动命令可配置,构建失败会显示上下文行与原因;没有监听端口的 worker 不再让上传阻塞 300 秒并遗留容器。Node、Python、Go 和 Rust 均已通过归档与 Dockerfile 两种方式完成部署。
  • 一套安装无需 SSH 即可自我修复与升级。`sh0 update` 可选择通道——稳定版或预发布版——校验所下载二进制文件的校验和,并支持双向回滚;升级不再中断已部署的应用。`sh0 doctor` 检查 Docker、端口、磁盘、证书与系统时钟,缺失项会以非零状态退出。另有干净卸载与加固后的 systemd 单元。
  • 邮件与文件存储真正可用:通过 JMAP 驱动 Stalwart v0.16,Stalwart 自动轮换的 DKIM 密钥会同步到 DNS,被拒绝的凭据会明确报错而不再静默。以及四十八项修复,每一项都有在真实机器上的带日期观测记录——不是单元测试,而是真实机器。

v1.7.1:带到期日的许可证,自动续期

September 9, 2026 | v1.7.1
  • 许可证现在带有与付费订阅一致的到期日期。此前按月订阅签发的是永久许可证:付一个月即可终身使用。
  • 每日任务会获取续期后的密钥、校验其签名并替换已存储的密钥——订阅续期时无需任何操作。订阅取消后密钥被吊销,套餐在下一次任务时降级。
  • 按域名的 DNS-01 验证:位于终止 TLS 的 CDN 之后的服务器(Cloudflare 橙色云)现在无需关闭防护即可获得证书,不再循环耗尽 Let’s Encrypt 配额。
  • 路由与生命周期:重启导致发布端口变化时会同步更新 Caddy 路由;监听端口与配置不符的应用不再一边返回 502 一边被判定为健康;重新部署不再让旧容器与新容器并存。
  • 在自托管安装中,资源上限取决于硬件而非许可证;SSL 状态刷新任务现在既能提升也能降级证书。
  • 2026 年 9 月 9 日之后购买的许可证均需要 v1.7.1。更早的版本无法获取续期,会在第一个周期结束时停止。

v1.7.0:许可证是一份签名文档

September 7, 2026 | v1.7.0
  • 许可证密钥现在是一份带有自身套餐信息、使用 Ed25519 签名的文档,而不是一个仅凭前缀就被信任的字符串。此前任何无法识别的字符串都会激活 Pro 套餐。
  • 校验在离线状态下完成:公钥内置于二进制文件中,因此与网络隔离的服务器无需任何外部调用即可验证自己的许可证。

v1.6.29:内部试用修复 -- .dockerignore 与 Docker 一致、崩溃循环被点名、无端口的 worker 应用

September 7, 2026 | v1.6.29 · v1.6.30
  • 构建上下文把不含斜杠的 .dockerignore 模式应用到任意深度(gitignore 语义);Docker 把每个模式锚定在根目录,只有 **/ 才会向下匹配。一个忽略 *.md 却导入 src/lib/resources/x.md 的项目在 Easypanel 上能构建,在 sh0 上却失败。sh0 现在采用 Docker 的规则;自身生成的列表明确写出 **/。
  • 健康检查循环只读取 State.Running。在 unless-stopped 下启动即退出的容器会在一秒内被重启,看起来像在运行,TCP 探测失败 300 秒,日志归咎于超时。循环现在读取 RestartCount 和 Restarting,几秒内以“crashed N times (exit code X)”失败,停止循环并指出 OOM-kill。 同日发布的 v1.6.30:退出码和 OOM 标志改为从已停止的快照读取,因为 Docker 在重启容器的瞬间会将两者清零 -- 此前 OOM-kill 被报告为“exit code 0”。
  • 镜像构建使用 rm=true,它只在构建成功时删除中间容器;每次失败的构建都会留下一个随机名称的 Exited (1) 容器,任何清理都看不到它。forcerm=true 在两种情况下都会删除。
  • 应用有了类型:web(不变)或 worker。worker 不解析也不发布端口,没有 Caddy 路由和预览域名,只要保持运行 15 秒且未重启即视为健康。Celery、BullMQ 和 cron 类进程部署时不再被无人应答的探测杀掉。仪表板表单提供该选项。

修复版 v1.6.28:两次重新部署后 API 冻结,Sinatra 返回 403

September 6, 2026 | v1.6.28
  • *.sh0.app 地址的预览代理在整个转发请求期间保持 DashMap 读守卫存活,WebSocket 场景下可达数小时。重新部署时新增的缓存清理因此阻塞了一个运行时线程,等待中的写入者又阻塞了新的读取者,两次有流量的重新部署使 API 冻结,数百个连接排队。现在缓存条目会在任何 await 之前被复制出来。请勿在生产环境安装 v1.6.27。
  • Ruby 模板从未设置 RACK_ENV:Puma 以开发模式启动,Sinatra 4 的主机授权对所有公网主机返回 403,而 localhost 上的健康探针却能通过。生产阶段现在把 RACK_ENV 和 RAILS_ENV 设为 production。

上线前的十九项修复:构建上下文、明文登录、损坏的模板,以及会安装 Docker 的安装程序

September 6, 2026 | v1.6.27
  • 构建上下文:只要有一个路径超过 100 字节,tar 归档就会失败(GNU 头没有 prefix 字段);长路径现在以 GNU 长链接的形式传输。sh0 还曾用自己的列表替换项目的 .dockerignore,从而排除所有 *.md 文件:现在会读取并补充项目文件,当你自带 Dockerfile 时不再强加任何规则,并记录被排除文件的数量。
  • 认证:只要请求经由 HTTPS 到达,会话与刷新 Cookie 都带有 Secure;80 端口对每个受管主机返回 308 跳转到 https://(ACME 验证仍然通过);安装程序会提示通过 IP 的首次登录是明文的,并说明如何为面板配置 TLS 域名;虚构的默认凭据 [email protected] 已从安装程序、面板和服务器横幅中移除。
  • 技术栈:Go 可以构建任意 go.mod 版本(在当前镜像上使用 GOTOOLCHAIN=auto),并在可执行文件位于 cmd/<名称> 时找到模块根目录;Ruby 的 Bundler 配置能到达生产阶段且 Puma 只绑定一次;.NET 在构建时推导入口程序集,为健康探针自带 curl,并借助 roll-forward 运行在 .NET 10 上。重新部署或扩缩容时,*.sh0.app 不再在缓存过期期间返回 502。
  • 平台:未知的许可证字符串会被拒绝而不是激活为 Pro;配额提示会指出占用名额的项目;`sh0 users list` 在服务器上直接读取本地数据库;云代理把 /api/* 路由到你的应用而不是代为回答;站点的 Active Servers 卡片读取真实心跳;get.sh0.dev 在写入 systemd 单元之前先安装 Docker(或尽早失败并给出准确命令)。

Dogfooding 前的两项修复:已停止的容器不再被清理删除,按需证书不再需要邮箱

September 5, 2026 | v1.6.26
  • 每小时的 Docker 清理会删除所有由 sh0 管理的已停止容器,包括刚崩溃的应用的容器:退出码、日志和“启动”按钮随之消失。现在只要数据库中仍有任何一行引用该容器,已停止的容器就会被保留;只删除真正的孤儿容器,数据库无法读取时跳过该步骤,而不是盲目执行。
  • 按需证书签发只有在配置了 ACME 邮箱时才会启用,而日志却在任何情况下都宣称已启用——在默认安装上,Caddy 仍会在加载路由时签发。现在无论是否设置邮箱,都会生成按需的兜底策略;没有邮箱时,签发者中仅省略该字段。

四个批次一并发布:实例锁、按需证书与诚实的 SSL 状态

September 5, 2026 | v1.6.25
  • 在运行中的实例旁执行 `sh0 serve --port 9001`,过去会安装软件包、迁移数据库并停掉正在运行的 Caddy,然后才发现自己无法启动。现在 `sh0.pid` 上的一把建议性 `flock` 会立即拒绝第二个实例,报出持有该目录的 PID,并且不触碰任何东西。崩溃留下的锁文件无害:锁随进程消亡,下一次启动照常进行。
  • 证书改为按需签发,在第一次 TLS 握手时进行,而不是在加载路由时——DNS 尚未生效的域名不再白白消耗一次 Let's Encrypt 尝试。域名在有人连接之前保持 `pending`,徽标现在会说明原因(`ssl_pending_reason`)。`ssl_expiry` 过去始终为 `null`,现在从磁盘上的证书读取。证书消失的 `active` 域名会在连续两次检查后回到 `pending`。
  • 陷入崩溃循环的容器过去报告为 `running`,因为只读取了 Docker 状态;现在重启次数和退出码也计入判定。Docker 流式路径的内存缓冲区曾没有上限——隔离测试中 sh0 在 7.3 GB 时被 OOM 杀死——现已设限。Compose 栈中获得公开路由的服务过去由哈希表的迭代顺序决定,可能在两次部署之间变化;现在是确定性的。
  • 状态页订阅从设计上就是失效的:确认邮件从未发出,而 API 却声称已发送。现在表单只在配置了 SMTP 时显示,每个域名最多 200 条未确认订阅,未确认记录 48 小时后清理,而不是 7 天。
  • 备份计划上的“立即运行”过去执行的是一次临时备份,其归档不受任何保留规则约束;现在它执行的是计划本身。`restore-external` 过去拒绝从未预配的数据库服务器,却接受已停止的服务器;现在已停止的服务器也会被同步拒绝。
  • Compose 导入器过去要求 `image:` 并悄悄忽略 `build:`;现在它会拒绝 `build:` 服务,并给出说明该怎么做的消息。`--acme-email` 像 `--panel-domain` 一样被持久化,续期不再依赖未经验证的回退值。API 也不再在没有任何预配进行时宣称 `panel_domain_ssl: "provisioning"`。

Laravel 可以部署了,Compose 支持长格式,端口不再丢失

September 3, 2026 | v1.6.23 – v1.6.24
  • 过去每个 Laravel 应用都被当作 Node 构建。探测器在遇到第一个 `package.json` 时就返回,而现代 Laravel 总是带着一个,因为 Vite 就是这样构建前端资源的,于是容器在 `npm start` 上失败——任何 Laravel 的 `package.json` 里都没有这个脚本。现在当项目拿得出证据时,PHP 胜出:`composer.json` 里的框架、一个 `artisan`,或者一个 `public/index.php`。仅仅引入了 PHP 库的 Node 项目仍然是 Node。
  • 让 Laravel 被识别,并不等于让它跑起来。`package.json` 现在成为 PHP 镜像内部的资源构建阶段;Composer 分两次安装,因为第一次时 `artisan` 还不存在;`APP_KEY` 在首次部署时生成并加密保存,而不是烤进镜像;会话、缓存和队列驱动默认选用不需要数据库的那些。最后这一条是在演示机上部署并收到 500 时发现的,不是读代码读出来的。
  • 使用长格式书写 `ports` 和 `volumes` 的 Compose 文件解析失败——`invalid type: map, expected a string`。这两个键现在两种写法都接受,包括裸整数,并且 `read_only: true` 会变成真正的只读挂载。长格式的宿主机路径仍然被拒绝,但拒绝的理由现在会说明策略,而不是抛出一个类型错误。
  • 在 Docker 镜像这条路径上,解析出的端口用于发布容器后就被丢弃了:未指定端口部署的应用返回 `port: null`,而绑定到它的域名会路由到 3000,容器却在别处监听。现在所有路径都会持久化端口,而新增的测试检查的不是那个函数本身,而是它的调用方——所以第六条忘记调用的部署路径会让测试变红。
  • 默认分支是硬编码的字符串 `main`。sh0 从不询问远端,因此 `laravel/laravel`(在 `13.x` 上)以及所有仍在 `master` 上的仓库都会在第一步失败,只留下一条 libgit2 的消息。空分支现在表示“仓库的默认分支”:克隆时解析远端 HEAD,把找到的名字写回应用,而不存在的分支会通过列出确实存在的分支来报告。

从未生效的守卫:CSRF、限流,以及十条失灵的 CLI 命令

September 3, 2026 | v1.6.22
  • `sh0 push` 根本无法部署。十一条 CSRF 豁免规则写的是 `/api/v1/` 前缀,而 axum 早已把它剥掉,于是守卫匹配不到任何路径,`/apps/upload` 与 `/auth/logout` 一律返回 415。豁免规则现在匹配该层真正看到的路径;一次经由 `sh0 push` 的部署实测为 25.7 秒。
  • `sh0 login` 会以 `Unexpected response format` 失败。该命令仍在反序列化一个 API 不再返回的令牌——服务端改为设置 HttpOnly Cookie,只回传 CSRF 令牌。登录流程现在改为:认证、在启用时通过第二因素、铸造一枚 API 密钥并持久化;密钥名称包含用户、机器与日期。
  • 全局限流器完全失效,且该缺陷在修复前是在公开演示实例上实测出来的:1100 次读取、1100 次响应,没有一个 429,而对外宣称的是每分钟 1000 次读取、500 次写入。同一根因——该层挂在 `/api/v1` 嵌套之内,因此它的 `/api/v1/...` 路径从未匹配成功。这是一处安全修复。
  • 只有当请求来自回环地址或私有网段的对端时,`X-Forwarded-For` 才会被采信——sh0 自己拉起的 Caddy 子进程正属此列。兼容性提示:位于公网地址代理(Cloudflare 之类)之后的部署,由于没有已声明的代理列表,现在会把全部流量计入同一个桶。
  • 八条 `list` 命令是坏的——`database-servers`、`auth-servers`、`realtime-servers`、`function-servers`、`mail`、`file-storage`、`uptime` 和 `nodes` 全部死在 `Failed to parse paginated response` 上。`sh0 templates info` 与 `sh0 db connection-info` 则因服务端字段名漂移而失败。启动横幅此前还会在 macOS 上宣称 systemd,而安装器并不会注册这样的服务;现在它改称 launchd,并在服务器已由 LaunchAgent 托管时保持沉默。

在真机上跑完八个部署场景,撞出三堵墙

September 2, 2026 | v1.6.21
  • 这个版本出自一轮在真机上完整跑完的部署冒烟矩阵——八个场景,而非一次代码通读。六个通过:通用 Node、搭配 pnpm 的 Next、静态站点、任意 Dockerfile,以及 PostgreSQL 和 Redis 模板。两个失败并仍然未决:Laravel 和 docker-compose。
  • 假绿灯,三者中最严重的一个。健康检查探测的是 `docker-proxy`,而它无论容器本身是否健康都会完成 TCP 握手,于是一个已经死掉的应用被判定为健康。探针现在返回三值状态,由它的结论而非它的失败来决定判定。实测:一个没有 HEALTHCHECK、端口被故意写错的 `nginx:alpine`,现在会在 304,738 毫秒后判失败,而 v1.6.20 不到一分钟就判它为绿。
  • 静态站点:nginx 因 pidfile 反复崩溃重启。pidfile 迁到 `/tmp/nginx` 时,`chown` 没有跟着改。已修复,并补上一个逐条校验每个可写路径的测试——原有测试只查找 `chown` 这个子串,整个事故期间一直是绿的。
  • 手工填入的端口会静默覆盖镜像的 `EXPOSE`。未填端口时 sh0 现在会读取 `EXPOSE`,两者不一致时给出告警,五条部署路径均已覆盖。
  • pnpm。带构建脚本的依赖不再被构建,pnpm 的剪枝两次失败。验收标准已达成:`ts-nextjs-tailwind-starter` 在 211 秒内完成构建并返回 200。
  • 804 项测试通过,`clippy --workspace --all-targets -- -D warnings` 为绿。

保留策略不再动手动备份,外部恢复可直达独立数据库服务器

August 31, 2026 | v1.6.20
  • 保留策略不再动手动备份。计划只统计并清理自己创建的备份;凡是手动触发的备份,都因机制本身而免疫。迁移 057 将每份备份与其计划关联,且只在归属确定时才认领既有记录——若某数据源有多个计划,旧记录保持原样,而不是靠猜测归类。这正是 v1.6.19 中预告的引擎改动。
  • 计划弹窗会列出独立数据库服务器。此前数据库卡片会统计它们,选择列表却不显示,导致计数中可见的服务器无法被计划。现在两处显示同一批对象——应用数据库、内嵌数据库的服务,以及带「DB Server」标记的独立服务器——返回上一步也会回到正确的列表。
  • 外部恢复可以指向独立数据库服务器,可选整机或单库。整机恢复会保留目标上已有的数据库,即 v1.6.19 引入的保证。三种情况现在会给出明确拒绝,而不是无声失败:服务器没有正在运行的容器、数据库名以连字符开头、目标不存在。
  • 备份的恢复状态在其记录创建时即写入。此前外部恢复在首次更新之前状态为空——这一缺口自最初的插入逻辑起就存在,由新增测试暴露。计划编辑的提示也已翻译为面板的五种语言,不再显示原始键名。

恢复安全、数据行修复与一致的保留策略契约

August 30, 2026 | v1.6.19
  • 恢复整台 PostgreSQL 服务器的备份不再破坏目标。v1.6.18 的恢复会删除目标服务器上的所有数据库然后什么也不恢复——这是随 pg_dumpall 修复一起发布的回归。现在在恢复时过滤转储脚本:v1.6.18 已生成的归档仍可恢复。
  • MongoDB 备份带认证运行。mongodump 和 mongorestore 此前不带凭据启动:托管服务器的 MongoDB 备份从未成功生成过归档——每次尝试都死在认证墙上。密码现在通过容器的 exec 环境传递给工具。
  • CockroachDB 整机备份现在以明确的消息被拒绝,而不是假装可用。镜像不含 PostgreSQL 客户端工具,该功能无法工作;暗示相反的死代码分支已被移除。
  • 迁移 056 修复了早期版本损坏的备份行:被记录为归档的外部恢复(有路径无大小),以及被旧恢复路径卡在 restoring 状态的行。基于对全部版本历史测得的两条不变量,修复是安全的;无法归类的行保持原样并有文档说明。
  • 保留策略现在只有一个契约:处处默认 7,0 表示不限。此前表单默认 30 而 API 默认 7,且输入 0 会因为零是 falsy 而被悄悄变成 30。取值范围 0-365,面板五种语言的标签均已更新。
  • 保留策略统计同一数据源的所有备份——计划备份和手动备份一视同仁。文档曾承诺手动备份从不计入:这与引擎行为不符,文档现在如实说明实际发生的事。让手动备份免于清理是未来的引擎改动,另行跟踪。

备份保留策略与整服务器转储

August 20, 2026 | v1.6.18
  • 备份保留策略终于会真正运行。清理函数一直存在,却无处调用,自 v1.0.0 起从未执行过:面板上的「保留」字段不控制任何东西,仓库无限增长。现在它会在每次计划备份成功后运行,并为已经超量的仓库提供每小时一次的补扫。
  • 整个 PostgreSQL 服务器的备份现在包含您的数据。调度器把「postgres」当作数据库名传入,于是导出了空的引导数据库——归档格式正确、可还原,且是空的。整服务器备份现改用 pg_dumpall,还原也不再运行在单一事务中,因为创建数据库不允许这样做。
  • 整个 MySQL 服务器的备份终于能用了。它们从未真正运行过:调度器把「--all-databases」当作数据库名传入,校验因其开头的连字符而拒绝。与 PostgreSQL 的故障同因,症状相反——这一个是大声失败,而不是悄悄撒谎。
  • 面板此前显示「保留(天)」,而它一直是备份份数。已在面板的五种语言中更正。
  • 这两处修复由测试验证,尚未在真实服务器上验证。测试套件中没有任何一项接触真正的 PostgreSQL 实例:它们校验所构建的命令,从不校验其输出。在您自己的机器上跑过之前,请将本版本在整服务器转储方面视为「已修复但未经证实」。

托管数据库备份 —— 触发、计划与恢复

August 20, 2026 | v1.6.17
  • 在托管数据库服务器上创建的数据库现在可以备份:触发逻辑此前只查询独立数据库表,因此托管数据库会返回「找不到备份源」。已在真实服务器上验证,并打开了产物本身 —— 其中确实包含该表及其数据行。
  • 整台数据库服务器的备份终于可以恢复。触发接口接受了一种恢复路径并不认识的源类型,于是这类恢复请求先被接受、随后在后台失败;现在无效目标会被直接拒绝。
  • 外部恢复不再导致真实备份被清理。恢复记录此前与归档使用同一个「已完成」状态,保留策略把它计入数量,并为满足配额删除了真正的备份 —— 包括数据行与已存储的对象。备份与恢复操作现在是两类不同的记录。
  • 托管数据库可以加入备份计划,而不再只能按需备份。
  • 使用 Pipfile 的 Python 项目现在会把依赖打进生产镜像。这一点是通过打开构建出的镜像确认的,而不是依据一个正常的 HTTP 响应 —— 上一版修复通过了测试,交付的镜像里却仍然没有依赖。
  • 使用 pnpm 的项目重新可以构建:生成的镜像会安装与锁文件完全一致的 pnpm 版本,并运行在足够新的 Node 基础镜像上。仍有一种情况未解决 —— 依赖需要执行安装脚本的 pnpm 项目构建失败;修复进行中。

Git 部署构建修复 -- 包管理器、Django、健康检查

August 19, 2026 | v1.6.16
  • 使用 yarn 或 bun 的项目重新可以构建:生成的镜像会安装包管理器,而不是调用一个从未存在的命令。使用 pnpm 的项目仍然无法构建 —— 实机验证表明,Node 基础镜像版本过低,无法运行所下载的 pnpm 版本;已在 1.6.17 修复。
  • Django 部署在生产阶段运行 collectstatic,也就是依赖实际所在的位置 -- 此前该步骤静默失败,静态资源在运行时返回 500
  • 使用 Pipfile 的 Python 项目尚未修复:实机验证表明本版本中的修复并不完整 —— 依赖仍未进入最终镜像。已在 1.6.17 修复并在真实服务器上验证。
  • Alpine 镜像的健康检查探测 127.0.0.1 并回退到 IPv6 -- busybox wget 会优先解析 ::1,导致仅 IPv4 的服务器被判定为不健康并重启
  • Rust 项目使用当前工具链(rust:1-alpine)编译 -- 固定的 1.77 镜像连现代 Cargo.lock 都无法解析

告警与监控加固 -- RBAC、SSRF、认证服务器

July 24, 2026 | v1.6.15
  • 告警规则和通知渠道现在强制执行角色权限 -- 项目查看者不能再创建或编辑告警,也无法读取通知路由的密钥
  • 正常运行时间检查和告警检查已加固以防范 SSRF -- 出站请求不能再指向内部或私有地址
  • 通过在整个请求期间固定已解析的 IP 来封堵 DNS 重绑定,并且当其加固防 SSRF 的 HTTP 客户端无法构建时,监控现在会显式报错,而不是静默回退到不安全的客户端
  • 认证服务器(Logto)的置备现在只授予所需的角色,并在创建不完整时显式报错,而不是留下一个半创建的服务器却标记为就绪
  • 已移除失效的通知路由,并对告警和正常运行时间的配置输入进行更严格的校验

BaaS 服务修复 -- 密钥、域名与边缘函数

July 23, 2026 | v1.6.14
  • 数据库恢复现在会替换目标数据库,出错时原子回滚,不再将行静默合并到现有数据中
  • 实时服务器凭据仅返回给开发者及以上角色 -- 项目查看者不再获得连接密钥
  • realtime、auth 和函数服务器现在可通过其公共 *.sh0.app 域名访问
  • Deno 函数服务器可靠启动 -- 启动失败会立即报告,而不是显示虚假的运行状态
  • 函数服务器创建时即获得可用的公共域名和自动 HTTPS

容器运行时一致性 -- 可靠性修复

July 23, 2026 | v1.6.13
  • 外部恢复修复 -- 从外部目标(S3、R2)恢复备份时,现在能正确读取已上传的产物
  • 预览环境一致性 -- 预览容器现在以与生产环境相同的用户运行,需要较高权限的应用在预览中不再反复崩溃
  • 扩容一致性 -- 副本现在继承主容器的用户,镜像以 root 运行的应用在扩容时不再产生反复崩溃的副本
  • 模板修复 -- Garage、Logto 和 Plane 现在开箱即可正常启动

备份与存储加固

July 23, 2026 | v1.6.12
  • 备份恢复已修复 -- 通过控制台或 API 恢复数据库或卷备份现可正常完成
  • 备份访问控制 -- 列出、触发、下载、恢复和删除备份现在都需要相应的项目权限
  • 凭据保护 -- 文件存储接口不再返回共享的管理员凭据,备份目标仅限所有者管理
  • 范围受限的列表 -- 存储域名和访问密钥仅在自己的项目和实例内可见、可管理
  • 彻底清理 -- 删除备份会一并移除其存储的产物,删除文件存储实例会撤除其代理路由和 TLS 配置

部署可靠性 -- 后续修复

July 18, 2026 | v1.6.7
  • Git 部署可访问 -- 现在会记住应用检测到的端口,因此 Next.js、Django、FastAPI 和 Rust 项目无需手动配置即可在其预览 URL 上响应
  • 更清洁的 TLS -- 源服务器不再为 *.sh0.app 代理域名反复尝试无法获取的证书,从而释放共享证书配额
  • Plausible Analytics -- 模板现在会创建 PostgreSQL 角色和数据库,因此该套件能够正确启动
  • Zitadel -- 模板现在默认提供可用的登录界面
  • Convex -- 后端现在可以启动(在完成多端口支持前标记为实验性)
  • 更完善的清理 -- 失败的部署不再遗留孤立的容器或镜像

生产环境加固 —— 实时审计修复批次

July 17, 2026 | v1.6.6
  • 常见技术栈正确部署 —— 应用现在会收到真实的 Host 头,因此 WordPress、Laravel 和 Django 可在 *.sh0.app 域名后正常运行
  • 可靠的部署状态 —— 会检测到反复崩溃重启的容器并将其报告为失败,而不再显示为运行中
  • 准确的 SSL 指示 —— 域名显示其真实的证书状态,链接使用 HTTPS
  • 更安全的默认设置 —— 次要管理面板(数据库控制台、对象存储、身份提供商)默认不再公开暴露
  • Next.js 和 Rust —— 标准的 create-next-app 脚手架和真实的 Rust 项目现在无需手动配置即可部署
  • 模板目录修复 —— 修复了 Zitadel、Chatwoot、Langfuse、SurrealDB 和 Convex 的凭据处理;移除了上游镜像已不再可用的模板

sh0 Manager——在手机上管理机群

April 15, 2026 | v1.6.4
  • sh0 Manager 移动应用——在手机上管理你的全部 sh0 实例(iOS 与 Android)
  • 二维码认领流程——在控制面板扫码关联实例,令牌安全且有时效
  • 机群总览——一眼看到所有实例、在线状态、应用数量与套餐信息
  • Bearer 令牌认证——移动应用通过 Authorization 请求头使用基于会话的认证
  • 控制面板的 Manager 版块——生成认领令牌、查看实例信息、管理归属权

实时构建日志、上传时设置环境变量与可靠性改进

April 14, 2026 | v1.6.3
  • 实时构建日志——以自动滚动的视图实时观察 Docker 构建过程
  • 修复上传环境变量的竞态问题:环境变量在部署流程启动前原子写入
  • 构建超时放宽至 30 分钟——可容纳 Rust 等编译耗时较长的项目
  • 健康评分更准确:单条规则的扣分设上限,安全规则不再阻断部署
  • 0cron.dev 成功部署于 sh0(Rust 后端 + SvelteKit 前端)——首个真实的 Rust 应用
  • 消除心跳日志噪声:例行日志降为调试级别,仅在 IP 变化时记录信息级日志

预览域名——为每个应用提供即时 URL

April 13, 2026 | v1.6.2
  • 每个 sh0 实例启动时自动向云代理注册,无需任何配置
  • 扁平子域名格式:undefined-undefined.sh0.app——单张通配证书即可支撑十万以上的安装量
  • 预览域名反向代理:由 Axum 中间件把流量转发到对应的 Docker 容器
  • 无需任何 Cloudflare DNS 记录——*.sh0.app 通配符已覆盖全部情形
  • 控制面板为所有预览域名显示「预览」标记和可点击的 HTTPS 链接
  • 免费版即可使用——预览域名不需要许可证

第一轮质量检查:缺陷修复与细节打磨

April 12, 2026 | v1.6.1
  • 修复 HTTPS 已启用时 SSL 状态标记仍显示「待处理」的问题
  • 邮件 DNS:PTR 记录改为可选(共享 IP 无法设置反向 DNS)
  • 邮件 URL:移除随机 Docker 端口,改为经 Caddy 代理的规范 HTTPS 地址
  • 为邮件主机名增加 cPanel 风格的 /webmail 与 /admin 跳转
  • 修复邮件队列标签页导致浏览器无限刷新的问题
  • 邮件管理凭据现显示在概览标签页,并可切换显示或隐藏
  • 定时任务:自动剥离命令中的 shell 重定向(> /dev/null 2>&1)
  • 定时任务执行历史现展示标准输出与错误输出,并可展开查看
  • 手动触发定时任务:改为带轮询的实时窗口,不再只有一条无声提示
  • 修复认证服务器:使用正确的 Docker 镜像(svhd/logto)、正确的入口点,并在首次启动时初始化数据库
  • 认证、实时与函数服务:空状态补充功能说明与前置条件
  • 内部错误现返回真实信息(自托管产品,使用者即管理员)
  • 设置中新增主机终端与文件浏览器,可直接访问服务器
  • 函数服务器与实时服务器详情页新增「文件」和「卷」标签页
  • 修复 service_id 的域名约束(迁移 049)
  • 新增 475 个国际化键,官网 4 个页面迁移至 Paraglide

安全、完善与功能完整

April 11, 2026 | v1.6.0
  • 邮件增强功能:垃圾邮件过滤配置、假期自动回复、Sieve 过滤规则、邮件队列监控
  • DKIM 密钥轮换和邮件服务器容器日志流
  • 许可证门控:所有 BaaS 服务限制为 Pro+,12 个页面添加升级提示弹窗
  • Trustpilot 评价集成,在所有仪表板页面显示为固定标签
  • 仪表板首页新增 BaaS 快速统计
  • 8 个新的 SEO 替代方案页面:Vercel、Supabase、Firebase、Netlify、cPanel、Render、Railway、Fly.io
  • 首页重新设计,新增 BaaS 主图、能力展示区和定价条
  • 定价页功能对比矩阵,含 27 行
  • 投资者关系页面,含白皮书和演示文稿 PDF
  • AI 系统提示词更新,涵盖当前功能和能力
  • SEO 页面新增 979 个 i18n 键,支持 5 种语言
  • 5 项关键安全修复:Sieve 注入、假期自动回复数据丢失、MCP 范围绕过(涉及 92 个工具)、备份路径遍历、Cloudflare 状态覆写
  • 10 项重要安全修复:输入验证、DNS 清理、沙箱目标验证、CLI 确认提示

文件存储、数据库服务器与邮件

April 2026 | v1.5.0
  • 基于 MinIO 的托管 S3 兼容对象存储——存储桶、访问密钥、用量监控
  • 独立数据库服务器:PostgreSQL、MySQL、MariaDB、MongoDB、Redis,含用户管理和权限授予
  • 基于 Stalwart 的托管邮件服务,自动配置 DKIM、SPF 和 DMARC
  • 4 步 DNS 设置向导,支持 Cloudflare 自动配置
  • 邮箱、别名、全域收信规则和送达率监控
  • 数据库管理界面集成:dbGate、phpMyAdmin、Mongo Express
  • 外部数据库访问,支持 IP 白名单实现安全远程连接
  • 全局域名页面:集中查看所有应用的服务 URL
  • 文件存储、数据库服务器和邮件新增 50+ 个 API 端点
  • 开箱即用,支持 AWS SDK、Laravel、WordPress 及任何 S3 兼容客户端

核心基础设施

March 12, 2026 | Phases 1-6
  • Cargo workspace,10 个 Rust crate,共享依赖管理
  • sh0-db:SQLite WAL 模式,r2d2 连接池,30 次迁移
  • sh0-docker:通过 Unix socket 的完整 Docker Engine API 客户端(hyper 1.x)
  • sh0-api:Axum REST 服务器,CRUD、分页、WebSocket 日志流
  • sh0-git:Git clone/pull (libgit2),GitHub/GitLab/Bitbucket Webhook 解析及 HMAC-SHA256
  • sh0-builder:19 种技术栈检测器,15 个 Dockerfile 模板,多阶段构建
  • 代码健康检查引擎:8 个类别中的 34 条纯 Rust 规则

反向代理与完整部署流水线

March 12, 2026 | Phases 7-8
  • sh0-proxy:Caddy 子进程管理及 JSON admin API
  • 通过 Let's Encrypt 自动 SSL,可配置 ACME 邮箱
  • 端到端部署流水线:git pull -> 分析 -> 构建 -> 部署 -> 健康检查 -> 路由
  • 蓝绿容器切换,零停机部署
  • Docker 清理系统:悬空镜像、旧应用镜像、构建缓存清理
  • 部署前磁盘空间检查(>90% 失败,>80% 警告)
  • 通过缓存镜像复用进行回滚

认证与监控

March 12, 2026 | Phases 9-10
  • Argon2id 密码哈希,HS256 JWT(1 小时访问令牌 + 30 天刷新令牌轮换)
  • TOTP 双因素认证,哈希备用码和配置 URI
  • API 密钥系统:SHA-256 哈希,sh0_ 前缀,常量时间比较
  • AES-256-GCM 主加密密钥(PBKDF2,100K 次迭代)
  • 实时指标采集:每容器 CPU、内存、网络 I/O
  • 告警评估:high_cpu、high_memory、app_down,5 分钟冷却期

备份引擎与控制台

March 12, 2026 | Phases 11-12
  • 通过 Docker exec 进行数据库转储:pg_dump、mysqldump、mongodump
  • 卷备份(tar + gzip),AES-256-GCM 加密
  • 基于 cron 的定时备份及保留策略清理
  • SvelteKit 2 + Svelte 5 runes SPA + TailwindCSS 4
  • 明暗主题,5 种语言 i18n(EN、FR、ES、PT、SW)
  • API 客户端自动 Bearer 令牌,WebSocket 自动重连
  • 控制台通过 include_dir + build.rs 嵌入 Rust 二进制文件

控制台核心与扩展页面

March 12, 2026 | Phases 13-14
  • 应用详情页,6 标签布局:概览、部署、日志、域名、环境变量、设置
  • 实时日志查看器:WebSocket,终端风格,自动滚动,1000 行缓冲
  • 环境变量编辑器,AES-256-GCM 加密/显示切换
  • 数据库管理页面,引擎选择器(postgres、mysql、mongodb、redis、mariadb)
  • 备份管理器:触发、恢复、删除、cron 调度创建
  • 监控页面:CPU/内存仪表盘、告警 CRUD、自动刷新
  • 设置:服务器信息、TOTP 双因素认证设置/禁用、API 密钥管理

CLI、模板、告警与 Compose

March 12, 2026 | Phases 15-18
  • CLI 客户端:7 条命令(apps、deploy、logs、env、check、ssh、status)
  • 本地代码健康检查,通过 sh0 check 执行,彩色终端输出
  • 170 个一键 YAML 模板,涵盖 15 个类别(从 WordPress 到 Ollama)
  • 变量替换引擎,自动生成密钥/密码
  • 5 种告警分发渠道:邮件 (SMTP)、Slack、Discord、Telegram、Webhook
  • Docker Compose v3 解析器,支持多服务部署

RBAC、导出、定时任务、预览与钩子

March 12, 2026 | Phases 19-23
  • 4 级 RBAC:Owner > Admin > Developer > Viewer(全局 + 项目范围)
  • 所有处理器的审计日志(异步即发即忘)
  • 7 种导出格式:Docker Compose、Kubernetes、AWS ECS、GCP Cloud Run、Vercel、Railway、Render
  • 定时任务调度器,基于 tick 执行,stdout/stderr 捕获,运行历史
  • 预览环境:基于 PR 的自动部署,唯一子域名,TTL 自动清理
  • 部署钩子:pre_build、post_build、pre_deploy、post_deploy,超时强制
  • sh0.yaml 基础设施即代码:用一个文件定义整个技术栈

伸缩与正常运行时间监控

March 12, 2026 | Phases 24-25
  • 水平伸缩:1-50 个副本,负载均衡(round_robin、least_conn、random)
  • 基于 CPU/内存阈值的自动伸缩,可配置冷却期
  • 正常运行时间监控:HTTP 健康检查及事件检测与生命周期
  • 公共状态页面,每域名的正常运行时间历史
  • 状态页面通知的邮件订阅系统

发现并修复 51 个问题

March 12, 2026 | Security Audits
  • 2 次全面安全审计,覆盖所有 25 个阶段
  • 13 项严重修复:常量时间 API 密钥比较、WebSocket JWT 认证、备用码哈希、每应用部署锁
  • 20 项高危修复:域名验证、路径遍历防护、构建日志中的密钥脱敏、URL 编码的 Docker 参数
  • JWT 过期时间缩短(7 天 -> 1 小时),30 天刷新令牌轮换
  • CSRF 防护(Content-Type 强制 + 双重提交模式)
  • 速率限制:登录 (10/15分钟)、TOTP (5/5分钟)、全局 (1000/500秒)
  • 安全头:HSTS、CSP、X-Frame-Options、X-Content-Type-Options

基于栈的架构与细节打磨

March 13-16, 2026 | Dashboard Redesign
  • 56px 图标侧边栏带提示 + 240px 上下文侧边栏用于项目浏览
  • 基于栈的架构:按项目分组服务(前端 + 后端 + 数据库 + 缓存)
  • Deploy Hub:统一向导,183 种部署选项,类别标签,精选区域
  • 7 个部署表单组件:FormGit、FormUpload、FormDockerImage、FormDockerfile、FormCompose、FormService、FormFramework
  • Cmd+K 命令面板:即时搜索页面、栈和服务
  • 移动端响应式上下文侧边栏,抽屉 + 汉堡按钮
  • 首页重新设计,服务器统计、栈网格、快捷操作
  • 16 标签页应用详情视图:概览、部署、日志、终端、文件、存储、域名与 SSL、环境变量、重定向、预览、钩子、伸缩、正常运行时间、定时任务、服务、设置

Docker 镜像、Dockerfile、ZIP 与 PHP/Ruby/.NET

March 14, 2026 | Deploy Features
  • Docker 镜像直接部署:拉取镜像,跳过 git/构建流水线
  • 仅 Dockerfile 部署:粘贴内容,本地构建
  • ZIP 文件上传部署,500MB 限制,防路径遍历
  • 新增 PHP、Ruby 和 .NET Dockerfile 模板
  • 应用名称按项目范围限定(复合唯一索引)
  • 容器命名带项目前缀:sh0-undefined-undefined
  • 45 项新测试(伸缩、compose、YAML)

模板、终端、文件浏览器、卷

March 15, 2026 | Deploy Hub & Services
  • Deploy Hub 页面,183 种部署目录选项
  • 部署进度条,日志中的步骤跟踪
  • 170 个模板:数据库 (33)、CMS (18)、分析 (7)、认证 (6)、AI/ML (8)、开发工具 (12) 等
  • 子服务管理(MySQL、phpMyAdmin、dbGate 容器)
  • 服务访问 URL:内部/本地/外部端点,支持外部切换
  • Web 终端:xterm.js,Shell 选择器(sh/bash/ash),SSH TTY 支持
  • 文件浏览器:Docker Desktop 风格的双面板资源管理器,内联编辑器
  • 持久存储:Docker 卷管理、绑定挂载、文件挂载
  • API 文档页面配实时调试台(26 个端点分组)

连接 URL、凭证、批量环境变量

March 16, 2026 | Database & Credentials
  • 数据库连接 URL:内部和外部,从容器配置自动计算
  • 数据库凭证卡:用户名、密码、连接字符串
  • 环境变量批量操作及 .env 编辑器模式
  • 模板凭证持久化(环境变量存储在数据库中)

SSL 证书、Caddy 可靠性、存储提供商

March 17-18, 2026 | Enterprise & Security Hardening
  • HTTP-only Cookie 迁移,CSRF 双重提交模式(SameSite=Strict)
  • 主密钥自动生成(首次运行时从 JWT 密钥派生)
  • 自定义 SSL 证书:CSR 生成 (rcgen)、PEM 上传 (x509-parser)、每域名 ssl_mode
  • 私钥加密 (AES-256-GCM),受限文件权限 (0o600)
  • Caddy 代理可靠性:终止过期进程、重试配置加载、数据库路由同步
  • 通过 OpenDAL 支持 13 个存储提供商:S3、R2、Wasabi、Backblaze B2、SFTP、FTP/FTPS、Dropbox、Google Drive 等
  • FTP/FTPS IPv6 修复(EPSV 模式,直接 suppaftp 客户端)
  • 计划/定价对齐:Free ($0)、Pro ($19/月)、Business ($97/月)

CronBuilder、重定向、备份恢复、监控重构

March 19, 2026 | Monitoring & Automation
  • CronBuilder 组件,18 个预设,双向同步
  • URL 重定向规则:精确、前缀、正则匹配,301/302/307/308 状态码
  • 备份恢复:流程 A(sh0 备份)和流程 B(外部源上传)
  • 监控页面重构:4 标签控制台(概览、应用、正常运行时间、告警)
  • 健康检查误报减少(80+ 新测试,跳过环境/锁/文档文件)
  • DNS 配置模态框,显示真实服务器 IP 和 Cloudflare 指引
  • ACME 邮箱配置(存储在数据库中,运行时更新)

多服务器 BYOS

March 20-21, 2026 | Phase 29
  • 通过 SSH 隧道管理 (russh) 注册远程节点
  • SSH TOFU(首次使用信任),主机密钥指纹验证
  • 通过 SSH 隧道进行 Docker 镜像传输(save/load)
  • 节点感知的部署流水线,将构建分发到远程服务器
  • 节点管理控制台,状态指示器和健康监控
  • 节点加固:错误处理、连接验证、优雅清理

MCP 服务器与 AI 助手

March 22-25, 2026 | AI Phases 1-5
  • MCP 服务器,103 个工具:在 /mcp 上的 Streamable HTTP 传输(JSON-RPC 2.0)
  • 通过 utoipa 的 x-mcp-* 扩展实现 OpenAPI 驱动的工具生成
  • 三层安全:API 密钥作用域(read/standard/admin)、每工具风险分类、销毁操作的确认令牌
  • AI 网关:三路聊天路由(MCP 连接器、传统模式、文档专家)
  • AI 沙箱:Alpine 3.19 sidecar 容器,每应用独立,root Shell,可安装包,可写卷
  • Claude MCP Connector 集成,用于服务端 Agent 工具执行
  • 控制台 AI 聊天,支持模型选择、对话历史、处理步骤时间线
  • 功能模态框:5 个类别的 24 项能力,支持 5 种语言翻译
  • 预付费钱包计费,按 Token 定价(Haiku、Sonnet、Opus)
  • Business 计划支持 BYOK(Anthropic 或 OpenRouter API 密钥)
  • 5 个阶段中的 10 轮审计——0 个严重问题进入生产

免费版、Docker 与分发

March 26 - April 1, 2026 | v1.4.1 - v1.4.6
  • 备份功能向免费版开放(本地存储);云存储仅限 Pro+ 版本
  • Docker 镜像发布至 Docker Hub (zerosuiteinc/sh0) 和 GHCR
  • 自更新系统:sh0 update 从 GitHub Releases 检查并就地升级
  • Linux 上自动设置 systemd 服务(sh0 serve 安装并启用服务单元)
  • 将整页升级拦截替换为监控、备份、团队页面中的内联横幅
  • 许可证功能矩阵优化:精细化备份(本地/云端)和监控(指标/告警/可用性)
  • 卸载命令:sh0 uninstall 完全移除二进制文件、systemd 单元和数据
  • 启动横幅显示版本、仪表板 URL 和 systemd 提示

v1.0.0 中的所有内容

部署引擎

  • 5 条部署流水线:Git、Docker 镜像、Dockerfile、ZIP 上传、模板/Compose
  • 19 种技术栈自动检测,15 个优化的 Dockerfile 模板
  • 蓝绿部署,零停机切换与回滚
  • Deploy Hub 中的 183 种部署选项
  • Docker Compose v3 解析器,支持多服务部署

模板商店

  • 170 个一键模板,涵盖 15 个类别
  • 数据库、CMS、AI/ML、开发工具、分析、认证、邮件、队列、搜索
  • 变量替换与自动生成(密钥、密码)
  • 多服务部署,支持拓扑排序

域名与 SSL

  • 通过 Let's Encrypt 和 Caddy ACME 自动 SSL
  • 自定义 SSL 证书上传及 CSR 生成
  • URL 重定向规则(前缀、精确、正则)
  • 负载均衡:round_robin、least_conn、random

监控与告警

  • 实时 CPU、内存、网络指标及迷你图表
  • 5 种告警渠道:邮件、Slack、Discord、Telegram、Webhook
  • 正常运行时间监控及公共状态页面
  • 基于 CPU/内存阈值的自动伸缩(1-50 个副本)

备份与存储

  • 数据库转储(pg_dump、mysqldump、mongodump)+ 卷备份
  • AES-256-GCM 加密,支持基于 cron 的定时备份
  • 通过 OpenDAL 支持 13 个存储提供商(S3、R2、SFTP、Dropbox、Google Drive)
  • 从备份或外部存储恢复

安全

  • 2 次审计中发现并修复了 51 个安全问题
  • Argon2id 密码哈希、JWT + 刷新令牌轮换、TOTP 双因素认证、Google OAuth
  • AES-256-GCM 加密所有密钥(环境变量、令牌、密钥)
  • CSRF、SSRF 防护,速率限制,容器加固

开发者体验

  • 基于浏览器的终端 (xterm.js),支持 Shell 选择
  • 文件浏览器,支持内联编辑、创建目录、删除
  • 代码健康检查:每次构建前扫描 34+ 条规则
  • 导出至 7 个平台:K8s、AWS、GCP、Vercel、Railway、Render、Compose

控制台

  • 22 个页面,70+ 组件,16 标签页应用详情视图
  • Cmd+K 命令面板,明暗主题,5 种语言
  • 基于栈的架构,双侧边栏
  • API 文档配实时调试台(26 个端点分组)

自动化

  • 定时任务,配合 CronBuilder(18 个预设,每应用 50 个任务)
  • 部署钩子:pre_build、post_build、pre_deploy、post_deploy
  • 通过 PR Webhook 创建预览环境,支持 TTL 自动清理
  • 通过 sh0.yaml 实现基础设施即代码

团队与 RBAC

  • 4 级角色:Owner、Admin、Developer、Viewer
  • 项目范围的访问控制
  • 所有操作的审计日志
  • 许可证体系:Free、Pro ($19/月)、Business ($97/月)

AI 助手

  • MCP 服务器,103 个工具(37 个读取、44 个写入、16 个破坏性、5 个沙箱、1 个确认)
  • AI 沙箱:每个应用独立的 Alpine 容器,用于调试和开发
  • 可从 Claude Desktop、Cursor 或任何 MCP 客户端连接
  • AI 网关,支持 Web 聊天、模型选择、对话历史
  • 预付费钱包,Business 计划支持 BYOK 选项

数据一览

10

Rust crate

52

迁移

230+

API 端点

22

控制台页面

70+

UI 组件

6

语言

170

部署模板

103

MCP 工具

34+

健康规则

7

导出格式

13

存储提供商

5

告警渠道

1300+

测试通过

v0.1.0-alpha 已弃用 2025

旧版原型 (Python/FastAPI)

最初的 sh0,用 Python 构建。基于 Agent 的架构,具备技术栈检测、健康检查和 Dockerfile 生成。作为 Rust 重写的蓝图。

为什么选择 Rust? 用 Rust 重写的原因:约 30MB 空闲内存(对比 Python 约 500MB),单一二进制文件分发,直接 Docker socket API(无需 CLI 调用),高负载下零 GC 暂停。

准备好部署了吗?

60 秒内安装 sh0,部署您的第一个应用。