chore(infra): 新增 Gitea+Jenkins CI/CD 部署与凭据整改

- infra/cicd:docker-compose(gitea/jenkins)、JCasC(凭据统一 ${ENV} 注入,无硬编码)、
  备份/恢复、健康检查、凭据轮换与 git 历史清除脚本
- docs/deployment/cicd:安装、高可用备份监控、凭据事故复盘
- .env.example 仅为占位模板;真实 .env 由 .gitignore 排除
This commit was merged in pull request #27.
This commit is contained in:
2026-09-20 10:37:57 +08:00
parent 7df2dde438
commit 4ab2f3cd8e
15 changed files with 2092 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
# ============================================================
# CI/CD 环境变量模板
#
# ⚠️ 复制为 .env 后填写真实值。.env 已在 .gitignore 中,绝不允许入库。
# ⚠️ 2026-09-14 曾发生凭据入库事故(scripts/setup-cicd/cicd.config),
# 本文件即该事故的整改产物。任何密码/令牌只允许出现在这里或 Jenkins Credentials。
#
# 生成强随机值:
# openssl rand -base64 24 # 密码
# openssl rand -hex 32 # 令牌/密钥
# ============================================================
# ---------- Gitea ----------
GITEA_ROOT_URL=https://git.f.novalon.cn
GITEA_SSH_DOMAIN=git.f.novalon.cn
GITEA_DB_NAME=gitea
GITEA_DB_USER=gitea
# 至少 24 位;与 app.ini [database] PASSWD 必须一致
GITEA_DB_PASSWORD=__CHANGE_ME__
# ---------- Jenkins ----------
JENKINS_ADMIN_USER=zhangxiang
# 至少 16 位;JCasC 首次启动写入,之后改此值需同步改 casc.yaml 逻辑
JENKINS_ADMIN_PASSWORD=__CHANGE_ME__
# Gitea 个人访问令牌(Jenkins 拉取代码用)
# 生成:Gitea -> 设置 -> 应用 -> 生成新令牌,权限仅勾 read:repository
GITEA_TOKEN=__CHANGE_ME__
# 部署用 SSH 私钥口令(无口令填空)
DEPLOY_SSH_KEY_PASSPHRASE=
# ---------- 备份 ----------
BACKUP_ROOT=/home/novalon/backups/cicd
# 本地保留份数(磁盘 20G 已用 85%,务必配异地)
BACKUP_RETENTION=3
# 单份备份告警阈值
BACKUP_MIN_FREE_GB=3
# 异地同步开关:留空则不同步(强烈建议配置)
# 例:rclone remote 名 + 路径
RCLONE_REMOTE=
RCLONE_PATH=novalon-cicd-backup
# ---------- 告警 ----------
# 失败时推送的 Webhook(企业微信/钉钉);留空则不推送
ALERT_WEBHOOK_URL=
BACKUP_FULL_RETENTION=1
BACKUP_THIN_RETENTION=3