快速构建安全的(HTTPS)本地开发环境
给localhost套上tls的翅膀
在tls成为互联网冲浪不可或缺的今天,给localhost加上tls证书也并不是什么很潮流的事情了,换句话说:所有环境尽可能保持一致才能更好的开发和debug。而且吾辈在以前也遭遇过本地http的坑:chrome会因为没有tls证书而给请求加载限速,导致nodejs的dev环境启动巨慢。。在各大浏览器厂商都歧视http的今天,我们不得不给我们最经常访问的域名加上tls的魔法了。
mkcert
作为web.dev推荐的证书生成工具当然好处不少,(谁说对了就给他)
mkcert(和类似工具)具备下列几种优势:
- mkcert 专门用于创建与浏览器认为有效相兼容的证书。它会保持更新,来满足需求和最佳实践。因此您无需运行具备复杂配置或参数的 mkcert 命令,就可以生成正确的证书!
- mkcert 是跨平台的工具。团队中的任何人都可以使用。
使用
1 | mkcert -cert-file certs/local-cert.pem -key-file certs/local-key.pem \ |
Traefik + Portainer
traefik是什么
生成一段不少于300字的对 traefik proxy 项目的功能介绍和与Nginx的对比
1 | Traefik Proxy是一款高效的、现代化的反向代理服务器,它被设计成可自动化配置的,它可以检测新的服务和容器的出现,并自动地加入到服务集群中。Traefik Proxy支持多种后端服务,比如docker、Kubernetes、Mesos、Swarm等,并可以自动地为它们生成路由规则。它还支持多种协议,包括HTTP、TCP和UDP,并且支持SSL、WebSocket、DNS等特性。Traefik Proxy具有极高的可扩展性,它可以横向扩展,并且可以自动地配置和平衡集群。 |
portainer是什么
生成一段不少于300字的对 portainer 项目的功能介绍
1 | Portainer是一款基于Web的容器管理平台,该平台提供了简单、易用的UI界面,帮助用户管理单个或多个Docker环境。Portainer是一个开源项目,用户可以自由下载、使用、修改、扩展和分享该项目。 |
traefik配置
首先我们需要给traefik配置mkcert生成的tls文件路径,这一步暂时没有找到如何在label直接进行配置,后面如果发现如何免除额外的yml文件会进行更新。
1 | # dynamic_config.yaml |
然后我们就可以创建一个docker-compose.yml
文件了,这部分骨架可以从portainer文档中找到:Deploying Portainer behind Traefik Proxy。因为我们是在本地使用mkcert创建的证书,所以就需要忽略certificatesresolvers
部分的配置。经过改动之后的配置文件如下:
1 | # docker-compose.yml |
最终我们的本地文件如下:
首先创建网络:docker network create traefik-public
使用docker-compose up
便可以启动服务,访问https://traefik.dev.localhost/dashboard/
便可以看到traefik自带的dashboard。
访问https://portainer.dev.localhost
便可以进入portainer。
通过Portainer创建和管理docker服务
我们使用一个简单的项目来进行测试,这里我选了memos:
1 | version: "3.0" |
成功访问:
参考文章
大致流程参考:
How to handle https with docker-compose and mkcert for local development
意识到需要配置network提供互联性:
Application monitoring with Traefik, Prometheus, Grafana, and Docker Compose for beginners
把两个文件优化成只有一个动态文件: