- 新增 chi 路由示例并更新依赖 - 用简单 CI 实践笔记替换 Polaris 部署笔记 - 添加本地 Gitea 与 runner 配置示例,注册令牌从环境变量读取
89 lines
4.4 KiB
YAML
89 lines
4.4 KiB
YAML
# 本地单机 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:
|