nginx-proxy 与 Let's Encrypt


连续两期吐槽 Traefik,是确实有它可吐槽的点在,虽然将来我可能也还会用它,毕竟特性真的非常契合需求,但要说我自己能有信心上线,现在还不是时候,项目是好,可文档也要写好点吧,别说 Docs for Humans,逻辑结构和思路要清晰,别要找找不到,甚至不明不白和内容有陈旧感。

目前最终并没有启用 Traefik 的方案,而是启用了 nginx-proxy 这个基于 docker-gen 的方案,并且同时还有人帮忙弄了配套的 Let’s Encrypt 工具,就成熟度来说,已经非常可以了。

经过一段时间的熟悉、测试、修改,并最终建立自己喜欢的 docker-compose 编排文件,现在已经在我的一些生产级项目上开始正式运行了。

到目前为止,用到的东西,几乎所有类别都已经 Docker 化了。

  • Web 动态应用,比如基于 Tornado 的 Web 和 API,使用 Python 官方镜像进行 Docker 化,到底 2 和 3 怎么处理,甚至 2.7.14 和 2.7.15 或是 3.6 还是 3.7 这样严重困扰开发和运行的问题都不复存在。
  • 定时任务脚本,原先跑在机器系统上的 cron 或者是 Windows 的计划任务,基于 Python 镜像使用 APScheduler 进行 Docker 化,利用 subprocess.run 完成无缝迁移,不需要修改任何原先已有代码,再也不用去敲 crontab -e 和 crontab -l 去修改和查看任务配置,数据都在代码里,配置也不会丢,重新换机器直接 docker-compose 起容器即可。关于 APScheduler,你也可以选其它的工具进行替代,因为我是 Python,而 Python 里面我一番测试下来又觉得它最好,虽然会稍微复杂点。
  • 爬虫及自动化,简单脚本上面说了,复杂的爬虫服务,批量部署和灵活调用,以及数据监控和自定义任务,还有需要用到自动化工具的,比如浏览器渲染,都已经 Docker 化了。
  • 静态文件服务,这个 nginx 直接拿来用,把文件做成服务供其它服务去使用,这又比把文件的绝对路径挂载到别的服务上要好很多,我也是这几天才猛然想通,要笑哭。毕竟很多时候这些文件并不是直接弄出来的,而是要利用其它工具生成的,比较适合独立项目,而不是跟其它混放一起,而挂载又会影响别的项目的一些配置。
  • 数据库,这个真的要,数据库装到系统里面你还想升级?想都别想,但是到了 Docker 这就是改个标签的事情。不过有些大版本兼容性还是要自己看清楚,一般都是会有说明的,而且即使不行,退回去也极其简单啊,你说是不是。另外,性能不是问题。
  • HTTPS,迟迟有些东西不敢随便动手的一个原因就是它,当初设置 https 的时候,Let’s Encrypt,看了很久才配置完成,然后又多次等很久去确认配置 OK(确认确实有在更新),现在把它也 Docker 化了,真的就轻松极了。能理解对标 nginx 的那些,为啥要把这个作为主要卖点挂出来了。

暂时记录这么多,总之一点,能 Docker 化的一定想方设法 Docker 化,即使要曲线救国都行。