Cyber Coding Course

師其意,不泥其跡

如何在Raspberry上用Docker啟動HAProxy

Raspberry很便宜有相當多的運用,例如有人拿來當Wifi的router,
遊戲機,監視器及許許多多物聯網相關運用,我則是用他來當一台HAProxy。

長話短說,因為有一台老舊的Windows伺服器,他執行舊版本的PHP及Apache,並且無法設定HTTPS憑證,所以就想說
透過HAProxy來幫忙啦。讓這台老舊伺服器也可以有https的網址,
所以來分享我的docker-compose.yml設。

必要知識:
此文章假設,您已了解haproxy的相關設定了。
如果您還不會在自己的樹莓派安裝,docker及docker-compose請參考如下網址:
https://www.ccc.tc/article/install-docker-and-docker-compose-on-raspberrypi

關於docker-compose的設定如下:
以下是我的docker-compose.yml設定
version: '3.6'
services:
 haproxy:
  network_mode: host
  image: haproxy
  restart: always
  environment:
    backend_server: 192.168.1.100
  volumes:
    - ./cert.pem:/etc/ssl/cert.pem
    - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
這裡有幾個重要設定
一、restart: always
當成功啟動後,下次再重開,就能自動啟動docker-compose了,不用再進入Raspberry裡去上指令docker-compose up。
關於重啟原則(restart policy),至少需成功的啟動10秒後,才代表成功啟動,下次重啟時,才會自動重啟。

二、network_mode: host
這是Linux才能設定的網路模式,可直接讓容器綁定的連綁埠綁到host上
(所謂的host指的就是Raspberry,所以就是綁在樹莓派的eth0網卡上),
所以我能將Raspberry上進來的流量直接導入到另一台實體的主機(backend_server)上啦。

三、enviroment
我們可以在,enviroment中設定backend_server的位置,
就可以在HAProxy的設定檔中,使用這個設定了。

四、volumens
掛載了憑證,及haproxy.cfg的設定。

關於docker-compose的基本指令基本知識:
我們可以建立一個haproxy的資料夾,放入docker-compose.yml檔及憑證,還有haproxy的設定檔。
然後,執行
docker-compose up -d
即可啟動囉。
停止是:
docker-compose down
如果想要查看log,我們可以執行
docker-compose logs -f


下方是個簡單的示意圖:
藍色線是SSL加密的網址,流量進入到HAProxy後,再將流量導向後端(backend_server) ,未加密的網址。


補充
本文假設您已了解haproxy.cfg的各項設定,不對此進行說明,請自行請教Google老師了。
有些與此docker-compose相關的片段的資料供參考。
server web ${backend_server}:80 check cookie s1

#或是
backend mysql
   mode tcp
   server database ${backend_server}:3306
上方的變數,${backend_server}便是我們在docker-compose.yml中設定的192.168.1.100。





 

作者: Devin Yang