Blog 部署流程:从 Docker 到 HTTPS
这篇文章记录本站从零切到线上可访问的完整流程。它不是一份只适合复制粘贴的命令清单,而是我这次实际部署时的路径:先跑起来,再把域名、HTTPS、主题和后台管理慢慢补齐。
1. 架构选型
博客最终选择的是 Typecho + Butterfly 风格主题。
选择 Typecho 的原因很简单:它比 Halo 更轻,后台也足够直接,可以在线写文章、改分类、传附件,不用每次在本地写完再同步到服务器。主题层面保留 Butterfly 这种更接近 Hexo 的视觉风格,首页更清爽,阅读页也更有个人站的感觉。
当前线上结构大致是这样:
用户浏览器
-> sjhibqi.cn / blog.sjhibqi.cn
-> Nginx HTTPS 入口
-> Typecho 博客容器
-> MySQL 数据库AI 主站和博客共用服务器上的 Docker 基础设施,但域名和服务入口分开:
- AI 主站:
https://sjhibqi.cn/ - 博客:
https://blog.sjhibqi.cn/
2. 准备服务器环境
服务器上统一使用 Docker 管理服务。这样后续迁移、重建、回滚都会简单很多,不需要把 PHP、Nginx、MySQL 的环境散装在系统里。
核心服务包括:
test-claw-web:统一的 Nginx HTTPS 入口test-claw-mysql:MySQL 数据库,AI 主站和博客复用不同库typecho-blog:Typecho 博客运行容器
敏感信息没有写进文章,也不应该写进 Git 仓库。数据库密码、访问密钥、证书目录这类内容只保留在服务器配置或被 .gitignore 忽略的文件里。
3. 部署 Typecho
Typecho 本体跑在单独容器里,持久化目录挂载到服务器:
/opt/typecho-blog/html这个目录保存 Typecho 程序、主题、上传文件和本地自定义资源。即使容器重建,只要这个目录和数据库还在,博客内容就不会丢。
数据库使用独立库:
typecho_blog这样博客数据和 AI 主站业务表分开,后续备份、迁移、排查都清楚。
4. 配置域名和反向代理
博客使用二级域名:
blog.sjhibqi.cnNginx 根据 server_name 区分不同站点。博客域名进入 Nginx 后,反向代理到 Typecho 容器:
server {
listen 443 ssl;
server_name blog.sjhibqi.cn;
location / {
proxy_pass http://typecho-blog:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}这里最重要的是 Host 和 X-Forwarded-Proto。Typecho 后台、主题资源、跳转链接都依赖站点地址,如果代理层没告诉它外面是 HTTPS,就很容易出现跳回 HTTP 或资源路径混乱的问题。
5. 申请 HTTPS 证书
HTTPS 使用 Let's Encrypt 证书。证书申请后挂载到 Nginx 容器内,Nginx 直接读取:
/etc/letsencrypt/live/sjhibqi.cn/fullchain.pem
/etc/letsencrypt/live/sjhibqi.cn/privkey.pem同一张证书覆盖了:
sjhibqi.cnblog.sjhibqi.cn
HTTP 入口只保留两个用途:
- Let's Encrypt 的 ACME 校验
- 自动跳转到 HTTPS
也就是访问 http://blog.sjhibqi.cn/ 会自动跳到 https://blog.sjhibqi.cn/。
6. 配置自动续期
证书不是一次申请永久有效,所以服务器上配置了定时续期任务。续期成功后 reload Nginx,让新证书立即生效。
流程是:
定时任务
-> certbot renew
-> nginx -s reload这样证书到期前会自动刷新,不需要手动盯日期。
7. 安装和调整主题
主题使用 Butterfly 风格主题。部署后做了几件调整:
- 设置二次元风格头像
- 设置首页顶图
- 恢复文章、标签、分类入口
- 配置备案号链接
- 修复空文章时主题初始化
views字段导致首页 500 的问题
这个主题有些配置项是存到数据库里的,例如头像、首页图和侧栏入口链接。以后在后台改主题配置时,要注意不要把这些链接清成 #null。
8. 后台内容管理
Typecho 的好处就是后台简单。常用入口:
- 写文章:后台 -> 撰写 -> 撰写文章
- 管理文章:后台 -> 管理 -> 文章
- 管理标签:后台 -> 管理 -> 标签
- 管理分类:后台 -> 管理 -> 分类
- 修改主题:后台 -> 控制台 -> 外观
后续写文章不需要重新部署。登录后台写完发布即可。
9. 这次踩到的问题
这次部署里遇到过几个典型问题:
- HTTPS 证书配置好了,但外网打不开:最后确认是云服务器安全组 443 入方向没放行。
- Typecho 站点地址还是 HTTP:需要把
siteUrl改成https://blog.sjhibqi.cn/。 - 主题配置被写坏后首页 500:Butterfly 配置需要保持主题能识别的格式。
- 文章删空后首页 500:主题用第一篇文章判断字段,空表时会报错,已改成检查表结构。
10. 后续计划
这个博客后面可以继续优化:
- 增加文章封面上传规范
- 做一个更统一的二次元视觉风格
- 加常用代码块样式和目录
- 增加备份脚本,把数据库和上传目录定期备份
- 给后台入口加更严格的访问限制
目前最重要的是:博客已经可以在线写、在线管理、域名 HTTPS 访问,并且内容数据独立持久化。