# cPanel 线上部署说明（标准 ThinkPHP 8 骨架）

> 环境：Ubuntu 24.04 + WHM/cPanel + PHP 8.3 + MariaDB 11.4
> 本次已用 `composer create-project topthink/think` 生成标准骨架，与你之前 TP8 后台项目的做法一致。

---

## 一、最终目录结构

采用你文档 [[23-部署到cPanel]] 里的标准做法：**public 内容放 public_html，其余放上一级**。

```
家目录/home/账号/            ← cPanel 账户根目录
├── tp8_app/                 ← 核心代码放这里（敏感目录，不暴露在 web）
│   ├── app/
│   ├── config/
│   ├── route/
│   ├── view/
│   ├── vendor/
│   ├── runtime/
│   ├── extend/
│   └── .env                 ← 数据库配置
└── public_html/             ← 网站根目录（只放 public 里的内容）
    ├── index.php            ← 入口（已改好路径指向 ../tp8_app）
    ├── .htaccess
    ├── favicon.ico
    ├── robots.txt
    ├── router.php
    └── static/
```

---

## 二、操作步骤

### 第 1 步：上传代码

1. 上传 `zongsheng-deploy.zip` 到 cPanel 家目录（`/home/账号/`），解压。
2. 得到 `tp8_app/` 和 `public_html/` 两个文件夹（我已按上面结构打包好）。

> 如果解压出来是 `server/` 目录，把 `server/` 重命名为 `tp8_app/`，
> 把 `server/public/` 里的内容移到 `public_html/`。

### 第 2 步：配置 `.env`

编辑 `tp8_app/.env`：

```ini
APP_DEBUG = true

DB_TYPE = mysql
DB_HOST = localhost
DB_NAME = zongshengalxwlkj_zongsheng
DB_USER = zongshengalxwlkj_zongsheng
DB_PASS = WDV]bzQHiTnLR~R0
DB_PORT = 3306
DB_CHARSET = utf8mb4

DEFAULT_LANG = zh-cn

JWT_SECRET = 83d7e6c20154b38f890a763c00b74bda35b154891a33249ce27f95f1774247a9
```

### 第 3 步：确认入口路径

`public_html/index.php` 里的这行**必须是**：

```php
require __DIR__ . '/../tp8_app/vendor/autoload.php';
```

> 我已按此打包好。如果结构不同，手动改这个路径。

### 第 4 步：建表（phpMyAdmin）

选中数据库 → SQL → 粘贴 `sql/init_tables.sql` → 执行。

### 第 5 步：创建管理员（phpMyAdmin）

```sql
DELETE FROM `admin_user` WHERE `username` = 'admin';

INSERT INTO `admin_user` (`username`, `password`, `nickname`, `status`)
VALUES (
    'admin',
    '$2y$10$NehyeHPx2s/vynPXCodJreyGqh1ew.PX8ddtsAYzZV58S20qbP4gu',
    '系统管理员',
    1
);
```

### 第 6 步：访问验证

- 后台登录：`https://zongsheng.alxwlkj.com/admin/login`（admin / admin123）
- 前台 API：`https://zongsheng.alxwlkj.com/api/part/search?q=170`

---

## 三、关键点（这次踩过的坑）

1. **必须用标准骨架**（`composer create-project topthink/think`），不要手写骨架，否则会漏 config 文件导致白屏。
2. **`.env` 用平铺格式**（`DB_HOST`、`DB_NAME`、`DB_USER`、`DB_PASS`），不要用 `[DATABASE]` 分组。
3. **入口 `index.php` 的 `require` 路径**必须指向实际的 `vendor/autoload.php` 位置。
4. **`.htaccess` 用 PATH_INFO 模式**（`index.php/$1`），不要用 `?s=` 模式。

---

## 四、常见问题

| 问题 | 原因 | 解决 |
|---|---|---|
| 白屏 | config 缺失/`.env` 格式错 | 用标准骨架；`.env` 平铺格式 |
| 404 | `.htaccess` 未生效 | 确认规则是 `index.php/$1`；cPanel 开 mod_rewrite |
| 数据库连接失败 | `DB_HOST`/密码不对 | 主机填 `localhost`，密码加对 |
| 登录失败 | 管理员没建 | phpMyAdmin 执行第 5 步 |

---

## 五、安全

1. 跑通后 `APP_DEBUG` 改 `false`。
2. 登录后台后改默认密码 admin123。
3. `.env` 在 tp8_app（web 目录外），天然安全。
