众所周知docker hub需要上网辅助工具才能访问,但是给服务器部署上网辅助工具比较繁琐且有一定风险,所以搭建一个对docker hub的反代会更加合适。
准备台能流畅拉docker image的服务器,一个域名。
由于我使用的是traefik,所以接下来的教程也会以traefik为准。
CRProxy,可以直接部署到dockerhub、ghcr等一大堆常用hub的反代的软件,基本上不需要配置,直接docker-compose一把梭即可。
由于使用了traefik,有一个label用来令traefik能够识别容器并进行反代。
值得注意的是需要处理好证书,这里的tls.certresolver=就是traefik.yml中配置好的certprovider,根据情况做设定。
traefik.yml
yaml certificatesResolvers:
letsencrypt:
acme:
email: xxx@xxx.com
storage: /etc/traefik/acme.json
httpChallenge:
entryPoint: web
docker-compose.yml
yamlversion: '3'
services:
crproxy:
image: ghcr.io/daocloud/crproxy/crproxy:v0.8.0
container_name: crproxy
restart: unless-stopped
expose:
- 8080
command: |
--default-registry=docker.io
tmpfs:
- /tmp/acme
labels:
- "traefik.enable=true"
- "traefik.http.services.crproxy-https.loadbalancer.server.port=8080"
- "traefik.http.routers.crproxy-https.entrypoints=websecure"
- "traefik.http.routers.crproxy-https.rule=Host(`xxx`)"
- "traefik.http.routers.crproxy-https.tls.certresolver=letsencrypt"
networks:
- traefik-network
networks:
traefik-network:
name: traefik-network
如果不喜欢traefik,可以把label和networks去掉,随后改用ports将8080端口映射出来,然后使用你喜欢的反代软件(nginx、caddy啥的)反代也是一样的。
接下来把域名解析到服务器上即可使用。
直接公开到公网上会有被薅羊毛的风险,故首先我将这个加速服务限制为仅有内网可以访问,在我的服务器和服务器间使用easytier组网,这样一来基本上杜绝了被其他人薅羊毛的风险。
具体来说,你需要在crproxy的label添加两行以限制访问的IP段:
- "traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange=172.16.255.0/24, 172.30.255.0/24" - "traefik.http.routers.crproxy-https.middlewares=ipwhitelist@docker"
这里的traefik.http.middlewares.ipwhitelist.ipwhitelist.sourcerange就是限制的ip段。
如果懒得使用easytier这类的工具组网,也可以使用ipwhitelist中间件限制可访问到加速节点的IP,实在不行也请把域名设置的复杂点,避免被人薅羊毛。
本文作者:Nature
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!