Files
adcloud-advertiser-console/README.md
T
codex-bot 8d319fb34e
Advertiser console CI and test deployment / build-deploy (push) Failing after 1m4s
Validate candidate pages before public ingress and deployment checks
2026-09-16 15:21:08 +08:00

46 lines
4.5 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.
# AdCloud · 广告主控制台
React + TypeScript + Vite,独立 AdCloud 品牌的广告主网站。前后端发布与测试全部通过 Gitea Actions 执行。
## 页面和 URL
| 页面 | URL |
| ----------------------- | ----------------------------------------------------------------------------- |
| Landing / 登录 / 注册 | `/`、`/login`、`/register` |
| 工作台 | `/workbench` |
| 全部主账户 / 指定主账户 | `/account-manage`、`/account-manage/:accountId` |
| 新建 / 编辑主账户 | `/account-manage/new`、`/account-manage/:accountId/edit` |
| 投放子账户 | `/account-manage/:accountId/promotion-manage/:promotionId` |
| 新建 / 编辑子账户 | 主账户路径下的 `/promotion-manage/new`、`/promotion-manage/:promotionId/edit` |
| 新建项目 | 子账户路径下的 `/create-project/:step` |
| 编辑项目 | 子账户路径下的 `/projects/:projectId/edit/:step` |
`step` 依次为 `goal`、`product`、`audience`、`budget`、`tracking`、`name`,对应营销目标、推广产品、受众、排期预算、监测链接和项目名称。步骤切换产生浏览器历史记录。已保存项目可复制链接、在新标签页打开、刷新恢复和前进后退;未保存的表单编辑仍是临时状态。
`accountId` 是主账户,`promotionId` 是进入投放工作区的子账户 ID,`projectId` 是项目 ID。`promotion-manage` 是功能名,不是额外的数据实体。URL 层级会与后端归属校验相互验证;非法或无权限的 ID 不会回退到其他账户。未登录访问受保护页面会跳转登录,登录后回到原链接。
注册创建独立广告主用户、主账户及默认子账户;所有账户和已保存项目进入后端关系数据库。终端流量用户的 `identity` 表和广告主身份完全分离。
## Gitea CI/CD
- `.gitea/workflows/deploy.yml`:main 推送或手动触发,复用 `ubuntu-latest` runner(现有 Docker 宿主机)。
- Docker 多阶段构建:Node 22 执行 `npm ci`、TypeScript 检查和 Vite 打包;Nginx 提供页面与同源广告主 API 代理。
- Playwright 测试镜像运行在 runner,访问真实部署的 `BASE_URL`。覆盖注册登录、主子账户 URL、六步项目创建、修改、深链接刷新、前进后退、重新登录返回、错误账户和移动端工作台。
- 独立容器 `adcloud-advertiser-console`、并发组与默认端口 `18081`,后端继续使用 `18080`。
- 先在候选容器网络内完成浏览器验收(仅回环监听 5173,未发布宿主机端口),再替换前端;公开端口或浏览器验证失败恢复上一个前端容器。
- 同仓库 PR 只构建;外部 fork PR 不在拥有 Docker socket 的 runner 执行。
仓库变量:`ADCLOUD_ADVERTISER_PORT`(18081)、`ADCLOUD_ADVERTISER_API_UPSTREAM`(`http://host.docker.internal:18080`)、`ADCLOUD_ADVERTISER_PUBLIC_URL`(`http://47.76.92.159:18081`)。拉取源码优先使用现有 `GITEA_TOKEN` secret,否则使用 Actions 自动提供的短期仓库 token。无需把密码写入仓库。
先部署后端的 `/v1/advertiser` 接口,并在其 CORS 中允许前端公网 origin。测试 HTTP 环境使用 `COOKIE_SECURE=false`;生产需要 HTTPS 和 `COOKIE_SECURE=true`。Nginx 支持所有前端深链接 fallback,API 路径单独代理,API 404 不会伪装成 HTML。
CI 浏览器验证使用带 `CI` 标记的测试广告主和项目,保留在测试环境,不能视为真实客户数据。依赖数据库的后端集成阶段不允许跳过测试。
## 开发配置
Node.js 22.12+。默认 `VITE_API_BASE_URL` 留空,Vite 开发代理指向 `127.0.0.1:8000`;部署使用 Nginx 同源代理。不要在 `VITE_` 配置放密钥。依据当前工作约定,测试与发布验证在 Gitea runner 和部署服务器完成,而非本机。
## 首版边界
项目只有“草稿”和“已暂停”,没有实际投放、资金消耗或结算;报表展示空态。尚无成员邀请与细分角色、邮箱验证、密码找回、资质审核、素材和投放引擎。监测链接当前只保存配置,不主动请求外部地址。