文档中心/📖 使用手册 ✏️ 编辑此页

博客号使用手册

面向站长本人:从第一次进后台,到每天顺手写文章、发随手记。部署相关问题见 DEPLOY.md。

在线示例:https://blog.xiaowuleyi.com · 后台:https://blog.xiaowuleyi.com/admin/

目录

  1. 站点地址一览
  2. 第一次进入后台
  3. 后台导览
  4. 写一篇文章:完整流程
  5. 编辑器技巧
  6. 采集公众号文章
  7. 排版体检
  8. 发微博(随手记)
  9. 媒体库(图床)
  10. 评论管理
  11. 友情链接
  12. 分类与标签
  13. 独立页面(页面管理)
  14. 回收站
  15. 会员与积分
  16. 设置逐项说明
  17. 皮肤切换
  18. 账号与安全
  19. 升级、备份与数据导出

1. 站点地址一览

所有页面手机端都已适配,顶部导航(七套主题一致):首页 · 微博 · 归档 · 留言板 · 分类话题(折叠菜单)· 友情链接 · 自建页面 · 关于我 · 随机(自建页面在后台「页面」创建并选择是否上导航)。

地址 内容
/ 首页:微博入口卡(最新随手记摘要)→ 搜索框 → 排序条(最新 / 最多阅读 / 最多点赞 / 最多留言 / 随机)→ 文章列表
/weibo 微博:随手记图文时间线,每页 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. 写一篇文章:完整流程

  1. 点侧栏「写作」(或概览页右上角「✍️ 写文章」)
  2. 输入标题 —— 按回车直接跳到正文
  3. 写正文:
    • 直接打字,回车分段
    • 截图粘贴:截完图在正文里 ⌘/Ctrl + V,图片自动上传 R2 并插入,无需任何操作
    • 拖拽上传:把图片 / 视频文件拖进正文
    • 工具栏:标题(H2/H3/H4)、加粗、斜体、下划线、删除线、引用、代码块、行内代码、列表、分割线、链接、图片、视频、清除格式
  4. 右侧「信息」抽屉(默认收起给写作让位,点顶栏「信息」展开;开关状态会记住,桌面端抽屉右上角有 × 可关闭):
    • 摘要:留空则自动截取正文前 80 字
    • 封面图:点击上传,会显示在首页卡片和文章头图(封面与正文首图重复时会自动去重,不会一图两现)
    • 标签:输入后回车,最多 8 个,支持历史标签补全
    • 分类:下拉选择(一篇文章只归一个分类),分类本身在后台「文章 → 分类标签」页签维护
    • Slug:留空自动生成——英文标题转短横线格式(my-first-post),中文标题用「发布日期 + 4 位随机位」(如 20261007-k3fx,按北京时间);重名自动加序号不会发布失败。想自定义就填字母 / 数字 / 中文 / 短横线
    • 置顶:打开后文章在首页列表置顶
    • 定时发布:打开后选一个北京时间(默认一小时后),点「发布」文章进入定时状态——顶栏徽章显示「定时 月-日 时:分」,后台「文章」列表也会归到「定时」标签下。到点后 1 分钟内自动发布并推送 Telegram,前台在此之前完全不可见。取消定时:关掉开关再保存即回草稿
    • 访问密码:打开「加密访问」并填一个密码(最多 64 位),这篇文章就上了锁——访客打开只看到密码输入框,输对才能读全文,解锁状态保留 30 天。密码只在服务端做单向哈希、不会回显;已加密的文章留空保存即保持原密码,直接输入新密码即更换,取消勾选并保存即解除加密。锁定期间正文不进 RSS 全文、搜索也搜不到这篇文章(标题与你自己写的摘要照常展示)
    • 分享卡图:点「生成分享卡图」把标题 + 封面(无封面则深色渐变底)绘成 1200×630 的专属卡图,分享到微信 / Telegram 时显示这张图而不是光秃秃的链接;「移除卡图」回退到封面图
  5. 顶栏「体检」跑一遍排版规范检查(见 第 7 节)
  6. 「存草稿」(或 ⌘/Ctrl + S)随时保存;不点它也会每 1.5 秒自动保存
  7. 「预览」在新标签页以真实主题打开文章(草稿也可以预览,仅自己可见)
  8. 没问题了点绿色按钮「发布」—— 完成,文章即时出现在首页和 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)、![图](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. 采集公众号文章

编辑器工具栏末尾有个微信双气泡图标的按钮——「采集公众号文章」。用途:看到一篇不错的公众号内容想存到自己站上(或转载),不用手动复制粘贴。普通图文和**贴图(图片消息)**都支持——贴图采集后图片在前、文字分段在后,与原页面版式一致。

怎么用:

  1. 复制公众号文章的链接(形如 https://mp.weixin.qq.com/s/…,在微信里点「复制链接」即可)
  2. 点工具栏上的采集按钮,粘贴链接,确认
  3. 服务端抓取正文,把所有配图和封面转存进自己的 R2 图床(不依赖微信的图床,防失效),生成一篇保留原发布时间的草稿,并自动跳转到编辑器
  4. 核对排版和图片,顺手改改摘要 / 标签,点「发布」即可

公众号的封面图通常是正文首图的裁切版(同一张图、不同尺寸)。采集时会自动认出这种情况:封面只放到草稿的封面位,正文里不再重复收这张图,发布后文章页不会一图两现。此前采集的旧文章不受影响,发现重复的话在编辑器里删掉正文里那张即可。

限制(防滥用,都是自动的):

  • 每分钟最多采集 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 步:创建机器人(一分钟):

  1. Telegram 搜索 @BotFather,发送 /newbot
  2. 按提示给机器人起名(显示名)和用户名(必须以 bot 结尾)
  3. BotFather 会回复一串 Bot Token,形如 123456789:AAH8x…,复制它

第 2 步:后台配置(后台「设置 → 外部发布」):

  1. 把 Bot Token 粘进「Telegram Bot Token」,点右上角「保存全部」
  2. 点「保存并一键设置 Webhook」——显示 ✅ 已绑定 @你的机器人 即接入完成(这一步会自动生成 Webhook 密钥并注册到 Telegram,不需要手动操作 BotFather)

第 3 步:授权你自己:

  1. 在 Telegram 里给机器人发一条 /start,它会回复你的 Chat ID(一串数字)
  2. 把这串数字填进「允许发布的 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 次,网址去重,蜜罐防机器人)。

后台「友链」页分两个标签:已收录 / 待审核。

  • 审核:待审核列表里点「通过」即收录上线;如果对方没提供图标,通过后服务端会在后台自动去抓对方的网站图标,不卡你操作
  • 添加友链:点右上角「添加友链」,填站名、网址、简介(可选)。图标有四种给法,随意选:
    1. 自动获取——填完网址点一下,自动抓对方 favicon 存进图床
    2. 上传图片——本地选一张(PNG / JPG / WebP / GIF / ICO,走 R2 图床)
    3. 贴图片地址——在图标输入框里粘一个 https://… 图片链接
    4. 直接粘贴——把复制的图片在弹窗里 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 🙂