← 返回文章列表 专栏:网络与容器架构

更新于

个人技术博客架构选型:静态预编译、服务器规格与目录规划

对比动态 CMS、托管平台与静态站点生成器(SSG)的资源开销与维护成本,梳理 1C1G 云主机目录布局、固定链接格式与 YAML 元数据规范。

静态预编译架构与服务器 /srv/blog 目录规划示意
静态预编译架构与服务器 /srv/blog 目录规划示意

搭建个人技术博客时,如果直接在小内存云主机上部署带关系型数据库和动态后台的 CMS,运行一段时间后往往要耗费不少精力处理内存告警、插件更新和数据库备份迁移。

对于以技术长文、架构图解和项目记录为主的站点,更省心的做法是把 Markdown 编译、全文索引生成、站点地图构建与链接检查放在构建阶段完成;线上服务器只运行一个只读挂载的 nginx:alpine 容器分发静态文件。本文记录建站前的选型对比、服务器目录规划与固定链接约定。

建站目标与维护边界

在选型框架或购买云主机前,先明确个人技术站点的三项基础维护原则:

  1. 内容归档在本地 Git 仓库:所有文章正文、代码示例、项目数据与架构配图,统一使用标准 Markdown(.md)、数据文件(.yml / .json)和矢量图形(.svg)存储在版本库中,避免绑定在特定平台的私有格式或数据库字段里,便于长期备份与迁移。
  2. 线上环境只读且无动态后端:线上服务器不运行 MySQL、PostgreSQL、PHP-FPM 或常驻 Node.js 进程。Markdown 编译、全文索引生成、站点地图构建与静态检查全部在构建期完成;线上仅用单个 nginx:alpine 容器以只读卷(:ro)挂载静态产物,常驻内存不到 25 MB。
  3. 版面服务于长文阅读与检索:长文页面优先保障章节目录定位、代码块复制、宽表横向滚动与架构图清晰度,减少无关的悬浮组件。

架构方案对比:动态 CMS、托管平台与静态生成(SSG)

目前常见的个人建站方案主要分为三类:第三方托管平台、传统动态内容管理系统(WordPress / Ghost / Halo)以及静态站点生成器(Astro / VitePress / Next.js Static Export)配合容器化 Nginx 托管。

动态 CMS 运行时链路与现代静态预编译加只读容器托管架构对比图
动态 CMS(上)每次请求均需经过应用层与数据库,内存开销与维护面较大;静态预编译架构(下)在构建期完成渲染与检查,线上仅通过只读 Nginx 容器分发静态产物。

下表从五个维度对比三类方案的实际运行差异:

评估维度 传统动态 CMS(WordPress / Halo) 第三方内容平台(Notion / 托管 SaaS) SSG 静态预编译 + Docker Nginx 只读托管
线上运行时依赖 Web 服务器 + 动态语言运行时 + 关系型数据库 依赖外部平台接口可用性与同步速率 仅单个 nginx:1.27-alpine 容器
生产常驻内存 450 MB ~ 1.5 GB(1C1G 主机容易触发 OOM) 无需自备主机,但自定义域名与路由受限 约 15 MB ~ 25 MB
首屏响应延迟(TTFB) 80 ms ~ 400 ms(受数据库查询与模板拼接影响) 150 ms ~ 600 ms(受跨区接口渲染影响) 5 ms ~ 18 ms(内核 sendfile 直接返回)
安全暴露面 管理后台登录口、第三方插件漏洞、SQL 注入面 平台规则变动或服务调整风险 无数据库、无动态后台、容器挂载目录 :ro 只读
故障恢复耗时(RTO) 需重装环境、恢复数据库快照与媒体附件 取决于平台自身恢复进度 10 秒内拉起容器并切换 releases/current 软链接

云服务器规格、操作系统与目录规划

采用「静态预编译 + Docker Nginx 容器托管」方案时,对服务器硬件配置的要求很低:

1. 服务器规格与操作系统选型

  • CPU 与内存:1 vCPU / 1 GB RAM 或 2 vCPU / 2 GB RAM 即可支撑日常静态页面与图片访问,同时还有余量运行 Uptime Kuma、Umami 等轻量自托管容器。
  • 磁盘容量:20 GB ~ 40 GB SSD 系统盘。Ubuntu 24.04 系统与 Docker 镜像约占 4.5 GB,多版本静态产物与压缩日志仅占数百兆。
  • 操作系统发行版:建议选择 Ubuntu 24.04 LTS(Noble Numbat)或 Debian 12(Bookworm),具备稳定的 systemd 服务管理、官方 Docker 软件源以及 5 年以上的安全更新支持。

2. 生产服务器目录结构(/srv/blog)

为了避免将站点文件散落在 /root 或个人主目录中,可参照 Linux FHS 约定,在 /srv/blog(下文统称 <站点根目录>)下建立支持多版本回滚的目录树:

