Ads Platform — 多平台广告管理系统
项目地址:https://github.com/erikwang2013/ads-php
概述
对接 29 个广告平台,统一管理广告投放与跨平台数据报表,支持告警监控、自动出价、多端访问。
架构设计 → docs/architecture.md
功能模块 → docs/features.md
API 文档 → docs/api.md | hg/apidoc:http://127.0.0.1:8788/apidoc
版本对比 → docs/versions.md(Lite 开源 / Standard & Full 联系 erik@erik.xyz)
支持的平台
国内 (16)
国际 (13)
技术栈
架构图
请求流程图
功能模块图
数据生命周期图
完整版含所有细节标注、Admin 端管道、定时任务甘特图、缓存状态机 → docs/diagrams/ |
详细架构说明、安全架构、高并发设计见 架构设计文档 | 历史设计规范见 design.md
架构说明
service/— webman v2 用户端业务 API 服务,监听端口 8788。处理广告平台对接、OAuth 授权、数据同步、报表引擎、告警监控等业务逻辑。admin/— webman-admin v2 独立管理后台,监听端口 8789。包含 PHP 后端(认证鉴权、用户管理、系统配置)和 Vue 3 SPA 前端。管理后台与业务服务的通信 — Admin 通过 ServiceProxy(基于 cURL 的 HTTP 代理)调用 service API,转发管理员请求并携带 JWT Token。开发模式 — Vite dev server (端口 5173) 将 /api代理至 service:8788;admin PHP 后端在 8789 提供 session 认证和 SPA 静态服务。生产模式 — Nginx 将 /路由至 admin:8789(管理后台 SPA),将/api/路由至 service:8788(业务 API)。
Erik Stack 集成
erikwang2013/snowflake-phperikwang2013/hashidserikwang2013/jwt-webmanerikwang2013/encryptionerikwang2013/encryptableerikwang2013/webman-scouterikwang2013/seasonerikwang2013/poster-phphg/apidoc
国际化
全部界面支持 中文 (zh-CN) / English (en) 双语切换:
erik\support\I18n?lang= 参数setLang()
安全
Service 端 (14 层全局 + AuthMiddleware)
CORS → OriginGuard → SecurityHeaders → AttackGuard → ClientPlatform → ReplayGuard → Version → RateLimit → LoginThrottle → SessionLimit → SQLGuard → Validation → ResponseTime → Encryption → AuthMiddleware(路由层)
Admin 端 (10 层全局 + AuthCheck)
CORS → SecurityHeaders → AttackGuard → ClientPlatform → Version → RateLimit → LoginThrottle → SQLGuard → Validation → CSRF → AuthCheck(路由层)
防护能力总览 (22 项)
安全架构图
防御纵深:外层(Nginx)→ 入口守卫(5层中间件)→ 身份认证(7项)→ 输入校验(4项)→ 频率控制 → 数据加密 → 审计追溯
认证:服务端和 admin 统一用 admin_users 表 + bcrypt 哈希,JWT 24h + refresh 轮换
审计:所有操作记录 IP / User-Agent / Client-Platform / 操作详情
二次确认:删除/解绑/批量操作采用"输入确认词"模式(GlobalConfirm + useConfirmStore)
高级功能
高并发
shared + 只读副本 read_replica,SELECT 自动路由到副本config/database.phpPDO::ATTR_PERSISTENTconfig/database.phppersistentreadonly 配置config/redis.phpsupport/CacheService.phpsupport/AsyncJobService.phpdocker/nginx/admin.confdocker/nginx/admin.confexpires 30d + immutable + gzip_staticdocker/nginx/admin.conf
快速启动
一键 Web 安装(推荐)
启动服务后浏览器访问 /install 进入安装向导:
# 启动管理后台 (端口 8789)
cd admin && composer install && php start.php start
# 打开浏览器访问 http://localhost:8789/install
# 在安装向导中填写数据库信息、管理员账户,点击「开始安装」
安装向导将在网页上引导你完成:
数据库连接 — 填写 MySQL 主机、端口、数据库名、用户名密码,支持连接测试 Redis 配置 — 填写 Redis 连接信息(可选) 管理员账户 — 设置后台登录用户名、密码、显示名称 一键安装 — 自动建库、执行 install.sql创建 28 张表并写入种子数据、更新管理员密码
安装完成后访问 / 进入管理后台,使用设置的用户名和密码登录。
Docker (推荐生产环境)
# 启动全部服务 (MySQL + Redis + PHP + Nginx)
docker-compose up -d
# 初始化数据库(创建表 + 种子数据)
make db-init
# 访问
# 管理后台: http://localhost
# 安装向导: http://localhost/install
# API: http://localhost/api(Header: X-API-Version: v1)
本地开发
# 服务端 (端口 8788)
cd service && composer install && php start.php start
# 管理后台 (端口 5173)
cd admin/public/web && npm install && npm run dev
# Flutter App
cd apps/flutter && flutter run -d chrome # Web PC
# HarmonyOS App
# 使用 DevEco Studio 打开 apps/harmonyos 目录
cd apps/flutter && flutter run -d android # Mobile
# TypeScript 检查
cd admin/public/web && npx vue-tsc --noEmit # 零错误
项目结构
ads-php/
├── service/ # 用户端业务服务 (webman v2 :8788)
│ ├── plugin/
│ │ ├── ads-api/ # REST API (45+ 端点,版本路由)
│ │ │ ├── controller/v1/ # 14 个控制器
│ │ │ ├── middleware/ # 7 个中间件
│ │ │ ├── config/route.php # 路由定义
│ │ │ └── route_helpers.php # versioned() 辅助函数
│ │ ├── ads-platform/ # 平台适配器核心
│ │ │ ├── adapter/ # 29 个平台适配器
│ │ │ ├── src/ # AdapterRegistry, CampaignData
│ │ │ ├── model/ # BidRule, BidLog, TargetingTemplate
│ │ │ ├── service/ # BidEngine, ReportBuilder
│ │ │ └── migration/ # SQL 迁移 + 性能索引
│ │ ├── ads-account/ # OAuth 账户管理
│ │ ├── ads-task/ # 定时任务调度 (6 cron)
│ │ ├── ads-alert/ # 告警监控引擎 + 预算预警
│ │ ├── ads-report/ # 报表引擎 (CSV/Excel/PDF) + 归因引擎 + 投放日历
│ │ └── ads-tenant/ # 多租户管理
│ ├── support/ # Erik Stack 工具类
│ │ ├── ControllerTrait.php # 控制器公共 trait
│ │ ├── JwtService.php # JWT 包装类
│ │ ├── CacheService.php # Redis 缓存服务
│ │ ├── ExceptionHandler.php # API 异常处理器
│ │ └── ApiResponse.php # 统一响应格式
│ ├── config/ # 全局配置 (DB/Redis/Log/Middleware)
│ ├── tests/ # PHPUnit 测试 (35 tests)
│ │ ├── Unit/ # 单元测试 (Middleware, Task)
│ │ └── Integration/ # 集成测试 (Auth, Health)
│ └── start.php # 服务入口
├── admin/ # 独立管理后台 (webman-admin v2 :8789)
│ ├── public/web/src/
│ │ ├── views/ # 15 个 Vue 页面
│ │ │ ├── dashboard/ # 仪表盘 (ECharts)
│ │ │ ├── campaign/ # 广告计划
│ │ │ ├── adgroup/ # 广告组
│ │ │ ├── creative/ # 广告创意
│ │ │ ├── report/ # 报表分析 + 导出
│ │ │ ├── alert/ # 告警规则 + 记录
│ │ │ ├── notification/ # 通知中心
│ │ │ ├── bid/ # 自动出价规则
│ │ │ └── system/ # 用户管理 + 审计日志
│ │ ├── api/ # 9 个 API 客户端
│ │ ├── stores/ # 4 个 Pinia Store
│ │ └── components/ # 共享组件 (ListPageLayout 等)
│ ├── app/ # PHP 后端 (controller/middleware)
│ └── config/ # Admin 配置
├── apps/
│ ├── flutter/ # Flutter Desktop App
│ │ └── lib/
│ │ ├── features/ # 12 个功能页面 + Shell 布局
│ │ ├── config/menu_config.dart # 两级菜单配置
│ │ ├── router.dart # GoRouter (ShellRoute + 路由守卫)
│ │ └── stores/ # Riverpod Auth Provider
│ └── harmonyos/ # HarmonyOS (API Client 就绪)
├── docker/ # Docker & Nginx 配置
├── .github/workflows/ # CI (语法→测试→TS→Docker) + CD (构建推送)
├── docs/ # 设计文档、实施计划、Skills
├── docker-compose.yml
├── Dockerfile / Dockerfile.admin / Dockerfile.admin-php
└── Makefile
API 端点
所有 API 端点均需 Header
X-API-Version: v1。版本号不出现于 URL 路径。
认证 & 基础
广告计划
广告组
广告创意
报表
账户
告警
通知
自动出价
定向模板
Admin 端点(端口 8789)
数据库
命名规范: 表前缀 erik_,主键 BIGINT UNSIGNED PRIMARY KEY(无自增,Snowflake ID),引擎 InnoDB,字符集 utf8mb4
erik_tenantserik_platform_accountserik_auth_tokenserik_campaignserik_ad_groups, erik_creativeserik_report_metricserik_report_extraserik_assetserik_targeting_templateserik_conversionserik_attribution_resultserik_bid_ruleserik_bid_logserik_alert_ruleserik_alert_logserik_notificationserik_sync_errorsadmin_users, admin_roles, admin_audit_logs
定时任务
测试
cd service && ./vendor/bin/phpunit
# 35 测试 / 70 断言
覆盖范围: 中间件 (Version/SQLGuard/SecurityHeaders) · 数据对象 (CampaignData/FieldMapping/Hashids) · 引擎 (ReportBuilder/AdapterRegistry) · 集成测试 (Auth/Health)
# TypeScript 检查
cd admin/public/web && npx vue-tsc --noEmit # 零错误
# Dart 分析
cd apps/flutter && dart analyze # 零错误
CI/CD
CI (.github/workflows/ci.yml): 自动管线 — PHP Syntax → PHPUnit → TypeScript → Docker Build
CD (.github/workflows/deploy.yml): 手动触发 — Docker Buildx → 推送 GHCR (service/admin/admin-php) → 部署通知
.github/dependabot.yml 每周自动更新 Composer + npm + Docker 依赖。
Skills
docs/skills/ — 11 个可复用项目技能:
adapter-generatormigration-generatorerik-stackadmin-page-generatorapi-endpointtdd-workflowsecurity-middlewareversion-splitcache-strategyattribution-setuphigh-concurrency
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。