编辑
2026-10-25
项目分享
00

简介

Typecho 是一个轻量级的 PHP 博客程序,最早发布于 2008 年,国内老牌个人博客系统之一。它的特点是「小」:程序本体只有几百 KB,装上就能用,后台简洁,对服务器要求极低。

核心特点与优势:

  • 体积极小:官方 1.3.0 的安装包 typecho.zip 只有约 565 KB,1 核 1G 甚至更低配的服务器、虚拟主机都能跑,加载快。

  • 安装简单:上传源码 → 建数据库 → 浏览器访问 install.php,五分钟走完。

  • 数据库自由:MySQL、PostgreSQL、SQLite 都支持,小站用 SQLite 连数据库服务都不用装。

  • 后台克制:文章、分类、标签、页面、评论、外观、插件,没有多余模块,写博客够用。

  • 主题插件生态稳定:主题放 usr/themes/,插件放 usr/plugins/,上传启用即可,不需要重新构建。

  • 原生静态化友好:配合 Nginx 伪静态,文章 URL 可以做成 /archives/123/ 或 /posts/slug.html 这种干净形式。

需要说明的局限:

  • 动态 PHP 程序,必须有服务器或虚拟主机,不能部署到 GitHub Pages。
  • 插件数量远少于 WordPress,很多需求要改主题或写插件。
  • 官方迭代节奏慢,新特性少,但核心稳定、安全更新一直在跟。

和 WordPress 的取舍:

维度TypechoWordPress
资源占用极低,小内存机器可跑较高,插件多了更明显
上手速度装完即用,后台简单功能多但选项也多
插件生态少而精覆盖一切需求
安全面代码少、攻击面小插件和主题是主要风险来源
适合个人纯写作、低配机器需要复杂功能、多人运营
编辑
2026-10-25
项目分享
00

简介

Hexo 是一个基于 Node.js 的静态博客框架,2012 年发布,中文社区里普及度最高的博客工具之一。它把 source/_posts/ 里的 Markdown 文章、EJS / Pug 模板和 _config.yml 配置,生成成 public/ 下的纯静态站点。

核心特点与优势:

  • 上手路径固定:hexo init 一条命令生成完整项目,hexo new 建文章,hexo server 本地预览,hexo generate 出产物,四步就能跑通。

  • 中文资料最多:遇到的主题、插件、报错,基本都能搜到中文答案,这是它相对 Hugo、Astro 最实际的优势。

  • 主题生态丰富:NexT、Butterfly、Fluid、Volantis 等主题功能齐全,分类、标签、归档、搜索、评论基本都是配置项。

  • 插件体系成熟:RSS、sitemap、搜索索引、部署、图片处理都有现成插件,npm install 后改配置即可。

  • 一键部署:hexo-deployer-git 可以把 public/ 直接推到 GitHub Pages 或任意 Git 仓库,不用自己写同步脚本。

  • 模板灵活:页面和布局用 EJS,需要深度定制时比 Hugo 的 Go 模板更容易找到参考。

需要提前知道的几点:

  • 依赖 Node.js,本地和 CI 都必须有 Node 环境。
  • 构建速度不如 Hugo:文章几百篇时是秒级,上千篇会明显变慢。
  • 部分插件更新不活跃,Node 大版本升级后可能出现兼容问题,升级前要留旧版本可回退。

和 Hugo 的取舍:

维度HexoHugo
运行时Node.js单二进制
构建速度秒级,文章多时变慢毫秒级到亚秒级
中文主题 / 教程最多多
定制方式EJS / Pug + 插件Go 模板 + shortcode
依赖管理npm,存在插件老化风险无依赖,升级简单
部署静态产物 + 一键 git 部署静态产物
编辑
2026-10-25
项目分享
00

简介

docsify 是一个用 JavaScript 写的「运行时文档站渲染器」。它和 Hugo 这类静态网站生成器最根本的区别是:它不构建。仓库里只有一个 index.html 和一堆 Markdown 文件,访问页面时由浏览器里的 docsify 按路由去请求对应的 .md,在前端转成 HTML 显示出来。

换句话说,Hugo 是「把 Markdown 编译成 HTML 再部署」,docsify 是「把 Markdown 原样部署,打开网页时再编译」。

