个人网站技术实现

2026-06-15 17:26:58

技术栈选型

选用 Rust + Axum 作为后端,SQLite 作为数据库,Tera 模板引擎做服务端渲染,前端用原生三剑客配合 HTMX 做交互增强。

为什么这样选?

  • Rust/Axum:性能好、内存安全、编译时就能发现很多问题。对于 2C2G 的低配服务器,Rust 的静态编译产物运行起来非常轻量,几乎没有运行时开销。
  • SQLite:零配置,单文件,不需要额外维护数据库进程。对于个人网站这种低并发场景完全够用。
  • SSR + HTMX:不写前后端分离,不搞 SPA。服务端直接渲染 HTML,HTMX 在需要局部刷新的地方做增强,开发效率高,维护也简单。

架构设计

传统的 MVC 模式:

浏览器 → Nginx (SSL 反代) → Axum → SQLite

所有页面由后端渲染完整的 HTML 返回,不需要客户端路由。管理后台的表单提交走传统 POST,图片上传用 JS fetch 异步处理。

数据模型分为几个核心模块:

  • 文章:标题、slug、Markdown 正文、渲染后的 HTML、摘要、发布状态
  • 项目:名称、描述、技术栈、链接、排序权重
  • 软件包:包信息 + 多个版本 + 文件上传/下载
  • 站点设置:键值对存储,用于头像、关于页内容、简介等动态配置

路由设计

公开路由就是简单的页面路径,后台路由按资源组织 CRUD。

每个后台路由处理函数的标准流程是:

  1. 验证 JWT Cookie(未登录则重定向)
  2. 查询或写入数据库
  3. 渲染模板或重定向

没有引入复杂中间件,每个路由显式调用鉴权函数,代码流向清晰。

认证方案

采用 JWT + Cookie 的方式。登录成功后在服务端生成 JWT,通过 HttpOnly Cookie 返回给浏览器。后续请求自动携带 Cookie,后台路由从中提取并验证 token。

密码使用 Argon2id 哈希存储,这是目前公认最强的密码哈希算法。

另外加了一个简单的登录保护:1 小时内连续 3 次密码错误会锁定账户,需要 SSH 到服务器执行脚本解锁。虽然是个小站点,但该防的还是要防。

部署

部署在阿里云 2C2G 的 ECS 上,系统 Ubuntu。

  • 后端通过 systemd 托管,崩溃自动重启
  • Nginx 做反向代理和 SSL 终端
  • HTTPS 证书用 Let's Encrypt,certbot 自动续签
  • HTTP 自动 301 重定向到 HTTPS

整个运维成本很低,基本写完代码编译上传就能跑。

← 返回文章列表