01 为什么又造一个“轮子”?
写博客的第 5 年,我把自己的博客从 Typecho 迁移到了 WordPress,后来又用 Ghost、Hexo、Halo 通通试了个遍。
痛点一直没解决:
太重:WP 自带 40+ 张表,只想安安静静写篇文章,却被 200 MB 的源码吓到;
太“黑盒”: Ghost 好看,但想改个“相关文章”逻辑得翻 3 层 Promise;
部署折腾:静态博客每次
hexo d都像在考验记忆力,CI 配不好就原地爆炸。
于是,2025年10月10日,我决定“自己搓一个博客程序”——ArtikBlog 的名字来自 Article + Blog,寓意“让文章回归纯粹”。10 月 14 日,v1.0 正式冻结代码,写下这篇开源手记,算给自己这五年的一个交代。(只完成了大概功能,上线使用还得一段时间)
02 产品定位:只解决 3 个问题
一句话总结:“个人博主够用,二开同学不骂娘。”
03 技术选型:把“轻量”写进 DNA
后端:PHP 7.2+
无框架,MVC 自己搭,路由 60 行代码搞定;
模板引擎直接原生 PHP +
<?= $var ?>,省掉编译缓存;所有 SQL 手写,用到外键的地方全上
InnoDB+utf8mb4,Emoji 不乱码。
前端:HTML5 + CSS3 + jQuery 3.6
响应式一套代码通杀 320 px ~ 4K 屏;
没上 React/Vue,SEO 直接交给蜘蛛,不折腾 SSR。
安全:
密码
password_hash()+password_verify();参数化查询全覆盖,XSS 用
htmlspecialchars()暴力转义;后台所有表单 100% 带
_token,CSRF 无缝拦截。
04 系统架构:6 个模块,一目了然
浏览器 → View(主题) → Controller → Service → Model → MySQL
所有控制器 <= 300 行,不玩“一行命令生成 20 个文件”的魔法,保持“能肉眼 Debug”的底线。
05 数据模型:8 张表,关系清晰
users 1 ── n articles
articles n ── 1 categories
articles n ── n tags (via article_tags)
articles 1 ── n comments用户表:区分
role=0/1,普通用户只能删自己文章;文章表:支持
status=0 草稿/1 发布,定时上线;评论表:游客评论
user_id=0,后台可批量审核。
06 亮点功能拆解
文章 URL 自动 Slug
中文标题这是中文标题→zhe-shi-zhong-wen-biao-ti,支持自定义别名。
钩子(Hook)系统
在 article_footer、comment_before 等 12 个节点注入代码,例如加 Google AdSense:
<?php Hook::listen('article_footer', function(){ ?>
<script async src="https://pagead2.googlesyndication.com/..."></script>
<?php }); ?>一键更新
后台点击“检查更新”,下载补丁包 → 自动解压 → 执行/sql/patch.sql→ 刷新 Opcache,全程 5 秒。操作日志
记录登录、删文章、改配置 3 类事件,支持导出 CSV,给安全审计留痕。
07 性能&压测
环境:1 vCPU / 1 GB RAM / 10 Mbps
工具:wrk -t4 -c200 -d30s
不开 Redis 缓存也能跑,个人小水管主机足够。
08 如何体验?
暂时还没有公布出来,后续测试没有大问题就发布。
09 RoadMap
10 写在最后
ArtikBlog 不是下一个 WordPress,也无意挑战 Ghost。它只想做一件小事:
“让想写博客的人,30 秒上线,一辈子不用迁库。”
如果你也厌倦了“花里胡哨”,欢迎在本文评论区发表建议。
愿我们都回到“内容 > 工具”的年代。
评论区欢迎:
提需求
分享你的二开主题
吐槽“这功能我也能写”
欢迎大家提建议
评论