1
2
3
4
5
6
7
8
9
10
11
12
/srv/blog/                       # 生产站点根目录(<站点根目录>)
├── compose.yaml # Docker Compose 容器编排文件
├── bin/
│ └── deploy-release.sh # 支持健康检查与快速回滚的发布脚本
├── conf/
│ └── default.conf # Nginx 路由、缓存与安全响应头配置(:ro 只读挂载)
├── certs/ # acme.sh 自动签发与续期的 ECC TLS 证书目录(:ro 只读挂载)
├── logs/ # Nginx 访问与错误日志目录(由宿主机 logrotate 定期切分)
└── releases/ # 历史静态产物版本目录(默认保留最近 5 个版本)
├── 20260901-101500/ # 历史构建版本 A
├── 20260905-143000/ # 历史构建版本 B
└── current -> /srv/blog/releases/20260905-143000 # 指向当前生效版本的软链接

源码编译与线上运行由此分开:生产服务器上不安装 Node.js,不存放 node_modules 或草稿文件;每次在本地或 CI 环境完成构建与检查后,只把生成的 public/ 同步到服务器的 releases/<新版本号>/,核验通过后用 ln -sfn 切换 current 软链接。

URL 路由与 Front Matter 元数据约定

在开始写文章前,建议先固定 URL 路由格式与 Front Matter 字段,避免日后迁移或改版时出现批量断链:

1. 无日期永久链接(/posts/<slug>/)

不少早期博客默认生成的 URL 带有年月日层级(如 /2026/09/01/my-post/)。后续一旦修订文章并调整了发布日期,原有链接就会变成 404。

将文章永久链接固定为 /posts/<slug>/(例如 /posts/linux-systemd-guide/)更为稳妥:

  • URL 仅由英文文件名(Slug)决定,与发布日期无关;
  • 构建产物统一输出为目录索引格式 public/posts/<slug>/index.html,Nginx 按标准目录索引即可直接返回,无需配置复杂的正则重写。

2. Front Matter 元数据字段

每篇 Markdown 文章顶部包含统一的 YAML Front Matter,并显式声明 draft 与 published 状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
title: 文章标题:点明核心技术主题与解决的问题
date: 2026-09-01 10:18:42
updated: 2026-09-03 19:42:15
draft: false
published: true
featured: true
categories:
- 网络与容器架构
tags:
- Linux
- Docker
cover: /images/covers/cover-01-planning.webp
cover_alt: 描述封面图内容的替代文本
description: 概括文章解决的问题与核心内容(用于页面摘要与 SEO 描述)。
---

建站与运维实施模块拆分

整套建站与服务器运维流程按底层系统、静态工程与容器网关划分为三个部分:

模块划分 核心主题与关联文章 涉及技术栈 交付结果
Linux 与网络基础 ・Linux 文件系统(FHS)、权限模型与 Systemd 服务管理
・Ubuntu 24.04 初始化、SSH 双端口切换与 UFW 防火墙加固
・DNS 解析记录、TCP BBR 拥塞控制与 ACME 证书自动续期
Ubuntu 24.04、POSIX 权限、systemd、OpenSSH、UFW、dig、TCP BBR、acme.sh 完成 SSH 密钥加固、防火墙收敛、BBR 开启与 ECC HTTPS 证书自动续期的 Linux 主机
静态构建与前端实现 ・Astro 静态构建流程、多环境配置与固定链接规范
・CSS 色彩变量、明暗主题切换与字体排印配置
・长文双栏响应式网格、Sticky 目录高亮与代码块交互
・Markdown 写作规范、SVG 架构图制作与构建前自动检查
・本地全文检索防竞态处理与 Canvas 知识图谱渲染
Astro 5、TypeScript、CSS Variables、WCAG AA、CSS Grid、HTML5 Canvas 具备明暗主题切换、构建期静态检查、全文检索与知识图谱的静态站点工程
Docker 与 Nginx 运维 ・Docker 镜像分层、自定义 Bridge 网络与数据卷挂载
・Nginx 进程模型、location 匹配优先级与缓存策略
・Docker Compose 编排只读 Nginx 容器托管静态站点
・Docker 容器自愈、Logrotate 日志轮转与原子发布脚本
・Web 站点六层故障排查清单:从 DNS 到宿主机内核
Docker Engine、Compose v2、nginx:alpine、只读挂载、logrotate + USR1、Bash set -euo pipefail 内存占用低于 25 MB 的只读 Nginx 容器、发布回滚脚本与故障排查清单

建站前基础环境核对表

在开始配置服务器与初始化代码仓库前,先确认以下四项基础环境已经就绪:

准备项 推荐配置 用途说明
代码版本库 GitHub / GitLab 仓库(配置本地 .githooks/pre-commit) 管理文章 Markdown 源码版本,拦截误提交的敏感配置
云服务器实例 Ubuntu 24.04 LTS(1C1G 或以上,具备公网 IPv4/IPv6) 运行 Docker Engine 与 Nginx 容器
域名与 DNS 托管 独立域名(托管于支持 API 续期的 DNS 服务商) 配置 A/AAAA/CAA 记录与 acme.sh DNS-01 证书自动续期
本地终端工具 OpenSSH 客户端、rsync、Node.js LTS 与 Git 用于本地编译预览、静态检查与远程增量同步