Update README.md
This commit is contained in:
1 parent
0106df1e9a
commit
36f7b97e6a
1 file changed
+73
-14
+73
-14
@@ -9,14 +9,14 @@ Hugo 博客的管理后台,基于 Next.js 16 + Tailwind CSS 4,Docker 容器
|
|||||||
| 模块 | 路径 | 权限 | 说明 |
|
| 模块 | 路径 | 权限 | 说明 |
|
||||||
|------|------|------|------|
|
|------|------|------|------|
|
||||||
| 文章管理 | `/` | admin/user | 列表、搜索、编辑、删除、预览(user 只看自己的文章) |
|
| 文章管理 | `/` | admin/user | 列表、搜索、编辑、删除、预览(user 只看自己的文章) |
|
||||||
| 撰写文章 | `/edit` | admin/user | Markdown 编辑器,图片上传,作者自动填充 |
|
| 撰写文章 | `/edit` | admin/user | Markdown 编辑器,图片/视频上传,作者自动填充 |
|
||||||
| 评论管理 | `/comments` | admin/user | Artalk 评论回复、删除 |
|
| 评论管理 | `/comments` | admin/user | Artalk 评论回复、删除 |
|
||||||
| 图片管理 | `/images` | admin/user | 图片上传管理 |
|
| 图片管理 | `/images` | admin/user | 图片上传管理 |
|
||||||
| 回收站 | `/recycle` | admin/user | 已删文章恢复(30 天) |
|
| 回收站 | `/recycle` | admin/user | 已删文章恢复(30 天) |
|
||||||
| 订阅源 | `/feeds` | admin | RSS 订阅源管理 |
|
| 订阅源 | `/feeds` | admin | RSS 订阅源管理 |
|
||||||
| 友链管理 | `/links` | admin | 友链增删改查 |
|
| 友链管理 | `/links` | admin | 友链增删改查 |
|
||||||
| 公众号 | `/wechat` | admin | 微信公众号发布(自包含,直连微信 API) |
|
| 公众号 | `/wechat` | admin | 微信公众号发布(自包含,直连微信 API) |
|
||||||
| Bot 管理 | `/bot` | admin | Telegram Bot / Hugo 状态 |
|
| Bot 管理 | `/bot` | admin | Telegram Bot / Hugo 预览状态 |
|
||||||
| 用户管理 | `/users` | admin | 添加/删除用户、修改密码 |
|
| 用户管理 | `/users` | admin | 添加/删除用户、修改密码 |
|
||||||
|
|
||||||
## 技术栈
|
## 技术栈
|
||||||
@@ -25,9 +25,10 @@ Hugo 博客的管理后台,基于 Next.js 16 + Tailwind CSS 4,Docker 容器
|
|||||||
- **样式**: Tailwind CSS 4, SEN 暖色系
|
- **样式**: Tailwind CSS 4, SEN 暖色系
|
||||||
- **数据**: 直接读写 Hugo Markdown 文件,无数据库
|
- **数据**: 直接读写 Hugo Markdown 文件,无数据库
|
||||||
- **认证**: Service Worker + SHA-256 密码哈希,3 小时自动过期
|
- **认证**: Service Worker + SHA-256 密码哈希,3 小时自动过期
|
||||||
- **评论**: Artalk API v2 + 新评论 Telegram 推送
|
- **评论**: Artalk API v2 + 新评论 Telegram 实时推送
|
||||||
- **Bot**: Telegram Bot(长轮询,支持语音转文字写作)
|
- **Bot**: Telegram Bot(长轮询,语音转文字,GIF/视频处理)
|
||||||
- **公众号**: 微信 API 直连(access_token 自动管理)
|
- **公众号**: 微信 API 直连(access_token 自动管理)
|
||||||
|
- **视频**: ffmpeg GIF 转换 + Amigo 风格自定义播放器
|
||||||
- **反向代理**: Nginx + HTTPS
|
- **反向代理**: Nginx + HTTPS
|
||||||
- **Hugo 预览**: 独立端口 1313,HTTPS 访问
|
- **Hugo 预览**: 独立端口 1313,HTTPS 访问
|
||||||
|
|
||||||
@@ -45,11 +46,45 @@ Hugo 博客的管理后台,基于 Next.js 16 + Tailwind CSS 4,Docker 容器
|
|||||||
| `/links` | 友链管理 |
|
| `/links` | 友链管理 |
|
||||||
| `/feeds` | 订阅管理 |
|
| `/feeds` | 订阅管理 |
|
||||||
| `/stats` | 网站数据 |
|
| `/stats` | 网站数据 |
|
||||||
| 语音消息 | 自动转文字写入文章 |
|
| 语音消息 | 自动转文字写入文章(需配置 DeepSeek/OpenAI API) |
|
||||||
| 图片/文档 | 自动保存到文章目录 |
|
| 图片 | 自动保存到文章目录 |
|
||||||
|
| GIF 动画 | ffmpeg 自动转换为 GIF 格式,透明背景 |
|
||||||
|
| 视频 | 保存为视频文件,自定义播放器 |
|
||||||
|
| 文档 | 根据类型自动处理 |
|
||||||
|
|
||||||
Bot 支持多用户,通过 `TG_ALLOWED_CHAT_IDS` 配置授权。
|
Bot 支持多用户,通过 `TG_ALLOWED_CHAT_IDS` 配置授权。
|
||||||
|
|
||||||
|
## 视频与 GIF 支持
|
||||||
|
|
||||||
|
### Telegram Bot 自动处理
|
||||||
|
|
||||||
|
| 发送类型 | 处理方式 | 结果 |
|
||||||
|
|---------|---------|------|
|
||||||
|
| GIF 动画 | ffmpeg 转换为 `.gif` | `<img>` 标签,自动循环播放 |
|
||||||
|
| 视频 | 直接保存 `.mp4` | 自定义播放器(播放/暂停/进度条/静音/全屏) |
|
||||||
|
| 图片 | 直接保存 | Markdown 图片语法 |
|
||||||
|
|
||||||
|
### Hugo Shortcode
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
{{< video src="xxx.mp4" >}} ← 普通视频
|
||||||
|
{{< video src="xxx.mp4" caption="视频说明" >}} ← 带说明的视频
|
||||||
|
{{< video src="xxx.gif" loop="true" muted="true" >}} ← GIF 模式
|
||||||
|
{{< bilibili BV1xx411c7mD >}} ← B站视频
|
||||||
|
{{< youtube dQw4w9WgXcQ >}} ← YouTube 视频
|
||||||
|
```
|
||||||
|
|
||||||
|
### 播放器特性
|
||||||
|
|
||||||
|
- **Amigo 风格**自定义播放器
|
||||||
|
- 播放/暂停按钮(中央大按钮 + 底部控制栏)
|
||||||
|
- 进度条拖拽
|
||||||
|
- 时间显示
|
||||||
|
- 静音切换
|
||||||
|
- 全屏播放
|
||||||
|
- 悬停显示控制栏
|
||||||
|
- 暗黑模式适配
|
||||||
|
|
||||||
## 用户系统
|
## 用户系统
|
||||||
|
|
||||||
用户配置文件:`users.json`(明文写入,容器启动时自动哈希)
|
用户配置文件:`users.json`(明文写入,容器启动时自动哈希)
|
||||||
@@ -66,7 +101,9 @@ Bot 支持多用户,通过 `TG_ALLOWED_CHAT_IDS` 配置授权。
|
|||||||
- **admin**: 看所有文章,管理所有模块,可添加/删除用户
|
- **admin**: 看所有文章,管理所有模块,可添加/删除用户
|
||||||
- **user**: 只看自己写的文章,只能用文章/撰写/评论/图片/回收站
|
- **user**: 只看自己写的文章,只能用文章/撰写/评论/图片/回收站
|
||||||
|
|
||||||
修改密码:登录后在「用户管理」页面操作,或直接编辑 `users.json` 重启容器。
|
修改密码:
|
||||||
|
- 网页端:侧边栏「用户管理」页面
|
||||||
|
- 命令行:编辑 `users.json` → 重启容器
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
@@ -85,6 +122,7 @@ write-server/
|
|||||||
│ │ ├── AppShell.tsx # 布局(登录页/主界面切换)
|
│ │ ├── AppShell.tsx # 布局(登录页/主界面切换)
|
||||||
│ │ ├── AuthGuard.tsx # 登录状态检查
|
│ │ ├── AuthGuard.tsx # 登录状态检查
|
||||||
│ │ ├── PostEditor.tsx # 文章编辑器
|
│ │ ├── PostEditor.tsx # 文章编辑器
|
||||||
|
│ │ ├── ShortcutPanel.tsx # 快捷插入(视频/B站/YouTube)
|
||||||
│ │ └── Sidebar.tsx # 侧边栏(按角色显示菜单)
|
│ │ └── Sidebar.tsx # 侧边栏(按角色显示菜单)
|
||||||
│ └── lib/
|
│ └── lib/
|
||||||
│ ├── auth.ts # 认证(SHA-256 哈希)
|
│ ├── auth.ts # 认证(SHA-256 哈希)
|
||||||
@@ -94,16 +132,20 @@ write-server/
|
|||||||
│ ├── voice.ts # 语音转文字
|
│ ├── voice.ts # 语音转文字
|
||||||
│ ├── hugo.ts # Hugo Server 管理
|
│ ├── hugo.ts # Hugo Server 管理
|
||||||
│ └── bot/ # Telegram Bot
|
│ └── bot/ # Telegram Bot
|
||||||
│ ├── poll.ts # 消息轮询
|
│ ├── poll.ts # 消息轮询 + GIF/视频处理
|
||||||
│ ├── handlers.ts # 命令处理
|
│ ├── handlers.ts # 命令处理
|
||||||
│ └── notify.ts # 新评论推送
|
│ └── notify.ts # 新评论推送
|
||||||
├── nginx/
|
├── nginx/
|
||||||
│ ├── conf.d/
|
│ ├── conf.d/
|
||||||
│ │ ├── write-server.conf # 主站配置
|
│ │ ├── write-server.conf # 主站配置
|
||||||
│ │ └── hugo-preview.conf # Hugo 预览 HTTPS
|
│ │ └── hugo-preview.conf # Hugo 预览 HTTPS
|
||||||
|
│ ├── login.html # 登录页(备用)
|
||||||
│ └── sw.js # Service Worker(认证)
|
│ └── sw.js # Service Worker(认证)
|
||||||
|
├── scripts/
|
||||||
|
│ ├── hash-users.js # 密码哈希脚本
|
||||||
|
│ └── ...
|
||||||
├── users.json # 用户配置
|
├── users.json # 用户配置
|
||||||
├── entrypoint.sh # Docker 入口(权限修复 + 密码哈希)
|
├── entrypoint.sh # Docker 入口(权限修复 + 密码哈希 + ffmpeg)
|
||||||
├── Dockerfile
|
├── Dockerfile
|
||||||
└── docker-compose.yml
|
└── docker-compose.yml
|
||||||
```
|
```
|
||||||
@@ -114,7 +156,7 @@ write-server/
|
|||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 80 | HTTP → HTTPS 重定向 | HTTP |
|
| 80 | HTTP → HTTPS 重定向 | HTTP |
|
||||||
| 443 | 写作后台(nginx → 8016) | HTTPS |
|
| 443 | 写作后台(nginx → 8016) | HTTPS |
|
||||||
| 1313 | Hugo 预览(nginx → 容器内 1313) | HTTPS |
|
| 1313 | Hugo 预览(nginx 代理) | HTTPS |
|
||||||
|
|
||||||
## 环境变量 (.env)
|
## 环境变量 (.env)
|
||||||
|
|
||||||
@@ -144,6 +186,8 @@ DEFAULT_AUTHOR=小赵
|
|||||||
PREFER_IFACE=eth0
|
PREFER_IFACE=eth0
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**注意:** `BLOG_ROOT` 不要写在 `.env` 里!Docker 部署通过 `docker-compose.yml` 的 volume 映射自动处理。
|
||||||
|
|
||||||
## 常用命令
|
## 常用命令
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -158,13 +202,18 @@ docker compose down && docker compose build --no-cache && docker compose up -d
|
|||||||
|
|
||||||
# 查看日志
|
# 查看日志
|
||||||
docker logs write-server -f
|
docker logs write-server -f
|
||||||
|
docker logs write-nginx -f
|
||||||
|
|
||||||
# 重启单个服务
|
# 重启单个服务
|
||||||
docker compose restart write-server
|
docker compose restart write-server
|
||||||
docker compose restart nginx
|
docker compose restart nginx
|
||||||
|
|
||||||
# 修改用户密码(编辑后重启即可)
|
# 重启 Hugo 预览
|
||||||
nano users.json
|
curl -X DELETE http://127.0.0.1:8016/api/hugo
|
||||||
|
curl http://127.0.0.1:8016/api/hugo
|
||||||
|
|
||||||
|
# 清除 Hugo 缓存
|
||||||
|
rm -rf /path/to/blog/resources/_gen
|
||||||
docker compose restart write-server
|
docker compose restart write-server
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -227,7 +276,7 @@ git config --global --add safe.directory /root/hugo/blog
|
|||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6. 自动续期
|
### 6. 自动续期 SSL
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
crontab -e
|
crontab -e
|
||||||
@@ -242,7 +291,7 @@ crontab -e
|
|||||||
|------|------|------|
|
|------|------|------|
|
||||||
| 必须 | 博客源码 | `git clone` |
|
| 必须 | 博客源码 | `git clone` |
|
||||||
| 必须 | `.env` | 手动填写 Token |
|
| 必须 | `.env` | 手动填写 Token |
|
||||||
| 必须 | `users.json` | 手动创建,明文密码 |
|
| 必须 | `users.json` | 手动创建,明文密码(启动时自动哈希) |
|
||||||
| 必须 | SSL 证书 | 新服务器重新申请 |
|
| 必须 | SSL 证书 | 新服务器重新申请 |
|
||||||
| 可选 | `recycle/` | 30 天过期,可不迁移 |
|
| 可选 | `recycle/` | 30 天过期,可不迁移 |
|
||||||
| 不需要 | Docker 镜像 | 重新构建 |
|
| 不需要 | Docker 镜像 | 重新构建 |
|
||||||
@@ -250,12 +299,22 @@ crontab -e
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Hugo 主题集成
|
||||||
|
|
||||||
|
write-server 依赖 Hugo 主题(Ying)的以下功能:
|
||||||
|
|
||||||
|
- **视频 shortcode** (`layouts/shortcodes/video.html`) - 支持本地视频、B站、YouTube
|
||||||
|
- **视频渲染钩子** (`layouts/_default/_markup/render-video.html`) - Markdown 视频标签
|
||||||
|
- **视频 CSS** (`assets/css/main.css`) - Amigo 风格播放器样式
|
||||||
|
- **暗黑模式** - 纯色背景,无背景图
|
||||||
|
|
||||||
## 已知限制
|
## 已知限制
|
||||||
|
|
||||||
- Hugo 预览(1313 端口)导航链接独立,和主站不互通
|
- Hugo 预览(1313 端口)导航链接独立,和主站不互通
|
||||||
- 博客目录 owner 会被 entrypoint 改为 uid 1001
|
- 博客目录 owner 会被 entrypoint 改为 uid 1001
|
||||||
- 语音转文字需要配置 `DEEPSEEK_API_KEY` 或 `WHISPER_API_KEY`
|
- 语音转文字需要配置 `DEEPSEEK_API_KEY` 或 `WHISPER_API_KEY`
|
||||||
- 新评论推送每 60 秒检查一次
|
- 新评论推送每 60 秒检查一次
|
||||||
|
- GIF 转换需要 ffmpeg(Docker 镜像已内置)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user