# 安装（本地开发）

把 LaraBlog 跑起来：前台、Filament 后台、演示数据。从 sablog 迁站请先看 [import.md](./import.md)，**不要先灌演示数据**。上线见 [deploy.md](./deploy.md)。

## 环境

| 项 | 要求 |
|---|---|
| PHP | **8.2+**（`composer.json`） |
| 扩展 | `mbstring`、`openssl`、`pdo`、`tokenizer`、`xml`、`ctype`、`json`、`fileinfo`、`gd`（封面/图片）、`zip` |
| Composer | 2.x |
| 数据库 | 开发可用 SQLite；也可用 MySQL / MariaDB |
| 可选 | Redis（队列/缓存）；Node.js 仅在改前端资源时需要 |
| 可选 | `pcntl` + `posix`（本机跑 `workerman:ai`；没有就用 `queue:ai`） |

macOS 可用 Laravel Herd / Valet，指向仓库的 `public/`。也可用 `php artisan serve`。

## 1. 代码与依赖

```bash
cd /path/to/larablog
composer install
cp .env.example .env
php artisan key:generate
```

## 2. 配置 `.env`

最少改这些：

```env
APP_NAME=LaraBlog
APP_ENV=local
APP_DEBUG=true
APP_URL=http://larablog.test          # 必须和浏览器访问的 origin 一致
APP_LOCALE=zh_CN

# 开发默认 SQLite（文件需存在）
DB_CONNECTION=sqlite
# DB_DATABASE=/绝对路径/database/database.sqlite

# 开发附件落本地，不必配 S3
ATTACHMENTS_DRIVER=local

QUEUE_CONNECTION=database
CACHE_STORE=database
SESSION_DRIVER=database

# 本机没有真实 LLM 时用 stub，避免后台点「AI 润色」去打外网
AI_PROVIDER=stub
```

SQLite 文件：

```bash
mkdir -p database
touch database/database.sqlite
```

改用 MySQL 时：

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=larablog
DB_USERNAME=root
DB_PASSWORD=
```

## 3. 初始化

```bash
php artisan migrate
php artisan db:seed
php artisan plugins:sync
php artisan migrate            # 插件表（支付/会员等）随 discover 加载，再跑一遍即可
php artisan themes:publish
```

`db:seed` 会：

- 写入 AI 设置（来自 `.env` 的 `AI_*`）
- 启用 `larablog/ai-comment-moderation`，并尝试启用 `payment` / `membership`
- 创建演示分类、文章、友情链接
- 创建后台账号

## 4. 启动

**Herd / nginx：** 站点根目录设为 `public/`，打开 `APP_URL`。

**内置服务器：**

```bash
php artisan serve
```

本地要排空队列（含 AI）可以另开终端：

```bash
php artisan queue:work --tries=3
# 或只处理 AI 队列（不会启动 Workerman）：
php artisan queue:ai
```

改 Filament/Vite 资源时才需要 `npm install && npm run dev`。主题 CSS 走 `php artisan themes:publish` 拷到 `public/themes/`。

## 5. 入口与账号

| 入口 | 地址 |
|---|---|
| 前台 | `/`、`/show-1.shtml`、`/login.shtml` |
| 后台 | `/admin` |
| API | `/api/v1/meta`、`/api/v1/articles` |
| OpenAPI | `/docs/api/openapi.yaml` |

演示管理员（`DemoBlogSeeder`）：

- 邮箱：`admin@larablog.test`
- 密码：`password`

登录后请立刻改密码。不要把这组账号用在公网。

## 6. 插件（可选）

```bash
php artisan plugins:sync
# 后台 → 插件 → 启用；或：
php artisan plugins:sync --enable=larablog/payment,larablog/membership
php artisan migrate
```

依赖顺序：先 `larablog/payment`，再 `larablog/paid-content` / `larablog/membership`。说明见后台卡片「使用说明」，以及 `docs/plugins.md`。

## 7. 自检

```bash
php artisan test
php artisan route:list --path=shtml
```

浏览器打开首页、一篇 `.shtml` 文章、`/admin`。本地附件地址形如 `/attachments-local/...`（由 Laravel 路由提供，不必 `storage:link`）。

## 常见问题

**500 / 空白页**  
`storage/`、`bootstrap/cache/` 对 PHP 进程可写；`APP_KEY` 已生成；`APP_DEBUG=true` 看 `storage/logs/laravel.log`。

**后台样式丢失**  
执行 `php artisan filament:upgrade` 与 `php artisan themes:publish`。

**点了 AI 润色没反应**  
`AI_PROVIDER=stub` 时也要有队列消费者；`QUEUE_CONNECTION=sync` 会在请求内执行（仅调试）。生产见 [deploy.md](./deploy.md)。

**准备导入旧站**  
不要用这份「演示种子」当生产数据。空库 `migrate` 后直接走 [import.md](./import.md)。
