这是「把自己部署到互联网上」系列的第 33 篇。
从第 26 篇到第 32 篇,我把个人博客上线前很关键的一段走完了。
这一段主要解决三个问题:
- 网站如何可信访问
- 资源如何长期承载
- 博客如何真正跑起来
可信访问这条线包括 HTTPS、SSL 证书、通配符证书和 acme.sh
资源承载这条线包括对象存储、桶策略、JSON 配置和域名访问控制
博客运行这条线包括 Docker 部署、数据库连接、迁移和管理员初始化
写到这里,我的博客开始具备上线条件了。注意,是具备上线条件,后续还要持续完善。
具备上线条件,意味着核心链路已经打通:能访问,能通过 HTTPS 访问,能运行,能存数据,能管理内容,能承载图片和附件。
25 篇之前,我解决的是什么
在第 25 篇之前,我主要解决部署架构问题:
- Conda 还是 Docker?
- Docker 和 Compose 分别负责什么?
- Nginx 装系统里还是放容器里?
- 为什么不用每个项目一个 Nginx?
- 全局 Nginx 如何统一管理多个项目
最后形成的结构是:Docker 管项目运行,Compose 管项目内部服务,全局 Nginx 管公网入口。
26 篇之后,部署博客项目
从第 26 篇开始,我进入博客上线阶段。
因为项目上线能跑,不代表它适合正式对外访问
正式访问还要考虑 HTTPS 是否正常、证书是否可维护、图片和附件放在哪里、对象存储权限是否安全、博客容器是否能跑、数据库是否初始化、管理员后台是否可用、数据是否持久化。
HTTPS 解决的是可信赖访问
以前我也会觉得 HTTPS 是上线后的优化,先让网站能访问,再慢慢配证书。
但对个人博客这种长期入口来说,HTTPS 应该是正式上线的一部分。
它不只是加密,还关系到浏览器提示、后台登录、现代 Web 能力、搜索和分享链接。
一个准备长期对外展示的博客,如果打开时浏览器提示“不安全”,基础体验会被直接打断。
证书管理解决的是长期维护
第 27 篇写了单域名证书申请、下载和部署流程:
申请证书,验证域名,下载证书和私钥,放到全局 Nginx 的证书目录,配置 443,检查 Nginx,reload,最后验证 HTTPS
这个流程能跑通第一次 HTTPS。
通配符证书
手动证书只是第一步。如果后面有多个子域名,或者证书需要定期续期,手动处理会变成负担。
所以第 28 篇继续写了通配符证书和 acme.sh。
通配符证书解决多子域名覆盖,DNS API 解决自动验证,acme.sh 解决签发、安装和自动续期,
全局 Nginx 负责统一入口和证书引用。
这样 HTTPS 才不只是“能配好一次”,而是具备长期自动维护的能力。
对象存储
对象存储解决的是资源承载。
第 29 篇写了为什么个人博客也需要对象存储。
长期写技术文章后,截图、部署图、项目预览图、附件和封面图会越来越多。如果全放服务器本地,会带来磁盘增长、迁移麻烦、备份边界混乱和带宽压力。
对象存储把图片、附件和静态资源从应用服务器拆出来,让应用服务器专注运行服务和管理内容。
对象存储访问策略
第 30 篇继续写了桶策略、JSON 配置和域名访问控制。
对象存储真正容易踩坑的地方是访问权限:
- 公开资源可以公开读
- 私有资源不能误公开
- 自定义域名要配 DNS 和 HTTPS
- 防盗链和 CORS 要按需配置
Docker 部署个人博客
第 31 篇开始真正用 Docker 部署个人博客,从目录规划、代码拉取、.env、Dockerfile、docker-compose.yml、数据库、启动、日志,到全局 Nginx 接入、DNS 和 HTTPS 验证。
一步一步的实施,让博客从基础设施规划进入真实运行。
理数据库、迁移和管理员初始化问题
第 32 篇继续处理数据库、迁移和管理员初始化问题:
- 数据库地址不能写错,Docker 内部不要误用
localhost - 初始化变量不一定每次重新生效,迁移要执行,管理员账号要创建,数据卷要确认,初始化脚本不要重复乱跑。
这些处理完后,博客才不仅是能访问,而是开始具备能投入生产的条件:
能写文章,能保存数据,能登录后台,能持续维护。
小结:
这一阶段最大的变化,是我对“上线”的理解变得更具体。
以前可能会觉得页面能打开就是上线。现在我更倾向于这样定义:上线不是页面能打开,而是核心链路可用、可信、可维护。
真正的上线条件至少包括:
域名能解析,服务器能访问,Nginx 能接流量,HTTPS 正常,证书可续期,应用容器正常,数据库连接正常,数据结构初始化完成,管理员后台可用,数据持久化明确,图片和附件有资源承载方案,基础日志能查看
踩过的几个坑
-
把 HTTPS 当成上线后的优化。后面再补不是不行,但对长期入口来说,越早统一越好。否则文章链接、资源地址、分享链接、后台登录都会受影响。
-
把对象存储当成云端文件夹。对象存储有权限、桶策略、公开读和私有读、自定义域名、防盗链、CORS。不了解这些,资源要么访问不了,要么开放过度。
-
容器 running 就以为部署完成。
docker compose ps全是 running,不代表服务可用。数据库可能没初始化,迁移可能没执行,后台可能进不去,静态资源可能加载失败,数据可能没有持久化。部署完成要看业务链路,不只看容器状态。
现在还剩一些收尾的工作。
本地工具如何连接 Docker 里的数据库
数据库不能直接暴露公网,但排查和维护时可能需要用 Navicat 或其他工具查看数据。
静态资源问题
页面能打开,打开 F12,还会报一些静态资源404,尤其接入对象存储后,还会有路径、权限、跨域和混合内容问题。
防爬和异常访问
博客上线后会遇到爬虫、扫描和异常请求,需要日志和基础防护。
发文流程
博客最终要服务内容发布,写文章、上传图片、发布、归档、同步到公众号或专题,这条流程也要跑顺。
所以,从 HTTPS 到对象存储,再到 Docker 部署和数据库初始化,这一阶段让我确认:博客已经不只是服务器上的一堆配置。它开始具备写文章、被访问、保存数据和长期维护的基本条件。
下一篇写一个很具体的需求:Navicat 如何连接 Docker 里的数据库。部署完成后,能否安全、方便地查看和维护数据库,会直接影响后续排查效率。
本文由 楸木 原创,转载请注明出处。