在自己内网部署了几十个服务之后,我才后知后觉的发现管理这么多web页面是非常困难的事
使用 homepage 可以很好的归纳整理内网的服务到一个统一的页面。但是每个服务一个端口,还得保证他们不乱撞(脑子里维护一个端口数据库),某些内网服务可能还要暴露到外网。
traefik
是专为容器而生,使用服务发现来实现网关,非常舒服,比起 nginx
不太需要写太多的配置文件。
首先 docker network create traefik-proxy --attachable
创建一个网络可以让 traefik
的流量到达别的容器
traefik
服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| version: '3'
services: reverse-proxy: image: traefik:v3.1.4 command: - --api.dashboard=true - --api.insecure=true - --providers.docker - --providers.docker.exposedByDefault=false - --providers.docker.network=traefik - --providers.file.directory=/traefik/providers - --entryPoints.web.address=:80 - --entryPoints.websecure.address=:443 volumes: - ./providers:/traefik/providers - ./certs:/certs - /var/run/docker.sock:/var/run/docker.sock ports: - "80:80" - "443:443" networks: - traefik-proxy networks: traefik-proxy: external: true
|
./providers/providers
文件里主要定义证书:
1 2 3 4
| tls: certificates: - certFile: /certs/shinobi9.server.cer keyFile: /certs/shinobi9.server.key
|
要被反向代理的服务,一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| services: kuma: image: louislam/uptime-kuma:1.23.13 volumes: - ./data:/app/data labels: - traefik.enable=true - traefik.http.routers.kuma.rule=Host(`uptime.shinobi9.server`) - traefik.http.services.kuma.loadbalancer.server.port=3001 - traefik.http.routers.kuma.tls=true - traefik.http.routers.kuma.entrypoints=websecure networks: - traefik-proxy networks: traefik-proxy: external: true
|
内网域名也是一个问题,有些部署的web应用可能使用 webrtc
之类的API强制要求https,所以内网可能还要自签证书。
关于这部分,网上查了很多资料,最后看了一篇写的非常详尽的 博客 。
再有就是如何让 DNS
解析自己的域名,比如内网部署一个 DNS
服务器,考虑到炸了之后网络容易瘫痪,所以选择了更轻量的两种替代。
本机Host文件修改,有个非常好用的工具就是 SwitchHosts 。
还有就是路由器Host文件修改了,比起本机修改,手机等别的设备就也能享受域名服务了,这个根据路由器品牌和操作系统八仙过海了。