frpd - 利用 docker-gen 自动化配置 frp 访问容器内服务

2017-06-13 18:07:26 +08:00
 yangxuan8282

GitHub 地址: https://github.com/yangxuan8282/frpd

使用 docker 的过程中容器的 ip 可能是变动的,这样访问起来不太方便, 而用类似 jwilder/nginx-proxy 这种镜像可以在其它容器启动或停止之后自动生成配置文件,通过指定域名,就可以方便的访问容器内的服务

frpd 本身和 jwilder/nginx-proxy 原理一样,也是利用 docker-gen 去在容器起停之后按照模板和用户给的环境变量自动生成 frp 的配置文件

大致使用过程是先在服务器端(有公网 IP 的机器)和客户端分别创建网络:

docker network create proxy-network

然后用项目里提供的 docker-compose.yml 模板启动 frps

再在客户端利用 docker-compose.yml 模板启动 frpc

之后启动服务就可以了,比如启动 gogs,下载这个 docker-compose.yml 模板,然后把 VIRTUAL_HOST= 后面改成你的域名,用 docker-compose up -d 启动后就可以通过刚才指定的域名访问你部署的 gogs 了,其它服务也都类似

这有一些应用的 docker-compose.yml 模板: https://github.com/yangxuan8282/docker-recipes

我尝试连了三个 client,一个是和 frps 运行在同一台机器上,一个是家里的树莓派,还有一个是虚拟机里的 ubuntu,三个 frpc 用的同样的域名,不同前缀,都可以连接成功,使用不同域名应该也可行

想起做这个起因是前段时间在 v 站发帖 t/362833 求大家推荐一款好用的内网穿透软件,然后不少 v 友推荐 frp,尝试之后发现确实比较方便,能直接完成端口转发,后来在使用过程中想能不能配置成类似 jwilder/nginx-proxy 那样的自动化配置的反向代理,方便访问容器里的服务,毕竟 nginx 不是专门的反代,支持的协议有限

用单独的容器验证了一下发现确实可以实现

大致过程:

手动验证可行之后就尝试用 docker-gen 进行自动化配置,对照 docker-gen 提供的 nginx 模板和 golang 的 template 文档,改好了模板文件,测试成功,后来在写 frpc 的 Dockerfile 时候参照了 BlackGlory/caddy-proxy

frp 内置的 dashboard 可以访问,转发本地的 ssh 端口 和 udp 也都可用,这几个没默认开启,需要开启的话看一下 frpc.tmpl,对照注释把对应的部分反注释掉,然后启动 docker 的时候给一下相应的环境变量即可,当然也需要启动 frps 时 publish 相应的端口

4125 次点击
所在节点    Linux
2 条回复
miniers
2017-06-14 00:04:36 +08:00
点个赞,docker-gen 还是很好用的,我也是才做了一个 caddy-proxy 的镜像,不过原版 docker-gen 不能满足我的一些需求,自己加工了一番
yangxuan8282
2017-06-14 01:39:12 +08:00
刚发现还有 docker compose 的搜索引擎: https://www.composeregistry.com/

还发现了一个 compose 的 ui: https://github.com/francescou/docker-compose-ui

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368167

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX