博客号使用手册
面向站长本人:从第一次进后台,到每天顺手写文章、发随手记。部署相关问题见 DEPLOY.md。
在线示例:https://blog.xiaowuleyi.com · 后台:https://blog.xiaowuleyi.com/admin/
目录
- 站点地址一览
- 第一次进入后台
- 后台导览
- 写一篇文章:完整流程
- 编辑器技巧
- 采集公众号文章
- 排版体检
- 发微博(随手记)
- 媒体库(图床)
- 评论管理
- 友情链接
- 分类与标签
- 独立页面(页面管理)
- 回收站
- 会员与积分
- 设置逐项说明
- 皮肤切换
- 账号与安全
- 升级、备份与数据导出
1. 站点地址一览
所有页面手机端都已适配,顶部导航(七套主题一致):首页 · 微博 · 归档 · 留言板 · 分类话题(折叠菜单)· 友情链接 · 自建页面 · 关于我 · 随机(自建页面在后台「页面」创建并选择是否上导航)。
| 地址 | 内容 |
|---|---|
| / | 首页:微博入口卡(最新随手记摘要)→ 搜索框 → 排序条(最新 / 最多阅读 / 最多点赞 / 最多留言 / 随机)→ 文章列表 |
微博:随手记图文时间线,每页 15 条,置顶在前;点正文里的 #话题# 可筛选同一话题(此时页头会列出全部话题,方便退出筛选) |
|
| /archives | 文章归档:全部已发布文章按年份分组,一页看尽所有文章(独立页面,利于搜索引擎收录) |
| /guestbook | 留言板:独立留言墙,不分文章,想聊什么直接留;作者回复带「作者」徽标,管理规则与文章评论一致 |
| /links | 友情链接:友链卡片 + 访客在线申请收录表单 |
| /post/:slug | 文章页:正文、点赞、留言、分享、楼中楼评论、相关文章;自动输出 OG 分享标签与 schema.org JSON-LD 结构化数据(搜索引擎收录基本盘,无需配置);草稿只有本人登录后加 ?preview=1 才能看到 |
| /category/:slug | 分类归档页(顶部「分类话题」菜单里点分类进入) |
| /tag/:tag | 标签归档页(菜单里点话题进入,带文章计数) |
| /search?q= | 搜索页:全文关键词搜索(FTS5 索引,结果按相关度排序),文章展示前 50 条、站内微博一并纳入(前 20 条);不足 3 个字的短词自动退回普通匹配 |
| /about | 关于我:独立的作者介绍页,内容在后台「页面」维护(页面系统承载) |
| /random | 随机阅读:随机跳到一篇已发布文章 |
| /rss.xml · /sitemap.xml | RSS 全文订阅与站点地图(自动生成) |
| /admin/ | 管理后台(下文的主角) |
2. 第一次进入后台
浏览器打开 https://blog.xiaowuleyi.com/admin/:
- 第一次会显示「创建管理员」页面:填用户名(2-24 位字母、数字、_ 或 -)、密码(≥ 8 位)、昵称 → 创建并进入。系统会自动生成一篇欢迎文章(教你怎么用,看完可删)。
- 之后就是普通登录页,登录状态保留 30 天。
这个「创建管理员」入口只在数据库没有任何用户时开放,所以放心,别人打不开你的后台。
已经建过号了:直接登录即可。管理员登录后在前台还有几个隐形福利——文章 / 微博的评论表单免填昵称,以作者身份发言(带「作者」徽标、即时展示、不受限流);微博页顶部直接有发微博框,不用进后台就能随手发(见第 8 节);每条微博卡片上还有编辑 / 置顶 / 删除按钮,前台直接管;草稿可以预览;后台侧栏随处有「查看主页」入口。
3. 后台导览
左侧导航栏按「数据 / 内容 / 系统」分组(顶部是「查看主页」外链和高亮的「写作」按钮),共十五个入口:
| 分组 | 页面 | 干什么 |
|---|---|---|
| — | 查看主页 / 写作 | 新标签页打开前台;写作是高亮按钮,直达编辑器 |
| 数据 | 概览 | 已发布文章数 / 总阅读 / 收到的赞 / 待审评论(附草稿数),最近发布的文章,媒体库占用 |
| 数据 | 统计 | 访客数据:浏览量 / 访客数趋势、今日小时分布、受欢迎的页面、来源、设备 / 浏览器 / 国家地区分布 |
| 内容 | 文章 | 全部文章的管理列表:搜索、按状态筛选、查看 / 编辑 / 置顶 / 下架 / 删除 |
| 内容 | 微博 | 随手记发布器 + 全部微博的管理列表(编辑 / 置顶 / 下架 / 删除) |
| 内容 | 评论 | 访客留言的管理:按「全部 / 文章 / 微博 / 留言板」和状态筛选,通过 / 隐藏 / 回复 / 删除(待审数量红点提示) |
| 内容 | 媒体 | R2 图床里的文件网格:预览、复制地址、上传、删除 |
| 内容 | 分类 | 文章分类的增删改 + 全站标签的预建与删除 |
| 内容 | 页面 | 独立页面管理:自建项目页 / 书单页 / 隐私政策等,可上顶部导航、可排序;「关于我」也在这里维护(见第 13 节) |
| 内容 | 友链 | 友情链接管理:添加、审核访客申请、排序、图标维护(待审数量红点提示) |
| 内容 | 回收站 | 删除的文章 / 微博 / 页面的兜底:保留 30 天,可恢复或彻底删除,到期自动清除(见第 14 节) |
| 系统 | 会员 | 会员列表 / 搜索 / 改档位 / 封禁(即刻踢下线),见第 15 节 |
| 系统 | 皮肤 | 主题切换(选中即刻生效)+ 皮肤市场精选目录,见第 17 节 |
| 系统 | 插件 | 编辑器插件的启停管理 + 插件市场精选目录,开发见 PLUGINS.md |
| 系统 | 设置 | 站点信息、头像与图标、站点模式(博客+微博 / 纯博客 / 纯微博)、站点状态(灰度 / 闭站)、评论规则、访客统计开关、数据导出、改密码 |
关于「统计」页的口径,两件事要知道:
- 文章列表里的「阅读量」和统计页数字不是一回事:前者是
posts.views累计值(服务端按 IP+文章 1 小时去重自增,展示在文章卡片上);统计页是独立的访客日志(前台页面打点采集,含首页 / 微博 / 归档等全部页面),两边各记各的。 - 隐私与保留:只记匿名访客号、来源域名与国家码,不存 IP 和原始 UA,访客日志保留 180 天(每晚自动清理);「设置 → 访客统计」开关关闭后前台不再采集,已有数据保留。数据从功能上线起才开始积累。
两个顺手的小设计:
- 侧栏可收起:点侧栏顶部「博客号」旁的折叠按钮,收成图标窄条(仅桌面端),状态会记住,下次进来保持原样。
- 手机访问时底部是固定标签栏(概览 / 写作 / 文章 / 评论),其余入口点「更多」在底部抽屉里展开(待审申请会以红点聚合提醒);编辑器顶栏两行、工具栏横滑,写作体验专门做过移动端适配。
4. 写一篇文章:完整流程
- 点侧栏「写作」(或概览页右上角「✍️ 写文章」)
- 输入标题 —— 按回车直接跳到正文
- 写正文:
- 直接打字,回车分段
- 截图粘贴:截完图在正文里
⌘/Ctrl + V,图片自动上传 R2 并插入,无需任何操作 - 拖拽上传:把图片 / 视频文件拖进正文
- 工具栏:标题(H2/H3/H4)、加粗、斜体、下划线、删除线、引用、代码块、行内代码、列表、分割线、链接、图片、视频、清除格式
- 右侧「信息」抽屉(默认收起给写作让位,点顶栏「信息」展开;开关状态会记住,桌面端抽屉右上角有 × 可关闭):
- 摘要:留空则自动截取正文前 80 字
- 封面图:点击上传,会显示在首页卡片和文章头图(封面与正文首图重复时会自动去重,不会一图两现)
- 标签:输入后回车,最多 8 个,支持历史标签补全
- 分类:下拉选择(一篇文章只归一个分类),分类本身在后台「文章 → 分类标签」页签维护
- Slug:留空自动生成——英文标题转短横线格式(
my-first-post),中文标题用「发布日期 + 4 位随机位」(如20261007-k3fx,按北京时间);重名自动加序号不会发布失败。想自定义就填字母 / 数字 / 中文 / 短横线 - 置顶:打开后文章在首页列表置顶
- 定时发布:打开后选一个北京时间(默认一小时后),点「发布」文章进入定时状态——顶栏徽章显示「定时 月-日 时:分」,后台「文章」列表也会归到「定时」标签下。到点后 1 分钟内自动发布并推送 Telegram,前台在此之前完全不可见。取消定时:关掉开关再保存即回草稿
- 访问密码:打开「加密访问」并填一个密码(最多 64 位),这篇文章就上了锁——访客打开只看到密码输入框,输对才能读全文,解锁状态保留 30 天。密码只在服务端做单向哈希、不会回显;已加密的文章留空保存即保持原密码,直接输入新密码即更换,取消勾选并保存即解除加密。锁定期间正文不进 RSS 全文、搜索也搜不到这篇文章(标题与你自己写的摘要照常展示)
- 分享卡图:点「生成分享卡图」把标题 + 封面(无封面则深色渐变底)绘成 1200×630 的专属卡图,分享到微信 / Telegram 时显示这张图而不是光秃秃的链接;「移除卡图」回退到封面图
- 顶栏「体检」跑一遍排版规范检查(见 第 7 节)
- 「存草稿」(或
⌘/Ctrl + S)随时保存;不点它也会每 1.5 秒自动保存 - 「预览」在新标签页以真实主题打开文章(草稿也可以预览,仅自己可见)
- 没问题了点绿色按钮「发布」—— 完成,文章即时出现在首页和 RSS;勾了「定时发布」则到点自动发
已发布的文章再编辑时,绿色按钮变成「更新」,保存即生效;想下架去「文章」列表点「下架」转回草稿。定时中的文章在列表里点「发布」会立即发出(同时清掉定时时间)。
文章分享:文章页底部「赞 / 留言」旁还有一个「分享」按钮,点开是分享面板——复制链接(一键复制本文永久链接,老浏览器自动降级)、分享给朋友(手机上唤起系统分享面板,能带图带图、带不动图分享纯链接)、保存图片 / 复制图片(生成一张竖版文章卡:站名头像 + 标题 + 摘要 + 封面 + 二维码,收到图的人扫码直达本文,适合发朋友圈 / 微信群)。卡片图同为纯前端生成,二维码由服务端随页面下发(无外部依赖)。
从「采集公众号文章」来的草稿会保留原文的发布时间,自动保存不会把它抹掉;发布时沿用这个时间。
5. 编辑器技巧
快捷键
| 快捷键 | 作用 |
|---|---|
⌘/Ctrl + S |
保存 |
⌘/Ctrl + B / I / U |
加粗 / 斜体 / 下划线 |
⌘/Ctrl + Z / Shift+Z |
撤销 / 重做 |
| 选中文字后点工具栏 | 对选区生效(链接、行内代码等同理) |
行首快捷排版(Markdown 爱好者福音):富文本模式下在空段落行首输入标记后按空格,自动转成对应格式——> 引用、# 或 ## H2、### H3、#### H4、- 或 * 无序列表、1. 有序列表;整段只有 ``` 或 --- 时按回车,直接变代码块 / 分割线。只在普通段落触发(标题、引用、代码块里继续输入原字符),输入法选词的空格回车不误触。
微信表情:工具栏「😊」打开微信默认表情面板([微笑] ~ [转圈] 共 117 个),点一个插入一个、可连续选,点面板外或 Esc 关闭。插入的是 [微笑] 这类文本码——正文里所见即所得显示小图(编辑器内直接显示表情图,Markdown 模式显示文本码),发布后前台渲染成行内小图;正文里手打的 [微笑] 也会自动渲染。图源为开源 Twemoji(CC-BY 4.0),映射表在 src/emoji.ts。微博发布器(后台 + 前台)同款「😊 表情」按钮;评论区手打文本码同样渲染。
图片自动压缩:粘贴 / 拖拽 / 选文件上传的 JPEG、PNG、WebP,超过 150KB 或最长边超过 2000px 会先在本地压一遍(最长边 2000px、WebP 质量 75%——WebP 压缩率高,75% 已是业内通行的视觉无损甜点)并统一转成 WebP 再传 R2——同画质比 JPEG 约再省三成体积,透明 PNG / 带透明的 WebP 转过去也不丢透明;旧浏览器不支持 WebP 编码时自动回退 JPEG / PNG 口径(质量 82%)。微博九图、截图帖加载更快,流量更省。GIF 动图会压丢帧所以原样直传,压不小则用原图。
前台图片灯箱:文章正文和微博配图点击即全屏查看——双指捏合 / 滚轮缩放,拖动平移,双击放大复原,左右滑动或方向键切换同组图片,Esc 或点 × 关闭。头像和小图标不受影响。
Markdown 模式:点底栏「Markdown」进入纯文本模式,支持 # 标题、**加粗**、*斜体*、`行内代码`、``` 代码块 ```、> 引用、- 列表、1. 列表、[链接](url)、、--- 分隔线。再点一次「Markdown」转回富文本(自动渲染)。
粘贴富文本:从网页、Word、公众号编辑器复制的内容粘贴时,会先经过服务端白名单净化——脚本、危险属性被剥除,排版样式(颜色、字号、对齐、边框)保留。外链图片自动转存:粘贴内容里的外链图(公众号 mmbiz.qpic.cn 等有防盗链、随时会失效)会自动抓取转存进站内 R2 图床并替换地址(单篇上限 30 张,与采集同口径),转存失败的图保留原地址。
外链跳转提醒:正文里指向第三方网站的链接(微博正文同理,见第 8 节),访客点击时会先经过本站的「即将离开本站」提醒页——展示目标域名与完整链接、附免责声明,由访客自行决定是否继续,防钓鱼防误触。主流官方大站(苹果 / 谷歌 / X / GitHub / 微博 / 知乎 / B 站等,清单在 src/outlink.ts 的 TRUSTED_OUT_DOMAINS)与本站自身域名不受影响、直接跳转;存库与 RSS / 导出内容里的链接保持原始地址,提醒页只在浏览器渲染层生效。
自动保存去哪了:编辑器顶部「已保存 HH:MM」是最后一次保存时间;显示「保存失败」时点一下文字即可重试。关页面前有未保存更改会弹浏览器确认。本地备份兜底:还没保存成功的输入会同时留在浏览器本地(每 2 秒一份),断网、崩溃、误关标签页后重新打开这篇文章,会问你要不要恢复本地备份——正常保存成功后备份自动清掉,不会打扰。
查找替换:顶栏「查找」按钮或 ⌘/Ctrl + F,支持逐个替换(Enter 下一个、Shift+Enter 上一个)、全部替换、区分大小写;Markdown 模式下同样可用(直接定位纯文本)。当前命中的文字会高亮标记,关闭查找条或保存时自动还原,不会写进正文。
表格:工具栏「表格」按钮插入 3×3 表格(首行是表头);光标点进任意单元格,上方浮现操作条——上下插行、删行、左右插列、删列、首行表头/正文互换、删表。Markdown 模式下表格转成 | 列 | 列 | 管道写法(| --- | 分隔行),往返切换不丢表。
链接卡片与插入站内文章:工具栏「链接」按钮现在是三个页签——① 网址卡片:填任意网页地址,自动抓取该页的标题、摘要与配图生成一张漂亮的引用卡片(编辑器里实时预览,抓不到时用域名占位,不会失败);② 普通链接:传统的蓝色超链接(老行为,选区文字会自动带进文字框);③ 站内文章:搜索标题或翻页浏览自己已发布的文章,选中后可再选「卡片 / 超链接」两种样式,卡片带封面图与摘要、标题带 🔒 标记提醒加密文。卡片在前台七套主题下各有贴合主题配色的样式,外链照常走「即将离开本站」提醒页。Markdown 模式下「链接」按钮退化为纯 Markdown 链接插入(卡片是富文本能力)。
图片点一下就能改:点正文里的图片弹出设置——改 alt 描述(无障碍与 SEO,读屏软件会朗读)、调显示宽度(75% / 50% / 35%,按微信排版规范的原始像素宽度口径),也可以直接删除这张图。
专注模式:底栏「专注」一键隐藏顶栏、工具栏、信息抽屉,只剩写作纸面;Esc 退出,开关状态会记住。
6. 采集公众号文章
编辑器工具栏末尾有个微信双气泡图标的按钮——「采集公众号文章」。用途:看到一篇不错的公众号内容想存到自己站上(或转载),不用手动复制粘贴。普通图文和**贴图(图片消息)**都支持——贴图采集后图片在前、文字分段在后,与原页面版式一致。
怎么用:
- 复制公众号文章的链接(形如
https://mp.weixin.qq.com/s/…,在微信里点「复制链接」即可) - 点工具栏上的采集按钮,粘贴链接,确认
- 服务端抓取正文,把所有配图和封面转存进自己的 R2 图床(不依赖微信的图床,防失效),生成一篇保留原发布时间的草稿,并自动跳转到编辑器
- 核对排版和图片,顺手改改摘要 / 标签,点「发布」即可
公众号的封面图通常是正文首图的裁切版(同一张图、不同尺寸)。采集时会自动认出这种情况:封面只放到草稿的封面位,正文里不再重复收这张图,发布后文章页不会一图两现。此前采集的旧文章不受影响,发现重复的话在编辑器里删掉正文里那张即可。
限制(防滥用,都是自动的):
- 每分钟最多采集 10 篇(同一 IP)
- 单篇最多转存 30 张配图,单图 ≤ 25MB,正文 ≤ 约 900KB
- 只接受
mp.weixin.qq.com的文章链接;公众号内嵌视频暂不支持(采集后该段会被丢弃,需要的话请在编辑器手动补)
7. 排版体检
点顶栏「体检」,编辑器会按《微信公众平台编辑器插件开发规范》对正文做静态检查,输出一份报告:⚠️ 建议修复项、💡 优化建议,每条注明规范编号。部分问题支持「一键修复」(如 !important、text-align: start/end)。
常见提示怎么改:
| 提示 | 改法 |
|---|---|
| 固定宽度 | 编辑器产出的内容一般没有;从外部粘贴的图片/表格若被提示,把 width: 500px 改成 width: 100%,或确认有意为之后在节点加 data-ignore-width |
| 图片缺 data-w | 用编辑器上传的图会自动带;外链图可手动补 data-w="原始像素宽度" |
| pre 包正文 | 把普通段落从代码块里挪出来 |
完整规则表见 wechat-typography-spec.md。没有红字就是好排版,放心发布。
8. 发微博(随手记)
不是每句话都值得起标题、配摘要——短想法、生活记录、看到的图片,走后台「微博」页的发布器:写上字(或直接配图)就能发。
发布框里有「😊 表情」按钮,点开微信默认表情面板选表情插入(存的是 [微笑] 文本码,前台渲染成行内小图;评论区手打文本码同样渲染)。
前台也能直接发、直接管:管理员登录后打开 /weibo,时间线顶部就有同一个发布器(访客看不到),加图 / 粘贴 / 拖拽 / 话题 / 草稿全部支持,点「发布」后页面自动刷新出新微博;每张卡片的底栏右侧还有编辑 / 置顶(取消置顶)/ 删除三个管理按钮(同样只有你能看到)——编辑就地展开、改完保存立即生效(文字和图都能改),置顶取消置顶不用刷新,删除有二次确认。下架转草稿仍回后台操作。
发布器怎么用:
- 输入框里打字,最多 5000 字,右下角实时计数
- 加图三种方式:点「加图」选文件、把图片拖进输入框、在输入框里直接
⌘/Ctrl + V粘贴截图(发截图最顺手的姿势)。最多 9 张,多出的自动忽略,只支持 JPG / PNG / WebP / GIF - 想归类就写话题:正文里带
#话题#即可,如#晚餐日记#,发布后自动提取归类(单条微博最多 10 个话题,每个话题最长 24 字)。也兼容#话题(结尾不带 #)和 Memos 式层级标签#软件/apple/mac,整个词算一个话题 - 发布或存草稿随时选;草稿不出现在前台
发出去之后(前台 /weibo 时间线):
- 每页 15 条,置顶的排最前;访客可以点赞、在卡片里展开评论区留言
- 正文里贴的链接自动变成可点击的超链(中英文都认,句尾标点不会粘进链接);指向第三方网站的链接会先经过「即将离开本站」提醒页(见第 5 节),主流大站直接跳转
- 从卡片正文的
#话题#链接点进去,可筛选同一话题的全部微博(未筛选时页头不显示话题条,保持干净) - 微博页有独立的翻页,首页的「微博入口卡」展示最新随手记摘要并链接过来
分享卡片:每条微博底栏的「分享」按钮可以一键把这条随手记生成一张精美的图片卡(站名头像 + 正文带话题高亮 + 配图九宫格 + 时间与站点域名),支持 navigator.share 的手机(iOS 15+ / 安卓主流浏览器)直接唤起系统分享面板发朋友圈,桌面端「保存图片」直接下载;支持剪贴板写入的浏览器(Chrome / Edge / Safari 16+ / Firefox 127+)还有「复制图片」,可直接粘贴到公众号编辑器、微信聊天等支持粘贴图片的输入框,不支持的浏览器自动隐藏该按钮;微信等内置浏览器里长按预览图也能保存转发。纯前端生成(点击时才加载生成器),不经过服务端。
管理已有微博(后台「微博」页列表,或前台 /weibo 卡片上的编辑 / 置顶 / 删除按钮):
- 编辑:回到发布器修改(文字和图都能改)
- 置顶 / 取消置顶:最多同时置顶 3 条;草稿不能置顶
- 下架 / 发布:下架转回草稿(转草稿会自动取消置顶),再发布就恢复
- 删除:移入回收站(30 天内可在后台「回收站」恢复;到期自动清除或手动彻底删除时,评论才会一并清除,见第 14 节)
8.1 从外面发微博:Telegram 机器人(推荐)
两步接好之后,在 Telegram 里给机器人发消息 = 发微博——文字、图片、图片+文字都可以,最适合手机上随手记。
第 1 步:创建机器人(一分钟):
- Telegram 搜索 @BotFather,发送
/newbot - 按提示给机器人起名(显示名)和用户名(必须以
bot结尾) - BotFather 会回复一串 Bot Token,形如
123456789:AAH8x…,复制它
第 2 步:后台配置(后台「设置 → 外部发布」):
- 把 Bot Token 粘进「Telegram Bot Token」,点右上角「保存全部」
- 点「保存并一键设置 Webhook」——显示
✅ 已绑定 @你的机器人即接入完成(这一步会自动生成 Webhook 密钥并注册到 Telegram,不需要手动操作 BotFather)
第 3 步:授权你自己:
- 在 Telegram 里给机器人发一条
/start,它会回复你的 Chat ID(一串数字) - 把这串数字填进「允许发布的 Chat ID」,再点「保存全部」
完成。现在直接给机器人发消息即可:
| 你发的 | 得到的 |
|---|---|
| 文字 | 文字微博(正文带 #话题# 照常归类) |
| 图片(caption 可写字) | 图文微博,最多 9 张 |
| 一次多选几张的相册 | 自动合并成一条多图微博 |
消息开头写 /draft |
存为草稿(/draft 今天先记一笔) |
/start 或 /help |
查看帮助与自己的 Chat ID |
发布成功机器人会回复 ✅ 已发布到微博 并附上链接;图片经机器人中转存进你的 R2 图床,和手动上传一致。发错了去后台「微博」页改或删。
安全:Webhook 地址带随机密钥,伪造请求会被拒;不在白名单里的会话发了消息只会收到「未授权」提示,不能发布。所以机器人可以放心用。
注意:Bot Token 等同于发布权限,只填在自己后台;想撤销某个工具的权限,点「重新生成」API Token 或在 BotFather 里
/revoke换新 Token。
8.2 程序化发布:开放 API
任何能发 HTTP 请求的工具——iOS 快捷指令、n8n /影刀自动化、脚本、其他网站——都能发微博。先在「设置 → 外部发布」点「生成 Token」并复制,然后:
TOKEN=你生成的Token
# 纯文字(含话题)
curl -X POST https://blog.xiaowuleyi.com/api/external/weibo \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"从终端发的第一条微博 #折腾#"}'
# 图片文件(multipart,可重复 images 字段传多张)
curl -X POST https://blog.xiaowuleyi.com/api/external/weibo \
-H "Authorization: Bearer $TOKEN" \
-F "content=配图微博" \
-F "images=@/path/to/photo.jpg"
# base64 图片(JSON 里直接给 data URL,适合快捷指令 / 截图上传)
curl -X POST https://blog.xiaowuleyi.com/api/external/weibo \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"截图", "images":["data:image/png;base64,iVBORw0…"]}'规则与后台发布器完全一致:文字 ≤ 5000 字、图片 ≤ 9 张(JPG / PNG / WebP / GIF,文件走接口上传 ≤ 25MB)、话题从正文 #话题# 自动提取、"status":"draft" 存草稿、限频 30 次/分钟。返回 {ok, id, url, status, images},url 直接指向这条微博。接口参数详见 API.md。
9. 媒体库(图床)
侧栏「媒体」:所有上传过的图片和视频按时间倒序展示,点击可预览、复制访问地址(/images/u/202610/xxx.png)、删除。写文章、发微博、传头像图标、采集公众号配图——都存在这一个桶里。
- 上传限制:JPG / PNG / WebP / GIF / MP4 / WebM,单文件 ≤ 25MB
- 隐私:EXIF / GPS 自动抹除:所有进入图床的图片(手动上传、编辑器粘贴、采集与外部转存)在落库前自动剥掉 EXIF / GPS / XMP 等元数据——手机照片的拍摄位置与设备信息不会随图公开。纯字节摘除、零画质损失,颜色配置(ICC)保留;带旋转标记(orientation ≠ 1)的照片为防显示颠倒会整体保留,属小概率例外
- 删除前想一下:如果文章 / 微博里引用了这张图,删除后图会裂
- 占用统计在概览页底部
体检:页头「体检」按钮对图床做一次全面检查,报告三类问题,操作前先出报告、确认后才执行——
- 未引用:站内任何地方(文章正文、封面、页面、微博配图、头像、友链图标、站点设置)都没用到的文件,勾选后可一键清理,删除不影响前台显示。注意:如果某张图被站外文章当作图床热链,站内检测不到,删掉后对方页面会挂图。
- 重复:内容完全相同(按文件指纹比对)的文件分成一组,点某张的「保留这张」,其余副本的引用会自动改写到它再删除,文章照常显示。
- 失踪记录:图床里文件已不在(多半是手动清过 R2)只剩登记条目的,可一键清理;仍被正文引用的会标出来——那些图片本身已是死链,建议先修复正文。
首次体检会先为老文件计算指纹(自动分批进行,几百个文件也就十几秒);之后上传的文件在入库时就带指纹,体检即时出结果。
10. 评论管理
前台规则:访客在文章页底部、微博卡片里和留言板(/guestbook)都能留言;文章与留言板评论支持楼中楼——你(作者)可以回复某条留言,回复挂在同一层并带「作者」徽标。访客默认即时展示,可在设置改为先审后展。
你登录着的时候在前台发言:免填昵称、直接展示、不受限流,同样带「作者」徽标。所以看完文章顺手回一条留言,前台就能完成,不用去后台。
后台「评论」页:
- 顶部按类型切换:全部 / 文章 / 微博 / 留言板,另有状态筛选(全部 / 待审 / 已通过)
- 每条留言可:通过(展示)、隐藏(暂不展示)、回复(以作者身份回一条,直接展示)、删除(该条与其下的回复一起删)
- 管理员在前台也可以直接点留言旁的「回复」按钮,效果一致
防垃圾三件套已内置:蜜罐字段(机器人会填,直接静默丢弃)、同 IP 限流(10 分钟 5 条)、内容长度限制(昵称 ≤ 24 字、内容 ≤ 1000 字)。友链申请另有独立限流。
新留言 Telegram 推送:在「设置 → 外部发布」打开「新留言推送到 Telegram」(默认开)。文章、微博或留言板一来新留言,你的发布机器人会立刻把来源、昵称、内容摘要和直达链接推到 Telegram(发给白名单第一个 Chat ID,即你自己)。需要先按 8.1 配好 Bot Token 与 Webhook;开启先审后展时,消息里会标「⏳ 待审核」。你自己以作者身份发言不推送。
11. 友情链接
前台 /links 页展示所有已收录的友链,并在页尾提供申请收录表单——访客填站名和网址即可提交,进入待审核队列(同 IP 10 分钟限 3 次,网址去重,蜜罐防机器人)。
后台「友链」页分两个标签:已收录 / 待审核。
- 审核:待审核列表里点「通过」即收录上线;如果对方没提供图标,通过后服务端会在后台自动去抓对方的网站图标,不卡你操作
- 添加友链:点右上角「添加友链」,填站名、网址、简介(可选)。图标有四种给法,随意选:
- 自动获取——填完网址点一下,自动抓对方 favicon 存进图床
- 上传图片——本地选一张(PNG / JPG / WebP / GIF / ICO,走 R2 图床)
- 贴图片地址——在图标输入框里粘一个
https://…图片链接 - 直接粘贴——把复制的图片在弹窗里
Ctrl + V,自动传图床
- 都不给也行,前台会显示站名首字的占位图标
- 排序:已收录列表里有 ↑ / ↓ 按钮上下移动;编辑里也可直接填排序数字(小的靠前)
- 隐藏:把已收录的友链移回待审核(不下架数据,前台不再展示)
- 图标按钮:已收录的友链想重新抓一次图标,点它
- 删除:彻底移除
12. 分类与标签
两者互补:分类是文章的大归类(一篇文章只属于一个分类,如「技术」「生活」),标签是自由的关键词(一篇文章最多 8 个)。
后台「文章」页的「分类标签」页签(原独立「分类」页已并入文章页):
- 添加分类:填名称即可,标识(slug,出现在
/category/后面)留空就用名称本身;支持字母、数字、中文和短横线,不可重复 - 编辑 / 删除:删除分类后,原属文章变为「未分类」,文章本身不受影响
- 标签管理(同页下半部分):展示全站标签及使用计数。在这里可以预建还没被用到的标签(会出现在编辑器补全和后台列表里;顶部「分类话题」菜单只展示已被至少一篇已发布文章使用的标签),也可以删除标签——会从所有文章里一并移除
顶部导航的「分类话题」折叠菜单:上半区是分类,下半区是按热度排序的标签(带计数),点击即进入对应归档页。
13. 独立页面(页面管理)
侧栏「内容 → 页面」:在这里创建不属于文章流的自建页面,渲染在 /page/<链接标识>——项目页、书单页、工具页、隐私政策都靠它。
- 新建 / 编辑:右上角「新建页面」或行内「编辑」。标题必填;链接标识留空会按标题自动生成(重复自动加
-2后缀);正文是 HTML 源码(与文章正文同一套白名单净化,排版安全)。v1 用弹窗编辑 HTML 源码,和迁移前的「关于我」编辑方式一致。 - 已发布 / 草稿:开关关掉就是草稿,前台直接 404,只有你能通过后台看到。
- 显示在顶部导航:开启后前台导航「友情链接」与「关于我」之间会出现此页面(按行内 ↑↓ 按钮排序);隐私政策这类不想上导航的页面,保持关闭即可,链接可以放页脚或文章里。
- 关于我:「关于我」已从设置页迁到这里(slug 固定为
about),仍渲染在专属短链/about——升级后第一次进入后台时自动迁移,内容不变;/page/about会自动跳回/about,sitemap 与旧链接都不受影响。 - 删除页面会移入回收站(前台立即 404,30 天内可在回收站恢复)。
14. 回收站
删除不等于消失。文章、微博、独立页面(含「关于我」)的「删除」都是先移入回收站:前台与后台各列表立即不可见,但内容原封不动躺在这里,保留 30 天,随时可以反悔。
侧栏「内容 → 回收站」:
- 恢复:点一下内容就回到删除前的原处——文章回到原来的状态(已发布 / 草稿 / 定时),微博和页面同理,评论也原样跟回来。恢复的定时文章如果发布时间已过,会自动转为草稿(不会一恢复就发出去)
- 彻底删除:从回收站里真正删掉(其下评论一并删除),这一步不可恢复
- 清空回收站:右上角按钮,一键彻底删除全部(可先按文章 / 微博 / 页面筛选)
几点说明:
- 每项显示删除时间,30 天后由系统在每晚维护时自动彻底清除,不用手动管理;到期前数据仍在每日自动备份里,双保险
- 回收站里的文章占用的 slug 不会被新文章抢走,恢复后链接照旧;RSS / sitemap / 归档 / 搜索等前台位置在删除瞬间就会同步移除,不会有残留
- 数据导出(Markdown 包 / WXR)只包含未删除的内容,回收站里的不计入;整站备份则照常包含
15. 会员与积分
访客可以注册成站内会员:登录后评论自动带身份与积分,积分排行榜给互动一个看得见的反馈。全部能力由一个总开关控制,默认关闭——不开就当这套功能不存在,站点行为与从前完全一致。
开关与入口
后台「设置 → 会员功能」:
- 会员功能(默认关):关闭时前台没有任何会员入口,
/member、/rank都是 404;开启后顶部导航出现「会员」「排行榜」两项(位于「关于我」之前) - 排行榜条数:榜单页(
/rank)展示的人数上限(1-50,默认 10)
会员侧
- 注册 / 登录:「会员中心」(
/member)里注册(用户名 + 密码 + 可选昵称与邮箱,蜜罐 + 限流防机器人)、登录、退出;密码 8-64 位,服务端 PBKDF2 单向哈希存储,与站长账号完全隔离 - 个人资料:登录后会员中心出身份卡(昵称 / 档位 / 积分 / 注册时间)与两张修改卡——昵称中英文均可(注册时选填,仅作展示不做唯一),每 30 天可修改一次,冷却中卡片会写明下次可改日期;密码修改需验证当前密码,成功后其他设备全部退出登录(当前设备保持登录)。本站不提供密码找回——注册与改密表单旁都有提醒,请务必记好密码,遗失无法找回
- 评论带身份:登录后文章 / 留言板 / 微博三处评论表单都显示「以会员 xxx 的身份发言」并免填昵称,发出的评论自动带会员昵称与档位徽标;表单里填的昵称 / 邮箱 / 网站字段会被忽略
- QQ 头像:会员中心「QQ 头像」卡里绑定自己的 QQ 号(选填),评论区与排行榜会显示你的 QQ 头像(服务端抓取后转存到自己站内图床,国内直连零成本);QQ 号本身不会公开展示,仅用于抓取头像。头像没抓到时同一张卡可一键重试;没绑定的用户在评论区显示昵称首字图标
- 游客也能亮头像:文章 / 留言板 / 微博的评论表单都有「QQ 号(选填)」一栏,填了就展示 QQ 头像,不填不影响留言;填错格式会提示但不会拦住评论。QQ 号同样不公开展示,且同一 QQ 只抓一次头像(本机也会记住,下次不用重填)
- 积分:发表留言 / 评论 +2(先审后展模式下过审才计,同一条评论只计一次)、每日登录 +1;评论积分单日上限 10 条,防刷由蜜罐与限流叠加兜底
- 排行榜(
/rank):按积分倒序的总榜,自己的名次会高亮;只展示正常状态的会员,积分为 0 不上榜
站长侧
后台「会员」页:列表与搜索(用户名 / 邮箱)、改档位(普通 / 咖啡 / 顶级,档位决定「谁能看」文章档位)、封禁 / 解封——封禁即刻踢下线(该会员全部会话作废),历史评论保留。
会员专属文章
编辑器侧栏「谁能看」四档:公开(默认)/ 仅登录会员 / 咖啡会员 / 顶级会员。非目标读者打开文章只看到开头试读段(服务端截断约 200 字)与升级遮挡卡——截断在服务端完成,浏览器拿不到的才是真拿不到;RSS 全文、公开接口、卡片摘要同步收敛为摘要口径,关键词搜索可按标题命中。锁定文章的评论区照常开放。
与「访问密码」(见第 4 节)可以同时使用:密码墙优先——访客先输对文章密码,再按会员档位判定可见性。
16. 设置逐项说明
后台「设置」页改完记得点右上角「保存全部」。
| 设置 | 说明 |
|---|---|
| 站点模式 | 不爱写长文可以只写微博:博客 + 微博(默认,两者都展示,可选打开首页先看博客还是先看微博——「微博在前」时首页直接渲染完整微博卡片流,文章列表跟在后面)、纯博客(隐藏全部微博模块:导航与页脚都去掉「微博」入口、首页不出随手记、「历史上的今天」只留文章、/weibo 跳回首页、sitemap 不再收录微博页)、纯微博(打开首页就是微博时间线,导航隐藏归档 / 分类话题 / 随机等博客模块,/weibo 仍是完整微博页)。只影响前台展示,文章与微博数据都不会动,随时可切换 |
| 站点名称 | 浏览器标题、首页刊头、文章作者位、RSS 都用它 |
| 站点链接 | 填 https://blog.xiaowuleyi.com。用于 RSS / sitemap / OG 分享的绝对链接,绑定自定义域名后务必填上;不填则自动取当前访问域名 |
| 站点描述 | 首页刊头副标题 + SEO description |
| 页脚文字 | 每页底部的灰字,可以放 ICP 备案号 |
| 站点头像 | 显示在首页刊头、微博页与后台。点「上传头像」传一张(存 R2 图床),「恢复默认」则显示站名首字 |
| 网站图标 | 浏览器标签页上的小图(favicon),上传 PNG / ICO / WebP,同样存图床 |
| 分享卡图 | 分享到社交平台(X / 微信 / Telegram…)时的卡片大图,建议 1200×630 的 PNG / JPG。文章设了封面会优先用封面;没设封面的文章、首页与各列表页用这张兜底,都没上传则用内置卡图 |
| 灰度模式 | 全站去色显示(黑白),用于哀悼、纪念等特殊时刻;后台不受影响,关掉随时恢复 |
| 关闭站点 | 一键闭站:保存后所有访客(含搜索引擎)只能看到一张闭站页,RSS、sitemap、评论 / 点赞 / 友链申请等也一并停用;后台、登录、图床不受影响,已登录的你仍可正常浏览全站检查效果。闭站页返回 503 + Retry-After,搜索引擎会暂时保留收录而不是把站点当 404 摘掉。开启瞬间会弹确认框,防手滑 |
| 闭站公告 | 展示在闭站页上的一段话(支持换行,≤1000 字),留空则显示默认文案「本站暂时关闭,请稍后再来。」 |
| 开启留言 | 关掉后文章页、微博卡片与留言板的评论表单一起隐藏,已有评论仍展示 |
| 留言先审后展 | 开启后新留言进「待审核」,你通过后才展示(你自己以作者身份发言的不受影响) |
| 会员功能 | 会员体系总开关(默认关,详见第 15 节):开启后前台出现「会员」「排行榜」入口,访客可注册登录、评论带身份攒积分;关闭时 /member、/rank 一并 404,已锁文章仍按「谁能看」档位生效 |
| 排行榜条数 | 榜单页(/rank)展示的人数上限(1-50,默认 10) |
| 每页文章数 | 首页 / 分类列表分页大小(1-50) |
| 访客统计 | 开关前台访问数据采集(喂给「统计」页)。关闭后前台页面不再上报,已有数据保留;详见第 3 节的口径说明 |
| 外部发布 | Telegram 机器人与开放 API 的配置(Token 生成、Bot Token、Chat ID 白名单、一键设置 Webhook),详见 8.1 / 8.2 节;「新留言推送到 Telegram」开关与「同步频道 / 群 ID」(服务端插件「发布同步 Telegram 频道」用)也在这里 |
| 服务端插件 | 随内核运行的官方插件(发布同步 TG 频道 / 广场同步 / 评论 Webhook / 页脚自定义代码,启停在「插件」页)的配置项:评论 Webhook 地址、页脚自定义 HTML(挂件 / 徽章等,受 CSP 保护外部脚本不执行)、Buffer API Key 与渠道、广场地址与站点 Token(在官网广场 bloghao.com/plaza 登记站点拿到 Token 后填入并开启「广场同步」插件,发布文章/微博自动同步上广场,加密文与会员专属文不上);开发新插件见 docs/PLUGINS.md,广场机制见 docs/PLAZA.md |
| 订阅与备份 | 「RSS 输出全文」开启时订阅器不点开就能读完(关闭则只输出摘要);「每晚自动备份」每天北京时间 00:30 把数据库快照存进 R2 的 backups/ 目录(滚动保留 30 份),点「立即备份」马上来一份,旁边显示上次备份时间与体积 |
| 修改密码 | 页面底部「账号」区,旧密码 + 新密码(8-64 位) |
17. 皮肤切换
后台「皮肤」页(侧栏「系统」分组)点主题卡片即刻生效,无需保存;「皮肤市场」标签页收录精选主题。七套主题,每套都完整适配首页 / 文章 / 微博 / 友链 / 关于我 / 归档 / 留言板七类页面和手机端:
| 主题 | 风格 |
|---|---|
| 微信公众号 | 明亮清爽,订阅号卡片流 + 公众号文章排版(默认) |
| 纸墨 | 宋体排印、印章红点缀,纸面读书感 |
| 极简 | 黑白灰、大标题、大留白 |
| 夜航 | 深色星图蓝,开发者日志风 |
| 手账 | 奶油纸面、和纸胶带、拍立得与贴纸,自动夜光暗色 |
| 比特币 | 比特币橙 × 暖白纸面,描边分层、衬线大标题与等宽眉题的品牌 kit 风 |
| 小红书 | 发现页瀑布流笔记卡 + 品牌红点缀,把博客写成一册生活指南 |
想上新主题?照着 THEMES.md 注册即可,改完 git push 自动上线。
18. 账号与安全
- 改密码:设置页底部「账号」区,旧密码 + 新密码(≥ 8 位)
- 忘记密码:见 DEPLOY.md「日常运维备忘」,一条 SQL 清空用户后重新创建,文章数据不受影响
- 登录态:30 天有效,过期重新登录即可
- 你可以放心把后台地址告诉朋友——他们只能看到登录页;「创建管理员」入口只在库里没有任何用户时开放
19. 升级、备份与数据导出
升级(本仓库 push 到 main 会经 GitHub Actions 自动部署,无需手动操作;手动部署则):
git pull && npm install && npm run deploy
# 如果 schema.sql 有更新,补一句:
npx wrangler d1 execute DB --remote --file schema.sql # 幂等,安全自动备份(已内置,无需配置):Worker 自带 Cron Trigger——每分钟扫一次「定时发布」(见 第 4 节),每天北京时间 00:30 把数据库(文章 / 微博 / 评论 / 友链 / 设置等全部业务表)导成 JSON 存进 R2 图床的 backups/ 目录,按日期命名(xwblog-YYYY-MM-DD.json),滚动保留最近 30 份。后台「设置 → 订阅与备份」可以关掉它、查看上次备份时间与体积、或点「立即备份」马上来一份;备份失败时若配了 Telegram 机器人会收到提醒。
手动备份(每月一次或大版本前):
npx wrangler d1 export xwblog-db --remote --output=backup-$(date +%F).sql # 文章/微博/评论/友链/设置
npx wrangler r2 object get xwblog-images/ --file=? # 图片按需从媒体库下载恢复:npx wrangler d1 execute xwblog-db --remote --file=backup.sql。自动备份的 JSON 想恢复时,把其中 tables 里的数据导回 D1 即可(每张表一条 INSERT,或需要时写个小脚本)。
数据导出(后台「设置 → 数据导出」,随时可点):
- 导出 Markdown 包:
xwblog-markdown-<日期>.zip,内含全部文章(含草稿,front-matter 带title/slug/date/status/tags/category/cover/summary,正文转成 Markdown)、weibo.md、全部独立页面、以及正文 / 封面 / 微博引用到的站内图片(包内images/目录,正文链接已改写为相对路径可直接本地渲染),manifest.json记录数量与缺失图片清单。未被引用的图床文件不打包(可在「媒体」查看)。 - 导出 WordPress WXR:
xwblog-wxr-<日期>.xml,WordPress / emlog 等系统的标准导入格式(含 HTML 正文、发布状态、分类与标签);微博不进 WXR,用 Markdown 包携带。
数据始终是你的:SQL 备份(上面)、Markdown 包、WXR 三条路,随时搬家不留钳制。
遇到没覆盖到的问题?先看看 DEPLOY.md 的 FAQ,再不行去仓库提 Issue 🙂