74 lines
2.8 KiB
Markdown
74 lines
2.8 KiB
Markdown
# 帆幕 — 私有影音库 · 弹幕观影 · 网盘挂载
|
||
|
||
**帆幕(Fanmu)** 是自建私有影音库:WebDAV/OpenList 挂载片源、媒体库扫描与 Bangumi 刮削、ArtPlayer 播放与弹幕(开放网络 + 本地 XML),多用户进度与权限。
|
||
|
||
基于 monorepo 分层(types → models → db → dao → trpc → web),本仓库按**产品仓**维护。
|
||
|
||
```
|
||
.
|
||
├── app/
|
||
│ └── web/ @app/web — Astro SSR + React islands + i18n 路由
|
||
├── packages/
|
||
│ ├── types/ @app/types — Zod 入参 schema + 共享 DTO
|
||
│ ├── models/ @app/models — Drizzle 表定义(唯一 schema 源)
|
||
│ ├── db/ @app/db — libSQL/Turso 连接单例 + drizzle-kit
|
||
│ ├── dao/ @app/dao — 数据访问层
|
||
│ ├── trpc/ @app/trpc — tRPC 路由 + service
|
||
│ ├── ui/ @app/ui — shadcn 风格基础组件 + Storybook
|
||
│ ├── design-tokens/ @app/design-tokens
|
||
│ ├── seo-geo/ @app/seo-geo — SEO/GEO 纯函数
|
||
│ ├── i18n/ @app/i18n — zh-CN / en 文案与 locale 工具
|
||
│ └── adsense/ @app/adsense — AdSense 加载(可选)
|
||
└── docs/
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
```bash
|
||
yarn install
|
||
|
||
cp .env.example .env
|
||
# 填入 TURSO_DATABASE_URL / TURSO_AUTH_TOKEN / PUBLIC_SITE_URL
|
||
|
||
yarn db:push # 推 schema
|
||
yarn dev:web # Astro :4321
|
||
```
|
||
|
||
## 技术栈
|
||
|
||
| 层 | 技术 |
|
||
|------|------|
|
||
| 前端 | Astro 7 + React 19 islands |
|
||
| API | tRPC v11 |
|
||
| ORM | Drizzle + @libsql/client(Turso) |
|
||
| 样式 | Tailwind CSS 4 + design-tokens |
|
||
| 校验 | Zod 4 |
|
||
| 工程 | TypeScript 7 · Biome · Yarn 4 · Turbo |
|
||
|
||
## 分层(必须遵守)
|
||
|
||
`web → trpc → dao → db → models`,横切 `types`。禁止循环依赖;跨包只走 `package.json` 的 `exports`。
|
||
|
||
新增业务实体请按既有分层接线:`types` schema → `models` 表 → `dao` 查询 → `trpc` service/router → `web` 页面。细节见根目录 `AGENTS.md`。
|
||
|
||
|
||
## 首次运行配置(产品闭环)
|
||
|
||
1. 注册第一个账号(自动成为**管理员**)
|
||
2. **设置 → 开放弹幕网络**:填写弹弹play DevCenter 申请的 `AppId` / `AppSecret`([dev.dandanplay.com](https://dev.dandanplay.com))
|
||
3. **设置 → 弹弹play 账号**:登录弹弹play 账号(站点共用会话,用于拉在线弹幕)
|
||
4. 挂载 WebDAV → 扫描/入库 → 播放页自动匹配或手选作品/集数
|
||
|
||
未完成 2/3 时播放页会提示「去设置」;本地 XML 导入不受影响。
|
||
|
||
### Docker
|
||
|
||
```bash
|
||
docker build -t fanmu:local .
|
||
docker run -d -p 4330:4321 \
|
||
-e MEDIA_SECRET_KEY=<64-hex> \
|
||
-v $PWD/packages/db/local.db:/app/data/local.db \
|
||
fanmu:local
|
||
# 然后走上面「首次运行配置」
|
||
```
|