博客搭建
博客初版完成:给自己的长期系统搭一个入口
记录 dezhi.ai 博客初版上线的目的、技术栈、搭建时间线,以及我希望它以后长成什么样。
为什么要做这个博客
这个博客的第一版终于跑起来了。
我做它不是为了追一个新的模板,也不是为了再多一个展示页面。更真实的原因是:我需要一个长期稳定的地方,放下自己的文章、想法、灵感、任务和那些还没有完全成形的主题。
社交平台适合即时表达,但不太适合沉淀。笔记软件适合私人记录,但不天然面向公开分享。GitHub 适合版本管理,但对日常写作来说又太像工作流。于是我想把这些东西接起来:正式文章可以慢慢写,灵感可以先粗糙地收集,工具可以服务自己的日常,公开内容和私有内容也能各自待在合适的位置。
所以这个博客的目标很简单:它先是我的个人入口,然后慢慢长成一个属于自己的知识系统。
第一版做到了什么
当前这一版先完成了最小可用的骨架。
公开站点负责展示文章、专题和基础页面。文章使用 Markdown 编写,带有标题、描述、发布时间、标签、专题和公开状态。页面上会生成文章列表、文章详情和目录,方便以后写长文。
私人工具区放在 /tools,默认需要登录。它不是一个给所有人使用的产品,而是一个给我自己用的工作台:todo list、脑图、公开内容预览,以及后续的灵感收集和文章整理都会慢慢接到这里。
公开和私有的边界也在第一版里先立住了。todo list 和脑图可以按整张清单或整张脑图设置 public / private。公开内容可以被外部访问,私有内容必须登录后才能查看和编辑。
这不是一个完整产品,但它已经有了清晰的方向。
使用的技术栈
第一版没有选择复杂的云服务,而是尽量用简单、可迁移、可维护的技术组合。
后端使用 Rust、Axum、SQLx 和 SQLite。Rust 负责提供稳定的 API 服务,Axum 处理路由和请求,SQLx 管理数据库访问,SQLite 用来保存动态工具数据。对一个个人站点来说,SQLite 足够简单,也足够可靠。
前端使用 Astro、React 和 TypeScript。Astro 负责内容站点和页面渲染,React 负责工具区里的交互界面,TypeScript 帮助把数据结构和组件边界写清楚。
部署使用 Docker Compose 和 Caddy。Docker Compose 用来编排 Web、API 和反向代理服务;Caddy 负责 HTTPS 证书和反向代理。这样以后迁移 VPS 或者重建环境时,不需要重新手工拼一遍服务。
内容层面,正式文章继续使用 Markdown。它可以被 Git 管理,也方便长期归档。动态工具数据则放进 SQLite,不默认提交到 GitHub。
搭建时间线
第一步是确定边界:公开站点、私人工具站、内容目录、API、部署配置各自放在哪里。这个阶段最重要的不是写代码,而是避免把所有东西混在一起。
第二步是把基础工程跑起来:Rust API 提供健康检查、版本信息、数据库迁移和核心数据表;Astro 前端提供首页、文章列表、文章详情、专题页和工具区入口。
第三步是补上私有能力:管理员初始化、密码登录、TOTP 验证、session cookie、私有 todo list 和脑图的 CRUD,以及公开内容 API。
第四步是把公开展示做完整:公开 todo list、公开脑图、文章 RSS、sitemap、移动端阅读布局,以及工具区里的基础工作台。
第五步是上线部署:准备 VPS、配置 DNS、写 Dockerfile、Docker Compose 和 Caddy 配置,让站点真正通过公网域名访问。
最后一步是把界面品牌调整成现在的方向:以 dezhi.ai 作为长期入口,让站点先以一个能用、能迭代、能部署的状态站起来。
为什么第一版不追求复杂
我刻意没有一开始就做复杂的后台、多人权限、评论系统、全文搜索、可视化编辑器或者花哨的主题系统。
第一版最重要的事情,是把基础链路打通:写作、展示、登录、记录、公开、部署、备份。只要这条链路稳定,后面的功能就可以一点一点长出来。
个人系统最怕一开始就追求宏大,最后变成难以维护的半成品。相比之下,我更愿意让它从一个安静、简单、真实可用的版本开始。
接下来的愿景
我希望它以后不只是一个博客。
它会是一个可以长期写作的地方。正式文章会沉淀成专题,专题会逐渐形成脉络,而不是散落在时间线里。
它也会是一个私人工作台。灵感可以先被快速记下,todo 可以拆解成结构,脑图可以帮助我整理想法。当某些内容变得清晰,就可以从私有工具区整理成公开文章。
它还应该是一个能反复迁移、备份和重建的系统。域名可以换,VPS 可以换,界面可以重做,但内容、数据和结构应该尽量掌握在自己手里。
这就是第一版博客的意义:不是一次性完成一个漂亮网站,而是给未来的写作、思考和创造搭一个稳定入口。
今天它刚刚开始。