从空白主机搭建我的个人服务器:Ubuntu 26.04、Caddy 与 Docker

从一台几乎空白的 Ubuntu 主机开始,整理入口、部署目录和真实验证方法。

这次整理服务器,是从一台几乎空白的 Ubuntu 主机开始的。最初检查时,公网只有 SSH 在监听;Caddy、Docker 和 Ansible 都还没有安装。我想要的是以后能继续放个人网站、接口和实验项目的一套小而清楚的基础,而不是先建一个复杂平台。

先看主机,再选做法

实际主机运行 Ubuntu 26.04 LTS,是一台资源有限的小型主机。既然系统已经是这个版本,我就沿用它和 Ubuntu 软件仓库里的包,没有为这一步做系统升级。这样的规模用单机 Caddy 加 Docker Compose 就够了;如果将来有具体需求,再考虑额外组件。

Caddy 负责公网的 80/443、HTTPS 证书和按域名转发。Docker 与 Compose 留给以后各个应用使用。静态页面与应用部署内容分开放置:前者由 Caddy 直接读取,后者按应用单独管理。这样排查时更容易分清入口、页面和应用本身。

让应用只在本机接收流量

我不打算让每个容器端口直接暴露到公网。临时 API 实验把容器端口映射到本机回环地址,由 Caddy 将对应域名的请求转给它。下面的 <app-port> 是示例占位符,不是当前服务器的实际端口。

Internet → DNS → Caddy :443 → localhost:<app-port> → 应用

这条链路做过一次真实烟测:容器健康检查通过,本机接口返回 JSON,经临时 Caddy TLS 路由也拿到了同样的响应。实验结束后,临时路由和容器都移除了;目前没有把这个示例当成常驻业务。

验证比“安装成功”更重要

网站的配置由 Ansible 部署。每次改动前先看 diff 和 check,应用后再看服务状态、Caddy 配置与公网响应。现在两个域名都能通过公开信任的 HTTPS 访问同一站点,HTTP 会跳到 HTTPS;Ansible 再跑一次显示没有变更。

我会先用 Ansible 的 check/diff 模式确认计划变更,再应用配置;随后用普通公网客户端检查 HTTPS、跳转和页面内容,最后重跑 Ansible 确认没有漂移。

这些检查不能替代未来有状态应用的数据备份,也不等于做过整机恢复演练。不过,至少这套静态站和共享入口已经能从仓库重新说明、部署和核验。

← 返回记录列表