容器化 FRP 使用方案
最近在折騰過程中,使用到了 FRP 這款軟體,碰巧作者在幾天前更新的
v0.34.1
版本只發布了容器版本,並未像之前一樣釋出多種編譯版本。距離上一次寫 FRP
相關的內容,已經過去了兩年。本文就基於官方容器版本,介紹該軟體的簡單使用方法吧。
在容器中使用 FRP 服務端
首先在服務端找一個合適的目錄,建立
frps.ini 配置檔案,考慮到後續的便捷使用,這裡我們使用環境變數來對配置進行抽象。
[common] bind_port = {{ .Envs.FRP_SERVER_PORT }} token = {{ .Envs.FRP_SERVER_TOKEN }} dashboard_addr = 0.0.0.0 dashboard_port = {{ .Envs.FRP_ADMIN_PORT }} dashboard_user = {{ .Envs.FRP_ADMIN_USER }} dashboard_pwd = {{ .Envs.FRP_ADMIN_PASS }}
接著,就可以在
docker-compose.yml
中使用環境變數來對程式的服務端進行“動態”配置了:version: "3.7" services: frps: restart: always container_name: frps image: fatedier/frps:v0.34.1 volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./frps.ini:/app/frps.ini:ro command: frps -c /app/frps.ini ports: - 9870:9870 - 7890:7890 - YOURPORT:YOURPORT environment: - FRP_SERVER_PORT=9870 - FRP_SERVER_TOKEN=CMW9viCpy1FZ - FRP_ADMIN_PORT=7890 - FRP_ADMIN_USER=soulteary - FRP_ADMIN_PASS=soulteary networks: - frps logging: driver: "json-file" options: max-size: "1m" # docker network create frps networks: frps: external: true
上面配置中需要注意的是,
ports
欄位中,目前只宣告瞭
FRP_SERVER_PORT
服務端通訊介面和
FRP_ADMIN_PORT
服務端管理介面,所以我們需要再根據自己的情況新增一個/一些應用介面。當然,更好的方案是搭配 Traefik 使用服務發現來對外提供服務。後面有機會,我再行文詳述。
在服務端使用
docker-compose up -d
啟動服務,如果順利的話,將看到類似下面的日誌:frps | 2020/10/04 19:52:27 [I] [service.go:190] frps tcp listen on 0.0.0.0:9870 frps | 2020/10/04 19:52:27 [I] [service.go:289] Dashboard listen on 0.0.0.0:9870 frps | 2020/10/04 19:52:27 [I] [root.go:212] start frps success
接著我們來配置客戶端。
在容器中使用 FRP 客戶端
同服務端一樣,我們先確定客戶端配置
frpc.ini 的“架子”:
[common] server_addr = {{ .Envs.FRP_SERVER_ADDR }} server_port = {{ .Envs.FRP_SERVER_PORT }} token = {{ .Envs.FRP_SERVER_TOKEN }} [app] type = tcp remote_port = {{ .Envs.APP_REMOTE_PORT }} local_ip = {{ .Envs.APP_HOST }} local_port = {{ .Envs.APP_PORT }}
接著是完成客戶端的
docker-compose.yml
配置檔案:version: "3.7" services: frpc: restart: always image: fatedier/frpc:v0.34.1 volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./frpc.ini:/app/frpc.ini:ro environment: - FRP_SERVER_ADDR=123.456.789.012 - FRP_SERVER_PORT=9870 - FRP_SERVER_TOKEN=CMW9viCpy1FZ - APP_REMOTE_PORT=YOURPORT - APP_HOST=YOUR_APP_HOST - APP_PORT=YOUR_APP_PORT networks: - frpc logging: driver: "json-file" options: max-size: "1m" # docker network create frpc networks: frpc: external: true
這裡
APP_HOST
和
APP_PORT
指代的是 FRPC 客戶端在容器網路中能夠訪問到的要對映到前文伺服器中的應用的地址及埠。而
APP_REMOTE_PORT
指的則是上文中的
YOURPORT
,比如 80 埠、或者 443 埠。在客戶端同樣使用
docker-compose up -d
啟動服務,然後可以看到客戶端的執行日誌:frpc | 2020/10/04 20:42:56 [I] [service.go:288] [62e9e2de742523fe] login to server success, get run id [62e9e2de742523fe], server udp port [0] frpc | 2020/10/04 20:42:56 [I] [proxy_manager.go:144] [62e9e2de742523fe] proxy added: [confluence-app] frpc | 2020/10/04 20:42:56 [I] [control.go:180] [62e9e2de742523fe] [app] start proxy success
服務端此時也會多一條連線日誌:
frps | 2020/10/04 20:42:56 [I] [control.go:446] [62e9e2de742523fe] new proxy [app] success
至此,FRP 在容器內的使用就全部完畢了,隨後就由你自由發揮啦。
最後
FRP 是一款優秀的軟體,隨著越來越多的廉價公有云的面世,使用這款軟體搭配家用伺服器使用,可以大幅降低除錯開發成本、以及簡化一些臨時場景下的複雜組網,值得一試。
最後,希望本文能對你想在容器中玩 FRP 的你。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984138/viewspace-2728139/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 容器化redis高可用方案Redis
- MySQL Operator容器化方案解讀MySql
- 使用 Docker 部署 FRPDockerFRP
- 使用內網穿透工具frp內網穿透FRP
- 使用frp實現內網穿透FRP內網穿透
- Spring Boot 容器化踩坑與解決方案(1)Spring Boot
- 如何使用 frp 實現內網穿透FRP內網穿透
- SpringBoot使用外部Web容器的解決方案Spring BootWeb
- 使用 IoC 容器進行程式碼優化行程優化
- 多容器動態化方案在遊戲SDK中的實踐遊戲
- 使用Jexus 容器化您的 Blazor 應用程式Blazor
- 容器雲對接持久化儲存並使用持久化
- docker 容器日誌清理方案Docker
- 使用 fail2ban 保護 frp 服務AIFRP
- 使用FRP、雲伺服器搭建內網穿透FRP伺服器內網穿透
- 使用 frp 搭建內網穿透伺服器 Web 使用例項FRP內網穿透伺服器Web
- 杉巖:雲原生時代,容器持久化儲存方案選對了嗎?持久化
- 容器安全公開課 | 揭秘容器黑產,探討容器安全解決方案
- 使用 Docker 開發 PHP 專案(三):命令容器化DockerPHP
- 教你使用Docker容器化Node.js應用程式DockerNode.js
- 如何使用Docker容器化改善你的開發流程Docker
- 容器化基礎
- hadoop容器化Hadoop
- frp用stcp模式使用socks5代理FRPTCP模式
- 內網穿透—使用 frp 實現內外網互通內網穿透FRP
- Docker 容器優雅終止方案Docker
- java效能優化方案——使用entrySet()Java優化
- FRP 內網穿透FRP內網穿透
- 軟體容器化doccker
- .NET Core容器化(Docker)Docker
- .NET Core容器化@DockerDocker
- docker容器化.NET程式Docker
- 從美圖容器優化實踐談Kubernetes網路方案設計優化
- FRP搭建內網穿透FRP內網穿透
- 使用Docker容器化部署實踐之Django應用部署(一)DockerDjango
- Postgresql容器使用SQL
- k8s容器日誌收集方案K8S
- 不止Docker:8款容器管理開源方案Docker