阿里云的服务器已经用了快两年了,期间一直用的nginx处理反代和TLS的问题。但最近遇到一件小事,实在让我想要换一种方式来管理这些服务。
起因是我想起一个webdav用来同步zotero的附件,nginx本身提供了一个webdav插件,问题是它默认没有启用,需要在编译时加选项打开。那么这就意味着我得重新自己编译一个nginx出来。可拉到吧,为了方便部署和维护,为什么不用docker整点什么呢?于是我发现了这个 https://github.com/dgraziotin/docker-nginx-webdav-nononsense。
把nginx打包进docker去提供webdav服务!虽然它非常可用,但这就非常离谱了。我用nginx反向代理nginx提供的webdav服务,这好么?这不好。另外,nginx的配置文件实在难写且烦,我大部分的应用都部署在docker里,我需要一个和docker配合地更好的反代工具。
一个可能的选择是我们直接向上到顶,直接上k8s和它的一系列生态工具,我不是很想这么做:
- k8s太大了,我这单机1c2g的东西用不着也供不起这尊大佛
- k8s需要提供自己的yaml,大部分的应用基本只服务到dockerfile层。少数提供docker compose,如果是k8s yaml的话还得自己转
我甚至不想上docker swarm,在我管不过来这台服务器上的服务前,这服务器就会吃不消了。在这时我看到了一个有趣的项目 https://github.com/lucaslorentz/caddy-docker-proxy。
好吧,这看上去就像是一个入门版的ingress或是traefik什么的。但它应该够用了。它还提供了一些swarm的模板,但我用docker compose就够了
1 | #caddy.yaml |
caddy会帮忙申请证书,可以把之前那个脚本关了。以及另外的,这个玩意会自己从label里面找反代的目标,例如我的pastebin挂在:
1 | # bw.yaml |
甚至可以在里面加snippet,我把pastebin的auth挪到了反代层来,好吧,这才是合理的做法!另外,我可能还得单独处理一下我的博客,它是静态文件,不在docker里。在caddy里再挂一个路径
1 | - /home/git:/home/git |
然后修改一下Caddyfile
1 | asternight.site { |
完成了,这一下在运维界进步了10年!