核心特点与优势:

  • 零构建:没有 hugo、没有 Actions 构建步骤、没有 public/ 产物。改完 .md 推上去就是最终状态,构建这一步彻底消失。

  • 一条 index.html 撑起全站:主题、导航、封面、插件全靠 window.$docsify 配置和几个 _ 开头的约定文件(_sidebar.md、_navbar.md、_coverpage.md)。

  • 文件即内容:新增一篇文章就是新增一个 .md,然后在侧边栏加一行链接,不需要生成页面、不需要重新编译。

  • 对多端写作极其友好:手机浏览器打开 GitHub 网页,编辑一个 .md 文件点 Commit,几十秒后线上就是新内容,全程不碰命令行。

  • 插件体系:官方内置搜索、代码复制、图片缩放、Disqus / Gitalk 评论、GA4 统计,另有社区插件补翻页、标签等能力。

  • 部署门槛最低:任何能托管静态文件的地方都能放,GitHub Pages 连 CI 都不需要。

  • 主题可改:v5 主题基于 CSS 变量,改颜色、字体只需要覆盖几个 --xxx 变量。

但从「个人博客」角度看,必须先把它的局限说清楚,否则写到一半会想换框架:

维度docsifyHugo
构建无,浏览器运行时渲染有,产出完整静态 HTML
博客能力无原生分页 / 标签 / 归档 / RSS,都要自己维护或找插件内置 taxonomy、分页、RSS、sitemap
导航手写 _sidebar.md,加文章要手动加一行自动按目录和日期生成
SEO弱:单页应用 + 哈希路由,搜索引擎只认一个 index.html强:每篇文章都是独立 HTML
每页 meta全站共用一份 index.html 的 meta每页独立 title / description / OG
写作体验改完即生效,手机也能直接改需要本地或 CI 构建
适合场景文档、笔记、知识库、少量文章的个人站有内容流、要被搜到的正式博客

结论:docsify 能当个人博客用,但它本质是文档站。文章数量少、不指望搜索引擎带流量、主要在电脑和手机上记录时,它比 Hugo 省事得多;要长期按时间流更新、要被搜到,就该回到 Hugo / Astro 那条线。

编辑
2026-10-25
项目分享
00

简介

Hugo 是一个用 Go 语言编写的开源静态网站生成器。它的核心作用是把你用 Markdown 写的文章内容、模板文件和配置设置,转换成完整的、由纯 HTML、CSS 和 JavaScript 构成的静态网站。

核心特点与优势:

  • 极速生成: 这是 Hugo 最著名的特点。得益于 Go 语言的高效,Hugo 生成网站的速度极其快,通常只需要毫秒级的时间,即使是拥有成千上万页面的超大型网站。这使得开发和内容更新体验非常流畅。

  • 简单易用:

    • 安装简单:通常只需下载一个二进制文件即可运行,无需复杂的运行环境(如 PHP、Ruby、Node.js)。

    • 内容管理简单:内容通常用 Markdown 格式编写(.md 文件),结构清晰。

    • 配置清晰:主要配置文件是 config.toml/config.yaml/config.json,易于理解和修改。

  • 跨平台: 作为一个独立的二进制文件,Hugo 可以在 Windows, macOS, Linux 等主流操作系统上完美运行。

  • 强大的灵活性:

    • 模板引擎: 使用 Go 的 html/template 库,功能强大且灵活,可以创建复杂的布局和功能。

    • 内容组织: 通过灵活的目录结构和 Front Matter(文件顶部的元数据块,如 YAML, TOML, JSON)来组织内容、定义变量(标题、日期、标签、分类等)。

    • 主题系统: 拥有丰富的主题生态系统,用户可以直接使用或自定义主题来快速改变网站外观。

    • 短代码: 允许在 Markdown 内容中嵌入可重用的自定义 HTML 片段或复杂功能。

  • 安全性高: 生成的网站是纯静态文件,没有数据库或服务器端脚本执行,因此不易受到常见的动态网站攻击(如 SQL 注入、PHP 漏洞等)。

  • 部署简单: 生成的静态文件可以轻松部署到任何支持托管静态文件的服务器或服务上,例如 Netlify, Vercel, GitHub Pages, GitLab Pages, AWS S3, Cloudflare Pages 等,通常免费或成本极低。

  • 活跃的社区: 拥有一个庞大且活跃的社区,提供丰富的文档、主题、教程和支持。

编辑
2026-10-25
学习记录
00

SSO 实战系列(2/3):上一篇聊选型,这一篇直接给 Spring Boot 接 Keycloak 的完整配置。

示例环境:Spring Boot 3.5.x、Spring Security 6.5.x、Keycloak 26.8.x、Java 21、Maven。如果你在使用 Spring Boot 4.x / Spring Security 7,核心配置基本一致,但部分旧 DSL 已移除,迁移时以官方指南为准;如果项目还在 Spring Boot 2.x / Spring Security 5.x,OAuth2 登录流程相同,但安全配置 API 差异较大,不要直接复制本文的 SecurityFilterChain。

上篇我们对比了 Keycloak 和 MaxKey。这一篇不再讨论选型,直接回答一个问题:

一个 Spring Boot 项目,怎么用最少的代码接入 Keycloak,并正确处理角色、注销、前后端分离和微服务调用?