一、 引言与架构选型
在个人独立站与技术笔记的建设中,运维的复杂度往往决定了站点的长期存续。传统的 LNMP 脚本部署虽然成熟,但存在依赖耦合、升级困难以及缺乏隔离性的问题。
为了在腾讯云小规格 CVM 上获得极致的稳定性和安全防护能力,我们采用了当前业界成熟的云原生容器化组合方案:
- 边缘反向代理网关:Traefik v3。原生支持 Docker 服务发现、Let's Encrypt 证书自动化 ACME 申请与静默续签;
- 博客 CMS 引擎:Typecho。相比于重量级的 WordPress,Typecho 拥有极其优秀的内存控制力(冷启动仅需数十 MB 内存);
- 前端主题:DUX 主题优化版。具备响应式布局、高信息密度排版与原生 SEO 友好结构。
graph TD
Client["🌐 终端访客 (HTTPS:443)"] --> Traefik["🛡️ Traefik 边缘代理网关 (Docker)"]
Traefik -->|Let's Encrypt ACME| TLS["🔐 泛域名 SSL 自动化管理"]
Traefik -->|内网零拷贝转发 172.22.0.x| Typecho["💻 Typecho 业务容器 (PHP 8.2-FPM)"]
Typecho --> DB[("🗄️ 数据库引擎 (MySQL / SQLite)")]二、 关键组件配置实战
1. Traefik 主网关配置 (traefik.yml)
在 Docker 环境下,Traefik 监听 :80 与 :443 入口点,并强制开启全站 HTTP 到 HTTPS 的 301 重定向:
entrypoints:
web:
address: :80
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
websecure:
address: :443
http:
middlewares:
- secureHeaders@file
- global-compressor@file
tls:
options: default
certResolver: le-dns
domains:
- main: xiongjinghang.com
sans:
- "*.xiongjinghang.com"2. 安全防护头与 Gzip/Brotli 压缩优化 (middlewares.yml)
为了防止恶意扫描、点击劫持以及 XSS 攻击,我们在 Traefik 层统一注入安全响应头,并开启全局压缩以节约带宽:
http:
middlewares:
global-compressor:
compress:
excludedContentTypes:
- "image/png"
- "image/jpeg"
- "image/gif"
minResponseBodyBytes: 1024
secureHeaders:
headers:
sslRedirect: true
forceSTSHeader: true
stsSeconds: 31536000
stsIncludeSubdomains: true
contentTypeNosniff: true
browserXssFilter: true
frameDeny: true
customResponseHeaders:
Server: "nginx"
X-Powered-By: "Typecho"三、 Docker Compose 编排文件
完整的 docker-compose.yml 示例结构如下,通过独立的桥接网络 traefik_proxy 实现各微服务间的网络隔离与受控互联:
version: "3.8"
services:
traefik:
image: traefik:v3.1
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik_data/traefik.yml:/traefik.yml:ro
- ./traefik_data/configurations:/configurations:ro
- ./traefik_data/acme.json:/acme.json
networks:
traefik_proxy:
ipv4_address: 172.22.0.253
typecho:
image: 80x86/typecho:latest
container_name: typecho
restart: always
environment:
- TIMEZONE=Asia/Shanghai
volumes:
- ./typecho_data:/data
networks:
traefik_proxy:
ipv4_address: 172.22.0.6
labels:
- "traefik.enable=true"
- "traefik.http.routers.typecho.entrypoints=websecure"
- "traefik.http.routers.typecho.rule=Host(`www.xiongjinghang.com`) || Host(`xiongjinghang.com`)"
- "traefik.http.routers.typecho.tls=true"
networks:
traefik_proxy:
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/24四、 性能测试与日常维护
- 证书全自动续签验证:
Traefik 会在 SSL 证书到期前 30 天自动通过 DNS-01 或 HTTP-01 挑战完成续期,无需人工介入或配置复杂的 Certbot Crontab。 - 轻量与稳定性:
在 1G 内存服务器上平稳运行 3 个月以上,平均系统负载低于 0.15,内存占用维持在 380MB 左右,非常适合作为个人技术笔记与长期归档平台。
羞羞的铁狼