ci: add GitHub Actions deployment
This commit is contained in:
1 parent
19e9b4cb14
commit
bb44c55c90
3 files changed
+73
-4
No files matched your search
@@ -0,0 +1,44 @@
|
||||
name: Deploy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: production-deploy
|
||||
cancel-in-progress: false
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
name: Deploy to Cloudflare
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
env:
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22.12.0
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Check project
|
||||
run: npm run check
|
||||
|
||||
- name: Apply D1 migrations
|
||||
run: npx wrangler d1 migrations apply DB --remote
|
||||
|
||||
- name: Deploy Worker
|
||||
run: npm run deploy
|
||||
+17
-4
@@ -24,7 +24,7 @@
|
||||
### 部署顺序
|
||||
|
||||
1. 检查 Cloudflare 已有 Worker、D1;确认目标应用为本项目,避免覆盖其他项目。不自动读取或配置 Zero Trust。
|
||||
2. 复用或创建 `edgessh-accounts`,将真实 `database_id` 写入 `wrangler.toml`。初始全零 ID 只是占位。
|
||||
2. 复用或创建 `edgessh-accounts`,将目标环境的真实 `database_id` 写入 `wrangler.toml`;仓库当前配置的是线上数据库。
|
||||
3. Zero Trust 应用、域名及单管理员 Allow 策略由用户自行配置,本项目部署过程不代为创建或修改。
|
||||
4. 用户配置 Access 后,分别通过 `wrangler secret put ACCESS_TEAM_DOMAIN` 与 `wrangler secret put ACCESS_AUD` 注入。所有账号、主机与连接 API 均需 Access 保护;`workers.dev` 只允许固定测试 IP 的无敏感信息诊断。缺少这两个 Secret 时可先部署,但受保护 API 会返回 503,不能操作主机或连接 SSH。
|
||||
5. **只在首次部署时生成密钥**,通过标准输入执行 `wrangler secret put ENCRYPTION_KEY` 注入。不要在命令参数、源码、日志或明文配置里输出密钥。已有 Secret 必须复用,不可随意覆盖。
|
||||
@@ -33,6 +33,19 @@
|
||||
|
||||
密钥丢失将无法解密现有资料。更换密钥必须设计旧密钥解密、新密钥重加密的迁移,不可直接覆盖 Secret。当前版本不提供自动轮换。更换 Access 团队或身份导致 `sub` 改变时,也需要显式的数据迁移。
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
`.github/workflows/deploy.yml` 在推送到 `main` 或手动触发时依次执行安装、项目检查、远程 D1 迁移与 Worker 部署。生产部署使用并发锁串行执行,避免迁移和 Worker 版本交错。
|
||||
|
||||
仓库只需配置两个 Actions 值:
|
||||
|
||||
| 名称 | 配置位置 | 要求 |
|
||||
| --- | --- | --- |
|
||||
| `CLOUDFLARE_ACCOUNT_ID` | Actions Variable | 目标 Cloudflare 账户 ID |
|
||||
| `CLOUDFLARE_API_TOKEN` | Actions Secret | 限定到目标账户,并具备 Workers 部署与 D1 迁移权限 |
|
||||
|
||||
三个运行时 Worker Secret 不进入 GitHub Actions。首次部署或主动轮换时仍使用 `wrangler secret put` 单独管理;日常自动部署只复用 Cloudflare 中已有值。
|
||||
|
||||
## 验收清单(5.6 SOL 执行)
|
||||
|
||||
- `npm run typecheck`、`npm test`、`npm run build:web`、Wrangler dry-run。
|
||||
@@ -55,13 +68,13 @@
|
||||
- 首页为中文;原 SSH 工作台保留中英文切换。
|
||||
- 国旗使用本地 `flag-icons` SVG(MIT,许可证随静态资源部署),在 Windows 上也显示实际旗帜,不依赖 emoji 字体。
|
||||
|
||||
## 2026-09-18 线上部署记录
|
||||
## 2026-09-19 线上部署记录
|
||||
|
||||
- 正式入口:`https://ssh.dltwcnm.ccwu.cc`
|
||||
- D1:`edgessh-accounts`(`2c1b7a95-a5d6-4a72-a8d2-4132b74aa268`)
|
||||
- D1 schema:`hosts`、`d1_migrations`;记录数分别为 0、1
|
||||
- 活动版本:`18e848ff-31ea-4dda-87de-6759720c72f1`(地球转速 1.5 倍、定位服务回退、强制重新定位与诊断入口)
|
||||
- Secret 名称:`ENCRYPTION_KEY`、`ACCESS_TEAM_DOMAIN`、`ACCESS_AUD`;本次仅注入两个 Access Secret,未读取或覆盖 `ENCRYPTION_KEY`
|
||||
- 活动版本:`e587a233-7767-4a3d-ba67-0ba8fa255285`
|
||||
- Secret 名称:`ENCRYPTION_KEY`、`ACCESS_TEAM_DOMAIN`、`ACCESS_AUD`;本次部署未读取或覆盖任何运行时 Secret
|
||||
- 无会话 Smoke:正式入口 `/` 与 `/api/auth/me` 均返回 Access 302,TLS 正常;未记录重定向地址、Team Domain、AUD、JWT、Cookie 或 Secret 值
|
||||
- 诊断入口:`workers.dev` 已开启,仅额外公开固定 `8.8.8.8` 的定位链路检查;账号、主机、凭据与 SSH 等接口仍必须通过 Access JWT 校验
|
||||
- 待验收:需要用户登录 Access 后验收账号 API,并使用真实授权 SSH 目标验收终端、SFTP 与进程面板
|
||||
|
||||
@@ -146,6 +146,17 @@ npm run deploy
|
||||
|
||||
完整配置顺序、安全边界与验收清单见 [部署指南](DEPLOYMENT.md)。
|
||||
|
||||
### GitHub Actions 自动部署
|
||||
|
||||
仓库内置的 `Deploy` workflow 会在推送到 `main` 后自动检查、迁移 D1 并部署,也可在 Actions 页面手动触发。首次使用前,在仓库的 `Settings > Secrets and variables > Actions` 中配置:
|
||||
|
||||
| 名称 | GitHub 配置类型 | 用途 |
|
||||
| --- | --- | --- |
|
||||
| `CLOUDFLARE_ACCOUNT_ID` | Variable | Cloudflare 账户 ID |
|
||||
| `CLOUDFLARE_API_TOKEN` | Secret | 具备 Workers 部署和 D1 迁移权限的 API Token |
|
||||
|
||||
Action 只需要这两项部署凭据。`ACCESS_TEAM_DOMAIN`、`ACCESS_AUD` 与 `ENCRYPTION_KEY` 继续作为 Worker Secret 保存在 Cloudflare,普通部署不会读取或覆盖它们。API Token 属于敏感信息,必须使用 GitHub Secret,不能保存为普通 Variable。
|
||||
|
||||
## 本地开发
|
||||
|
||||
安装依赖并准备本地变量:
|
||||
@@ -175,6 +186,7 @@ npm run dev
|
||||
|
||||
```text
|
||||
EdgeSSH/
|
||||
├── .github/workflows/ # GitHub Actions 自动部署
|
||||
├── frontend/ # 主机总览、地球可视化与 SSH 工作台
|
||||
├── src/
|
||||
│ ├── accounts/ # Access 认证、主机管理与加密存储
|
||||
|
||||
Reference in new issue
Block a user