01 为什么又造一个“轮子”?

写博客的第 5 年,我把自己的博客从 Typecho 迁移到了 WordPress,后来又用 Ghost、Hexo、Halo 通通试了个遍。
痛点一直没解决:

  1. 太重:WP 自带 40+ 张表,只想安安静静写篇文章,却被 200 MB 的源码吓到;

  2. 太“黑盒”: Ghost 好看,但想改个“相关文章”逻辑得翻 3 层 Promise;

  3. 部署折腾:静态博客每次 hexo d 都像在考验记忆力,CI 配不好就原地爆炸。

于是,2025年10月10日,我决定“自己搓一个博客程序”——ArtikBlog 的名字来自 Article + Blog,寓意“让文章回归纯粹”。10 月 14 日,v1.0 正式冻结代码,写下这篇开源手记,算给自己这五年的一个交代。(只完成了大概功能,上线使用还得一段时间)


02 产品定位:只解决 3 个问题

问题

传统方案

ArtikBlog 做法

安装麻烦

上传→建库→导入 SQL→改配置,N 步教程

浏览器访问 /install.php 30 秒完成

体积臃肿

WP 自带主题 + 插件 200 MB+

核心代码 < 6 MB,一张 InnoDB 业务表都没冗余

二开困难

钩子系统复杂,文档缺失

内置 12 个 Hook 点,原生 PHP 语法即可注入

一句话总结:“个人博主够用,二开同学不骂娘。”


03 技术选型:把“轻量”写进 DNA

  1. 后端:PHP 7.2+

    • 无框架,MVC 自己搭,路由 60 行代码搞定;

    • 模板引擎直接原生 PHP + <?= $var ?>,省掉编译缓存;

    • 所有 SQL 手写,用到外键的地方全上 InnoDB + utf8mb4,Emoji 不乱码。

  2. 前端:HTML5 + CSS3 + jQuery 3.6

    • 响应式一套代码通杀 320 px ~ 4K 屏;

    • 没上 React/Vue,SEO 直接交给蜘蛛,不折腾 SSR。

  3. 安全:

    • 密码 password_hash() + password_verify()

    • 参数化查询全覆盖,XSS 用 htmlspecialchars() 暴力转义;

    • 后台所有表单 100% 带 _token,CSRF 无缝拦截。


04 系统架构:6 个模块,一目了然

浏览器 → View(主题) → Controller → Service → Model → MySQL

模块

核心文件

职责

用户管理

UserController.php

注册、登录、角色、锁定

文章管理

ArticleController.php

发布、草稿、历史版本、搜索

分类/标签

CategoryController.php

层级分类、多对多标签

评论系统

CommentController.php

游客/用户双模式、验证码、审核

主题市场

ThemeController.php

一键上传、钩子注入、配色在线预览

系统配置

ConfigController.php

站点信息、上传限制、SMTP、日志

所有控制器 <= 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 亮点功能拆解

  1. 文章 URL 自动 Slug
    中文标题 这是中文标题zhe-shi-zhong-wen-biao-ti,支持自定义别名。

钩子(Hook)系统
article_footercomment_before 等 12 个节点注入代码,例如加 Google AdSense:

<?php Hook::listen('article_footer', function(){ ?>
    <script async src="https://pagead2.googlesyndication.com/..."></script>
<?php }); ?>
  1. 一键更新
    后台点击“检查更新”,下载补丁包 → 自动解压 → 执行 /sql/patch.sql → 刷新 Opcache,全程 5 秒。

  2. 操作日志
    记录登录、删文章、改配置 3 类事件,支持导出 CSV,给安全审计留痕。


07 性能&压测

环境:1 vCPU / 1 GB RAM / 10 Mbps
工具:wrk -t4 -c200 -d30s

指标

结果

QPS

1 950

95% Latency

38 ms

内存占用

11 MB( Opcache 开启)

不开 Redis 缓存也能跑,个人小水管主机足够。


08 如何体验?

暂时还没有公布出来,后续测试没有大问题就发布。


09 RoadMap

版本

时间

功能

v1.1

2026-01

暗黑模式、Markdown 即时预览、自动备份到 S3

v1.2

2026-03

会员付费订阅、Webhook 评论通知、插件市场

v2.0

2026-06

前后端分离(Vue3 + Vite),REST & GraphQL 双协议


10 写在最后

ArtikBlog 不是下一个 WordPress,也无意挑战 Ghost。它只想做一件小事:
“让想写博客的人,30 秒上线,一辈子不用迁库。”

如果你也厌倦了“花里胡哨”,欢迎在本文评论区发表建议。
愿我们都回到“内容 > 工具”的年代。


评论区欢迎:

  • 提需求

  • 分享你的二开主题

  • 吐槽“这功能我也能写”

欢迎大家提建议