安装向导:首次部署浏览器引导建库建表(批 26)

- 新增 install.php 独立安装向导:环境检查 → 表单(站点标题/家庭名/数据库/
  高德/管理员)→ 全量建表 → 基本种子数据 → 生成 config.php → 自动自删。
  已安装判定以 config.php 为准,重复访问只显示「已安装」。
- 新增 sql/schema.sql 全量建表脚本(15 张表,按外键依赖排序,全部
  IF NOT EXISTS),由向导执行;tools/migrate.php 继续负责增量迁移。
- index.php 加未安装检测:config.php 缺失或无效时跳转安装页。
- layout.php 标题回退值接通 app.name,安装时填的网站标题在页面上生效。
- 种子数据仅基本款:节点类型 5、角色标签 4、出行方式 9(不含需绑定
  车辆的自驾两类);管理员账号按既有加密方式写入。
- README 部署章节改为向导优先,手动方式降为备选。
- 验证:本地 60 文件 php -l 全过;渲染检查 386 项全过;
  安装流程端到端 46 项全过(临时副本 + 独立 MariaDB:跳转、表单、
  建表、种子、加密可逆、自删、已安装拒绝、错误路径)。
This commit is contained in:
2026-09-28 20:55:16 +08:00
parent 4a5dd19503
commit 7ec3ea559e
5 changed files with 853 additions and 31 deletions
+39 -30
View File
@@ -68,52 +68,61 @@ uploads/ 用户上传内容(不入库)
### 1. 环境要求
- PHP **8.x**(开发与线上均在 8.1 与 7.4 双版本下做过语法检查与冒烟)
- MySQL 5.7+ / 8.0,字符集 `utf8mb4`
- PHP 扩展:`pdo_mysql`、`curl`、`gd`、`mbstring`、`json`
- PHP **7.4+**(推荐 8.x;开发与线上均在 8.1 与 7.4 双版本下做过语法检查与冒烟)
- MySQL 5.7+ / 8.0(MariaDB 亦可),字符集 `utf8mb4`
- PHP 扩展:`pdo_mysql`、`curl`、`gd`、`mbstring`、`json`、`openssl`
- 站点根目录对 Web 进程**可写**(安装时生成 `config.php` 用;`uploads/` 始终需要可写)
### 2. 取代码与配置
### 2. 安装向导(推荐)
1. 把代码放入站点目录,确保站点根对 Web 进程可写;
2. 在 MySQL 里创建一个**空的**数据库(表结构由安装向导自动生成):
```sql
CREATE DATABASE trip DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 再创建专用账号并授予 trip 库全部权限(推荐,不要用 root)
```
3. 浏览器访问站点根 —— 未安装时 `index.php` 会自动跳转到 `install.php` 安装向导;
4. 按表单填写:网站标题、家庭名称、数据库连接、高德地图 Key(可留空稍后补)、
管理员账号(手机号 + 密码);
5. 提交后向导会:全量建表(`sql/schema.sql`)→ 执行增量迁移(`src/Migrate.php`)→
写入基本数据(你的家庭、管理员账号、节点类型、角色标签、常用出行方式)→
生成 `config.php` → **自动删除 `install.php`**。
安装完成后即可用管理员账号登录。「已安装」的判定以 `config.php` 为准:
即使 `install.php` 没有被成功删除,再次访问也只会看到「已安装」提示,无法重新安装。
> 种子的出行方式不含「自驾」两种 —— 自驾方式必须关联具体车辆,
> 请先在「车辆管理」里添加车辆,再自行添加自驾出行方式。
### 3. 手动安装(备选)
不想用向导时,也可以完全手动:
```bash
git clone <repo-url> triplog
cd triplog
cp config.example.php config.php
cp config.example.php config.php # 手工填写数据库与高德参数
php tools/migrate.php # 不够:首次还需要全量建表,见下
```
编辑 `config.php` 填数据库与高德参数。**`config.php` 不入库**(含口令),只提交模板。
全量建表:把 `sql/schema.sql` 导入空库(`mysql trip < sql/schema.sql`),
再执行 `php tools/migrate.php` 补齐增量迁移。管理员账号目前需自行向 `families`、
`users` 插入(密码用 `password_hash()`,手机号存 `phone_hash`(SHA-256)与
`phone_encrypted`(AES-256-CBC)),**推荐直接使用安装向导**。
所有配置项都支持环境变量覆盖(`DB_HOST` / `DB_NAME` / `AMAP_NAV_SRC` 等),
便于在不同机器上跑同一份代码。
### 3. 数据库
创建库与账号(示例):
```sql
CREATE DATABASE trip DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'trip'@'localhost' IDENTIFIED BY 'your-password';
GRANT ALL PRIVILEGES ON trip.* TO 'trip'@'localhost';
```
执行结构迁移(**幂等,可反复跑**):
```bash
php tools/migrate.php # 执行迁移
php tools/migrate.php --status # 只看当前版本,不改动
```
该入口**只在命令行可用**,被 HTTP 访问时直接返回 404。
`config.php` 不入库(含口令),只提交模板 `config.example.php`。
所有配置项都支持环境变量覆盖(`DB_HOST` / `DB_NAME` / `AMAP_NAV_SRC` 等)。
### 4. Web 服务器
把站点根指向项目根目录。Apache 需允许 `.htaccess`(`uploads/` 下有一条禁止执行脚本的规则,
不可删除);Nginx 请自行配置等价规则,并注意 `uploads/` 内不得解析 PHP。
确保 `uploads/` 对 Web 进程可写。
### 5. 高德地图
在 `config.php` 的 `amap` 段填写:
在 `config.php` 的 `amap` 段填写(安装向导里填过的可跳过):
- `key` —— 服务端接口用
- `security_js` —— 前端 JS API 2.0 的安全密钥