feat: 添加 chi 练习与 Gitea CI 实践
- 新增 chi 路由示例并更新依赖 - 用简单 CI 实践笔记替换 Polaris 部署笔记 - 添加本地 Gitea 与 runner 配置示例,注册令牌从环境变量读取
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# 本地单机 Gitea + runner(DinD)测试环境,仅用于本机可信代码测试。
|
||||
# 配套笔记:上级目录《Gitea 简单 CI 实践》——让其中的 demo workflow
|
||||
# (runs-on: demo-ci、checkout@v4、Node 22)不依赖云服务器即可本机跑通。
|
||||
#
|
||||
# ── 使用步骤(命令均从仓库根目录执行;若已 cd 进本目录,可去掉 -f 直接 `docker compose up -d`)──
|
||||
#
|
||||
# 1. 生成并导出注册令牌(只放在当前 shell 里,切勿写进仓库或 .env 文件):
|
||||
# export GITEA_RUNNER_REGISTRATION_TOKEN="$(openssl rand -hex 32)"
|
||||
# Gitea >= 1.23:在 Gitea 首次初始化(完成安装向导)之前设置该变量,
|
||||
# 它会被固定为 runner 注册令牌;实例已初始化后再设置不会改变令牌,
|
||||
# 此时以 管理后台/仓库 → Actions → Runners 页面显示的令牌为准。
|
||||
#
|
||||
# 2. 启动(首次运行会拉取两个镜像):
|
||||
# docker compose -f note/资源/DevOps/Gitea/local-ci/compose.yaml up -d
|
||||
#
|
||||
# 3. 打开 http://localhost:3000 完成首次安装(数据库保持默认 SQLite 即可)。
|
||||
# 若 runner 早于安装完成启动,注册会失败并按 restart 策略自动重试,
|
||||
# 安装完成后无需手动干预,稍等即可看到 runner 在线。
|
||||
#
|
||||
# 4. 注册/登录 → 新建仓库 → 仓库 设置 → Actions 启用;
|
||||
# 按《Gitea 简单 CI 实践》加入 demo.js、demo.test.js 与
|
||||
# .gitea/workflows/ci.yml。本机 git 克隆/推送走 HTTP 协议:
|
||||
# git clone http://localhost:3000/<owner>/<repo>.git
|
||||
#
|
||||
# 5. 仓库 Actions 页查看 run;需要排查 runner 时:
|
||||
# docker compose -f note/资源/DevOps/Gitea/local-ci/compose.yaml logs runner
|
||||
#
|
||||
# 6. 账号、仓库、runner 注册与镜像缓存在三个命名卷里,保留卷即保留数据;
|
||||
# 彻底重来:docker compose -f note/资源/DevOps/Gitea/local-ci/compose.yaml down -v
|
||||
#
|
||||
# ── 安全提醒 ──
|
||||
# runner 容器 privileged: true(DinD 必需),权限等同宿主 root;
|
||||
# 本文件只用于本机可信仓库的本地测试,勿用于不可信仓库或对外提供服务。
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: docker.gitea.com/gitea:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# 单机演示固定 SQLite,数据随 gitea-data 卷持久化
|
||||
GITEA__database__DB_TYPE: sqlite3
|
||||
# 页面/克隆地址显示为 localhost,方便本机浏览器与 git 客户端
|
||||
GITEA__server__ROOT_URL: http://localhost:3000/
|
||||
# 与 runner 用同一个固定注册令牌(含义见文件头第 1 步)
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN: "${GITEA_RUNNER_REGISTRATION_TOKEN:?set GITEA_RUNNER_REGISTRATION_TOKEN}"
|
||||
ports:
|
||||
# 只绑定回环地址,不暴露到局域网;git 走 HTTP,无需映射 SSH 端口
|
||||
- "127.0.0.1:3000:3000"
|
||||
volumes:
|
||||
- gitea-data:/data
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 12
|
||||
start_period: 30s
|
||||
|
||||
runner:
|
||||
image: docker.io/gitea/runner:3-dind
|
||||
restart: unless-stopped
|
||||
# DinD:job 容器跑在 runner 内部的嵌套 Docker daemon 里,需要 privileged
|
||||
privileged: true
|
||||
depends_on:
|
||||
gitea:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
CONFIG_FILE: /config.yaml
|
||||
# 注册与克隆都发生在 runner 容器自身,它在 compose 网络内可直连 gitea 服务
|
||||
GITEA_INSTANCE_URL: http://gitea:3000
|
||||
GITEA_RUNNER_NAME: local-demo
|
||||
# 与 demo workflow 的 runs-on: demo-ci 一致;node:22-bookworm 提供 Node 22
|
||||
GITEA_RUNNER_LABELS: demo-ci:docker://node:22-bookworm
|
||||
GITEA_RUNNER_REGISTRATION_TOKEN: "${GITEA_RUNNER_REGISTRATION_TOKEN:?set GITEA_RUNNER_REGISTRATION_TOKEN}"
|
||||
volumes:
|
||||
- ./runner-config.yaml:/config.yaml:ro
|
||||
# runner 状态(含 .runner 注册文件)
|
||||
- runner-data:/data
|
||||
# 嵌套 dockerd 的镜像与构建缓存
|
||||
- runner-docker:/var/lib/docker
|
||||
# DinD 默认给 job 建独立网络;checkout 的 git fetch 会访问 http://gitea:3000,
|
||||
# job 若无法解析 gitea 就会失败,即使 runner 容器能解析也没用。
|
||||
# runner-config.yaml 设置 container.network: host,使 job 共用 runner 容器的
|
||||
# 网络命名空间(不是宿主机网络);隔离性随之降低,仅限本地可信测试。
|
||||
|
||||
volumes:
|
||||
gitea-data:
|
||||
runner-data:
|
||||
runner-docker:
|
||||
Reference in New Issue
Block a user