Files
demo/README.md
T
2026-10-09 01:14:52 +00:00

45 lines
4.2 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 标准库,不引入业务框架。
2026-10-08(UTC)已部署到共享 dev,`https://demo-test.5dev.cn` 无需登录即可返回 `hello world`。真实 HTTP、源码同步、单服务重启、停止释放端口及 dev Pod 重建恢复均已验证;没有构建或发布业务生产镜像。
## 行为
- `GET /` 返回 `hello world` 和换行,Content-Type 为 `text/plain; charset=utf-8`。
- 其他路径返回 404,不支持的方法返回 405;`HEAD /` 使用 HTTP 标准行为。
- 程序读取 `PORT`,开发配置固定为 `18080`,未提供时使用 `8080`;非法端口启动失败。
- Supervisor 程序名为 `demo`,日志是 dev 内 `/work/log/demo.log`。
## 开发
```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
```
当前没有额外测试框架,`go test` 的包检查不能替代真实 HTTP 请求验证。源码修改不构建镜像;普通依赖在 dev 内按兼容 Go 1.25 的固定版本添加,检查 `go.mod`、`go.sum` 的变化。
## 开发入口
`demo-test.5dev.cn` 复用现有 Caddy、Traefik 和 `*.5dev.cn` 证书。`config/dev/` 管理 Service、Ingress;Service `demo-dev:80` 指向共享 dev 的 `18080` 端口。
平台入口不叠加统一登录,登录和鉴权由项目自行实现;后续 project 项目也遵循此约定。Demo 没有应用认证,因此可公开访问。初次部署使用的 BasicAuth Middleware、专用 Secret 和生成的凭据文件已按用户要求移除。
开发 Service 不用于生产。正式环境使用独立的 `project-demo/demo` Deployment,通过 `demo.5dev.cn` 访问;实际发布结果以 Actions 和 `images/<完整提交>.json` 为准。
## CI/CD
- `.gitea/workflows/ci.yaml`:推送到 `main` 后自动检查格式、执行 `go test`、`go vet` 并编译;不推镜像、不发布生产。也可手动执行检查。
- `.gitea/workflows/release.yaml`:只接受手动触发。选择明确 Git 分支或标签,`operation=release`,流水线检出该次事件的完整 commit 后测试、构建、推送私有镜像、验证真实运行镜像,再发布生产并检查公网 HTTPS。
- `operation=rollback` 时,`target_revision` 必须填写曾经成功发布的完整 40 位 commit。回退复用已有镜像摘要和校验过的归档,不重新编译;仍执行运行镜像与正式 HTTPS 检查。
- 镜像为 `git.dever.cc/demo-ci/demo:<完整提交>`,实际 Deployment 固定 `@sha256`,不用 `latest`。二进制在隔离 BuildKit 容器里用 Go 1.25.14 编译,运行层是非 root 的 scratch 镜像,不含编译器、Supervisor 或项目源码。
- 发布阶段失败会尝试恢复之前的 Demo 镜像和副本数,并在 Actions 中报失败,不把自动回退当作发布成功。首次发布失败恢复未启动状态。
- `images/<完整提交>.tar`、`.tar.sha256`、`.json` 是正式发行归档,Git 忽略整个 `images/`。源码、Git、配置与归档保留;临时 CI 工作目录和验证 Job 会清理。
`config/namespace.yaml` 和 `config/prod/` 保存生产拓扑和首次验证通过的镜像基线。当前生产镜像与副本数由发布流程管理;不要直接重套基线配置覆盖正在运行的版本。更新平台拓扑前需保留当前固定镜像摘要和副本数,审查差异后再应用;日常发布和回退使用 Actions。
Runner、工具镜像、缓存和角色配置归 `/dm/service/platform/ci/`。Runner 仅接受本仓库任务、并发为 1;构建 Pod 不挂 Kubernetes 令牌,部署 Pod 的生产权限仅能读取和更新本项目的 `demo` Deployment。只有可信仓库维护者可以修改工作流或触发发布,不接收外部 fork/PR 的自动任务。
2026-10-09 首次自动 CI 和手动发布已通过,开发与正式域名均已实际返回 `hello world`。后续添加依赖时,将 `go.mod`、`go.sum` 一起提交;构建的下载、测试和编译步骤复用同一模块缓存,不把缓存内容提交到 Git。