分类

把自己部署到互联网上

为什么我没有给每个项目都起一个 Nginx 容器

这是「把自己部署到互联网上」系列的第 22 篇。

上一篇讨论了 Nginx 的部署方式:系统安装,还是放进 Docker 容器。

我的结论是:

如果只是单项目、传统部署,系统 Nginx很好;如果像我这样准备在一台服务器上跑多个 Docker 项目,并希望统一入口、减少公网端口暴露、提升迁移清晰度,容器化 Nginx更适合。

比如博客一个 Nginx,官网一个 Nginx,作品站一个 Nginx,后台服务一个 Nginx。每个项目都自带入口,看起来独立,也符合“项目自包含”的直觉。

我一开始也考虑过这个方案,之前也确实这么干过,一个应用配套一个 Nginx, 但最后没有这么做。

单看一个...

我的最终方案:全局 Nginx 统一管理多个项目

这是「把自己部署到互联网上」系列的第 23 篇。

前两篇连续讨论了 Nginx:第 21 篇讲 Nginx 应该装在系统里,还是放进 Docker 容器;第 22 篇讲为什么我没有给每个项目都起一个 Nginx 容器。到这里,思路已经明确。

我的个人服务器后面不只跑博客,还可能跑个人官网、作品站、小工具和实验项目。如果每个项目都各自暴露端口、处理 HTTPS、维护 Nginx 配置,后面会越来越难管理。

所以我的最终方案是:全局 Nginx 统一管理多个项目的公网入口

这篇不是最终配置文件,而是后续部署博客和官网时遵循的整体架构。下一篇再进入公共网络、配置文件和启动检查。

主要解决的问...

全局 Nginx 容器实战:公共网络、配置文件与启动检查

这是「把自己部署到互联网上」系列的第 24 篇。

上一篇我确定了 Nginx 方案:

  • 用一个全局 Nginx 统一管理多个项目的公网入口
  • 公网只进入 80 和 443,Nginx 根据域名把请求转发到不同项目
  • 每个项目内部仍然用 Docker Compose 管理应用、数据库和数据卷
  • 数据库不暴露公网
  • 证书集中管理
  • 新增项目按统一规则接入

这一篇开始落到操作层面。目标是先把全局 Nginx 容器跑起来,确认它具备接入多个项目的基础能力:能占用 80 和 443,配置文件在宿主机可维护,加入公共 Docker 网络,日志能查看,配置能检查,也能安全 reload

开始前,-服务器已经...

从 Conda 到 Docker,再到全局 Nginx,我终于理清了部署架构

这是「把自己部署到互联网上」系列的第 25 篇。

从第 18 篇到第 24 篇,我一直在处理一个问题:

个人博客到底应该怎么部署

这个问题看起来只是技术选型,但会直接影响后续维护。如果部署架构一开始就很散,后面新增项目、修改配置、迁移服务器、排查故障,都会消耗大量精力。所以这一阶段我没有急着把博客跑起来,而是先把部署方式理清楚。

这几篇大致走过三步

  • 先在 Conda 和 Docker 之间做选择
  • 再复盘为什么放弃 Conda 部署,转向 Docker
  • 最后确定用全局 Nginx 统一管理多个项目入口

到现在,我的基本方案可以概括为一句话:

Docker 管项目运行,Docker ...

个人网站为什么也需要 HTTPS?

这是「把自己部署到互联网上」系列的第 26 篇。

上一篇复盘了部署架构:

  • Docker 管项目运行
  • Docker Compose 管项目内部服务
  • 全局 Nginx 容器 管公网入口
  • 数据库不暴露公网
  • 多个项目通过统一入口对外访问

到这里,服务器安全和部署架构都有了基本方案。

但个人博客还不能算真正准备好上线,因为还差一个关键环节:HTTPS

HTTPS(超文本传输安全协议)

从技术上说,HTTP也能访问网站。

输入域名,浏览器能打开页面,文章能看,接口能请求,似乎已经够了。

问题是,如果这个网站准备长期公开访问,尤其以后还会承载博客、官网、作品站和后台管理,HTTPS 就不该被当成...

