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-latestrunner(现有 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 和部署服务器完成,而非本机。
首版边界
项目只有“草稿”和“已暂停”,没有实际投放、资金消耗或结算;报表展示空态。尚无成员邀请与细分角色、邮箱验证、密码找回、资质审核、素材和投放引擎。监测链接当前只保存配置,不主动请求外部地址。