# LaraBlog

Laravel 12 + Filament 5 + Livewire + Spatie + Workerman 的现代博客平台，支持 sablog 内容迁移、主题/插件、S3 兼容附件、HTML/Markdown 双轨、AI 队列与 `/api/v1` 只读接口。

## 快速开始

完整说明：[docs/ops/install.md](docs/ops/install.md)。迁旧站不要 `db:seed`，改走 [docs/ops/import.md](docs/ops/import.md)。

```bash
composer install
cp .env.example .env
php artisan key:generate
# 配置 DB_*；开发可设 ATTACHMENTS_DRIVER=local，生产配 AWS_* / MinIO
php artisan migrate
php artisan db:seed
php artisan plugins:sync --enable=larablog/ai-comment-moderation
php artisan themes:publish
php artisan serve
```

- 前台：`/`、`/show-{id}.shtml`、`/login.shtml` 等
- 后台：`/admin`（`admin@larablog.test` / `password`）
- API：`/api/v1/*`（OpenAPI：`/docs/api/openapi.yaml`）

## 文档索引

| 文档 | 内容 |
|---|---|
| [docs/ops/install.md](docs/ops/install.md) | 本地安装、演示账号、插件 |
| [docs/ops/import.md](docs/ops/import.md) | sablog 导入（ID / 附件 / 旧密码） |
| [docs/ops/deploy.md](docs/ops/deploy.md) | 生产部署：nginx、PM2、Redis、S3 |
| [docs/architecture.md](docs/architecture.md) | 架构、分层、开发思想 |
| [docs/themes.md](docs/themes.md) | 皮肤目录格式与开发 |
| [docs/plugins.md](docs/plugins.md) | 插件格式 / Hook |
| [docs/routing.md](docs/routing.md) | `.shtml` 路由策略 |
| [docs/api/](docs/api/) | OpenAPI + 小程序向只读 API |
| [docs/specs/larablog-platform/](docs/specs/larablog-platform/) | SPEC / CHECKLIST / TESTPLAN |

## 进程与 CI

- PM2：`ecosystem.config.cjs`（queue / schedule / workerman）
- GitHub Actions：`.github/workflows/ci.yml`（PHP 8.2/8.3 + PHPUnit）

## 测试

```bash
php artisan test
```

- 默认 **sqlite `:memory:`**（见 `phpunit.xml`）
- 覆盖：legacy URL、导入 fixture、auth、附件、AI stub、API v1 等
- **不是**全站手工 E2E；支付/会员真实链路等属二期

## Redis 前缀

```env
REDIS_PREFIX=larablog_
CACHE_PREFIX=larablog_cache_
```

## sablog 导入

完整步骤、编码、附件补传与导入后开后台：[docs/ops/import.md](docs/ops/import.md)。

```bash
php artisan sablog:import --mode=raw --dry-run
php artisan sablog:import --mode=raw --attachments=/path/to/attachments
php artisan sablog:import --mode=markdown --attachments=/path/to/attachments
```
