# CCDroid **Repository Path**: null_465_7266/ccdroid ## Basic Information - **Project Name**: CCDroid - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-10 - **Last Updated**: 2026-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android EMM — 本地开发(Docker Compose) 企业级 Android MDM(Mobile Device Management)平台的部署骨架。 ## 目录结构 ``` android-emm/ ├── docker-compose.yml # 编排 postgres / redis / backend / frontend / pgAdmin ├── .env.example # 环境变量模板 ├── README.md ├── backend/ │ └── backend.Dockerfile # Gradle 多阶段构建 ├── frontend/ │ ├── frontend.Dockerfile # Node + nginx 多阶段构建 │ └── nginx.conf # SPA fallback + /api 反代 + /ws/agent 透传 └── sql/ └── init.sql # Postgres 首次启动初始化(可选扩展) ``` ## 前置要求 - Docker Desktop 4.25+(带 compose 插件) - (可选)本地 JDK 21 + Node 20 —— 只用 compose 不需要装,构建都在容器里完成 ## 一键起服务 ```bash # 1. 准备环境变量 cp .env.example .env # Windows: copy .env.example .env # 2. 构建并启动(detached) docker compose up -d --build # 3. 看日志 docker compose logs -f backend ``` ### 启用 pgAdmin(可选) pgAdmin 默认不启动(在 `tools` profile 下),加 `--profile tools` 启动: ```bash docker compose --profile tools up -d --build ``` ## 服务地址 | 服务 | URL | 备注 | | ---------- | --------------------------------------- | ------------------------------------------ | | 前端 | http://localhost | nginx 托管静态文件 + 反代 `/api` / `/ws` | | 后端 API | http://localhost:8080 | Spring Boot actuator 在 `/actuator/health` | | pgAdmin | http://localhost:8081 | 默认账号见 `.env` 里的 `PGADMIN_*` | | PostgreSQL | `localhost:5432`,库 `entmdm` | 用户名/密码见 `.env` | | Redis | `localhost:6379` | maxmemory 128mb, allkeys-lru | ## 后端首次自举(Bootstrap) 系统启动后还没有租户和管理员,先调 bootstrap 接口创建第一个租户: ```bash curl -X POST http://localhost:8080/api/v1/bootstrap \ -H 'Content-Type: application/json' \ -d '{ "tenant_name": "Demo Co", "admin_username": "admin", "admin_password": "admin123" }' ``` 成功会返回一个 `binding_code`(以及 `tenant_id` / `admin_id`),后面 Android Agent 首次注册时要用这个 code 绑定。 ## 后续接入 Android Agent(Phase 4 实现后补完) 1. 编译 Agent APK,在 `AndroidManifest.xml` 里把服务器地址写成 `http://<本机IP>:8080`(或用 dev 证书走 HTTPS) 2. 安装到测试机,打开 App 3. 输入 bootstrap 拿到的 `binding_code`,走 `/api/v1/agent/register` + `/ws/agent` 长连接 4. 在前端 `http://localhost` 的设备管理页面就能看到在线设备 ## 常用命令 ```bash docker compose ps # 看各容器状态 docker compose logs -f backend # 追后端日志 docker compose logs -f frontend # 追 nginx 日志 docker compose exec postgres psql -U entmdm -d entmdm # 进 psql docker compose down -v # 停掉并清空数据卷(慎用!) ``` ## 说明 - 后端 `spring.profiles.active=docker`,记得源码里要有 `application-docker.yml` 覆盖 `datasource` / `redis` 等配置(compose 已经把环境变量注入容器了,Spring Boot 会优先读环境变量) - 前端容器默认假设 build 产物在 `dist/`,如果用 Vite / Webpack / Next.js 输出目录不同,改一下 `frontend.Dockerfile` 最后 `COPY --from=builder /app/<你的输出目录> /usr/share/nginx/html` - pgAdmin 数据卷是 `pgadmin_data`,跟 `postgres_data` / `redis_data` 一起持久化到 Docker volume,`docker compose down -v` 会全部清掉