SSL 证书申请、下载、部署完整流程

这是「把自己部署到互联网上」系列的第 27 篇。

上一篇讲了为什么个人网站需要 HTTPS

它不仅仅只是地址栏里的小锁,还关系到访问安全、浏览器提示、后台登录、现代 Web 能力、搜索和分享体验。

对一个准备长期运行的博客来说,网站不能只做到“能访问”,还要能通过可信连接访问。

这一篇进入实际操作:SSL 证书怎么申请、下载,并部署到 Nginx

完整链路

我这里会以阿里云为例(域名在阿里买的),在哪个平台购买不重要,不同平台页面布局多少会有一些差异。

更重要的是理解流程:申请证书,完成域名验证,下载证书,放到服务器,配置 Nginx,检查配置,重载服务,最后验证 HTTPS 是否正...

通配符证书和 acme.sh:我如何解决多域名证书管理

这是「把自己部署到互联网上」系列的第 28 篇。

上一篇写了单域名 SSL 证书从申请、下载到部署的完整流程。

申请证书,完成域名验证,下载证书和私钥,放到全局 Nginx 的证书目录,配置 443,检查 Nginx,重载服务,最后验证 HTTPS

这条链路适合把 HTTPS 跑通,对整个流程有个完整的理解。

接下来,又会遇到一个问题,

假如我有多个子域名,我该如何处理呢,难道说,也是一个一个的申请?

多个子域名应如何处理?

业务发展需要,会产生多个服务,比如 blog.aicultiv.comwww.aicultiv.comapi.aicultiv.comadmin.aicu...

为什么个人博客也需要对象存储?

这是「把自己部署到互联网上」系列的第 29 篇。

前面几篇把 HTTPS 这段基本走完了:

  1. 先讲为什么个人网站需要 HTTPS
  2. 再写 SSL 证书申请、下载和部署
  3. 最后用通配符证书和 acme.sh 解决多域名证书管理。

到这里,个人博客的访问入口已经比较完整:

服务器、域名、备案、安全边界、部署架构、全局 Nginx 和 HTTPS 都有了基本方案。

一个不起眼的问题

接下来要处理一个容易被忽略的问题:图片、附件和静态资源应该放在哪里?

最简单、粗暴的做法是放在服务器本地。

博客项目本身也有上传目录,图片传到上传目录里,文章直接引用本地资源。

这很简单直接,运行没问题。但项目要...

对象存储桶策略、JSON 配置和域名访问控制实战

这是「把自己部署到互联网上」系列的第 30 篇。

上一篇讲了为什么个人博客也需要对象存储。

图片、附件、项目截图和静态资源会随着文章不断增长,如果全部放在服务器本地,后面会遇到磁盘膨胀、迁移麻烦、备份边界不清晰和带宽压力等问题

但对象存储真正有坑的地方,是文件权限到底该怎么开?

  1. 图片既要能被文章访问,也要不能被别人随便访问
  2. 图片等相关资源能通过自己的域名访问,但又不希望任何地方都无限制引用
  3. 桶策略、JSON 配置、访问域名、防盗链、CORS 混在一起,很容易出错

我刚开始使用对象存储时,就把它当成云端文件夹:

创建桶,上传图片,复制链接,放进文章里,图片能打开,好像就结束了。

应该...

我是如何用 Docker 部署个人博客的

这是「把自己部署到互联网上」系列的第 31 篇。

前面已经处理了服务器、域名、备案、安全边界、Docker 选型、全局 Nginx、HTTPS 和对象存储

到这一篇,能想到的处理步骤已经都处理了,大家还有更好的见解,欢迎评论区友好交流一下。

进入主线动作:用 Docker 容器部署个人博客。

部署思路

这篇不是传统意义上的教程,而是按我的部署思路,把博客从

代码目录、环境变量、数据库、Docker Compose、启动检查,到接入全局 Nginx

的流程串起来。

具体命令要按项目调整,重点是理解一个博客项目要稳定运行,哪些东西必须放到可维护的位置。

部署过程

这一篇的目标是:把个人博...

发现更多