Files
demo/README.md
T
2026-10-09 02:39:17 +00:00

47 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Demo
最小 Go HTTP 服务,源码入口 `src/`,项目根为 Git 仓库边界。公开源码仓库为 `https://git.dever.cc/shemic/demo`,仅使用 Go 标准库。
## 开发与正式运行
| 环境 | 常驻容器 | 端口 | 域名 | 运行方式 |
| --- | --- | --- | --- | --- |
| 开发 | `platform-dev/dev` | 18080 | `demo-test.5dev.cn` | Supervisor 管理 `go run .` |
| 正式 | `platform-release/release` | 28080 | `demo.5dev.cn` | Supervisor 管理已发布的二进制 |
两个环境都按项目共享容器,不再为 Demo 单独保留运行 Deployment。正式端口等于开发端口加 10000;开发范围 18000–18999,正式范围 28000–28999。Service/Ingress 仍归各项目自身;正式入口配置在 `config/prod/`,选择共享 release 并转发到 28080。
`GET /` 返回 `hello world` 和换行;未知路径 404,不支持的方法 405,`HEAD /` 无响应体。程序从 `PORT` 读取监听端口。入口不叠加平台登录,鉴权由项目自行实现。
## 日常操作
```bash
kubectl exec -n platform-dev deployment/dev -c dev -- sh -c 'cd /dm/service/project/demo/src && go fmt ./... && go test ./... && go vet ./...'
kubectl exec -n platform-dev deployment/dev -c dev -- supervisorctl -c /etc/supervisor/supervisord.conf restart demo
kubectl exec -n platform-release deployment/release -c release -- supervisorctl -c /etc/supervisor/supervisord.conf status demo
```
正常发布通过 Actions,而不是手动复制开发目录中的可执行文件。需要运维重启时,将最后一条命令的 `status demo` 改为 `restart demo`,只重启该项目,不重建整个 release Pod。日志为相应容器内的 `/work/log/demo.log`。
## CI/CD
- `.gitea/workflows/ci.yaml`:推送 main 或手动触发,固定提交清洁检出,运行格式检查、`go test`、`go vet` 和编译;不发布生产。
- `.gitea/workflows/release.yaml`:手动选择 Git ref 和 `operation=release`,构建版本化二进制,不再为项目推送运行镜像。
- 发布配置在 `config/prod/release.json`,流水线校验项目名、开发/正式端口对应关系与当前开发配置,并拒绝与其他已发布项目冲突的正式端口。
- 候选二进制先在临时 Job 中使用实际 release 基础镜像运行并验证 HTTP,再原子切换该项目的 `current`,仅重启其 Supervisor 进程,验证内部 HTTP 与正式 HTTPS。
- `operation=rollback` 配合 `target_revision=<完整40位提交>`,只能回退到曾通过验证的二进制版本。复用校验过的产物,不重新编译。失败发布会尝试恢复之前的项目版本,并保留失败记录。
- 二进制归档为 `/dm/service/platform/release/artifacts/demo/<commit>/app`、`app.sha256`、`release.json`;正式运行副本为 `/dm/runtime/platform/release/programs/demo/versions/<commit>/`,`current` 指向选定版本。它们不进入源码 Git。
- 2026-10-09 切换前的旧项目镜像仍保留在 `images/`,仅用于历史恢复。新流水线的回退目标是新二进制发行,不把旧镜像记录冒充新发行。
项目已有的 package-write Actions Secret 不再被工作流引用;当前构建和发布不需要镜像仓库写凭据。平台基础镜像只在工具链或运行环境变化时重建,并固定 digest。
## 边界
复用 `platform-ci/runner`,标签为 `go-build`、`release-deploy`。Runner 注册到可信的 `shemic` 组织,并发为 1;不为新项目常驻新的 Runner。不要给不可信贡献者工作流修改或生产发布权限,不启用外部 fork/PR 自动执行。
构建 Pod 不挂 Kubernetes 令牌和正式运行目录;部署 Pod 可以写共享程序目录并 exec 到共享 release,因此是可信平台发布权限,而不是项目间安全隔离。release 不挂源码、开发缓存、集群令牌或宿主机 socket,程序目录只读;整个 release Pod 重启影响其中所有项目。
新增项目只需自己的源码、工作流、端口/健康检查配置及 Service/Ingress,不增加项目运行 Deployment。首次新增入口仍需经过平台授权部署,发布流水线本身不修改集群入口。
2026-10-09 已实测共享运行方案:Actions #8 的 CI 与 #9 的首次二进制发布均通过,正式域名在原独立 Demo Pod 停止后仍返回 `hello world`;运行程序位于共享 release 的 28080 端口,dev 保持原样。各次后续发布与回退结果以 Actions 和对应发行记录为准。