我一直希望能把所有的网络需求整合到 Docker 中,通过一个文件夹内的 Docker Compose 配置实现。在 VPS 上可以一键运行,搬迁时只需打包文件夹,调整域名解析,在新 VPS 上安装 Docker 再次一键运行,就完成了迁移。
最初我基于 Yeszao 的 DNMP 项目进行了二次修改,这已经基本满足了我的需求。除了 ACME.sh 的自动签名功能未整合外,其他网站服务都已搭建完成。由于当时使用的是 Nginx,整 ACME.sh容器有点麻烦,直接外置了 。也试过docker xray啥的,手动太麻烦了。
后来因为开源项目的一些表态问题以及个人需求,我决定切换到 Caddy 2,而且配置更加简单,自带自动签名功能,更加省事。不过,网上并没有一个特别适合的 DCMP(Docker、Caddy、MySQL、PHP)项目可直接使用,我参考了其他资料并结合 DNMP 项目,改写了一版。拖延了很久才搞定。
目前 DCMP 主要指的是基础的 Docker、Caddy 2、MySQL 和 PHP。但现在越来越多的开源项目提供了自己的 Docker 镜像,这些镜像通常已经包含 PHP 和简单的数据库支持。如果需求不高,其实直接用 Caddy 2 反代就可以规避许多问题。
比如,我之前的 Caddy 2 配置文件中重定向规则写错了(typecho官方文档太老了,不够清晰),虽然网站能正常运行,但 JavaScript 报错导致评论系统一直有问题。最终还是通过咨询主题作者才定位到问题。如果采用反代方式,就简单多了,不用写重定向...就不会遇到类似问题。
不过我暂时还在用DCMP,没有完全舍弃,切换到typecho镜像,主要是我觉得数据麻烦,但其实可以手动迁移。以及我可能未来要舍弃typecho,所以就没切换。
最近我学会了配置FRP,可以实现内网穿透。理论上服务器只需要 DCF(Docker、Caddy、FRP),无需部署过多服务。当然目前仍有两大问题:一是安全性,二是速度。
现在我的方案是用 DCMP 运行 Typecho,同时通过 Docker 部署 FRPS,本地搭建各种服务并通过 FRPC 穿透到公网。本地服务同样使用 Docker 部署,部分轻量级服务则放在路由器上(未采用 Docker)。
而且最近通过 GPT 学到了一个可以灵活管理 Docker Compose 的方法:使用 Makefile。因为很多项目自带单独的 Docker Compose 文件,将它们的配置手动整合到一起会很麻烦,而通过 Makefile 可以直接运行多个 Docker Compose 文件,无需修改原始文件,更新也更加方便(只需注意端口冲突)。在这种方式下,自己写的 Docker Compose 文件可以尽可能简化,只负责基础服务。
当然也有不足,比如很多作者 DIY 的 Docker 项目更新不及时。理想情况下,最好是基于他们Dockerfile 做定制化调整后本地构建。但由于这块改起来较为复杂,我暂时只对 FRP(无官方镜像)和 PHP(有定制需求)做了调整,其他服务基本采用官方镜像。