[Docker] Linux主機之Docker安裝和ReveseProxy建置

前言

圖源 https://webapplicationconsultant.com/scalability/nginx-reverse-proxy-for-scalability/

此篇文章由零開始設定Linux主機、安裝Docker,並設定Reversy Proxy

Reverse Proxy(反向代理),可以比喻為一棟樓的大門管理員
當一個包裏送至管理員,管理員會依照地址將之轉送給後方的住戶
當一個Web Request送至Reverse Proxy,Reverse Proxy會依照URL將之轉送給後方的伺服器
使用docker技術,能在同一台機器上配置多個伺服器,且不會互相干擾

此套ReverseProxy可在docker compose up時建立路由,自動申請及Renew SSL證書
我個人的所有網路服務都是配合此套ReverseProxy做建置,特撰此文以做前導

流程簡述

  1. 起一台新的Linux
  2. 安裝docker、docker-compose
  3. git clone下Reverse Proxy之建置檔案
  4. docker-compose up -d

建置

Linux主機

  • 起一台Linux做Main Server,理論上任何能裝Docker的arm64 linux都行
    我推薦使用Digital Ocean,最便宜的方案每個月只要5美元
    這是老牌的主機商,在業界有信譽有口碑,比國內的主機商都穩定得多
    現在的優惠,透過上方推廣鏈結註冊,兩個月內會有100鎂的試用額度
    這足夠玩遍所有功能了,事實上我自己也是會開小號來測功能
    用上方的推廣鏈結,你消費25鎂時我也能拿到25鎂,放了一年至今我沒賺到錢過
    這裡我選一台Unbuntu x64 LTS
  • 由後台從Consle連入,把SSH port改為自設的port
    vi /etc/ssh/sshd_config
    service ssh restart
  • 注意UFW是否有擋port
    ufw status
    如果它是inactive以外的狀態,請上網找Ubuntu UFW相關文章做調整
    需開放80、443和自設的SSH port
  • 若是租用VPS,建議關了UFW,用VPS後台的Firewall功能即可
  • SSH Client,以root連入,推薦用MobaXterm

Docker安裝

可參閱官方文件
  • (選)全面更新
    sudo apt-get update && sudo apt-get upgrade -y
  • 安裝必要組件
    sudo apt-get install \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common
  • 加入gpg key
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  • 加入repo庫
    sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"
  • 安裝Docker和Docker-compose
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
  • 測試
    docker --version
    安裝成功,印出docker版本號

Reverse Proxy建置

請用root連入或是su
docker所有操作都需要root權限,且docker-compose file我會建議放在root家目錄下
  • cd到root家目錄
    cd
  • git clone專案
    git clone https://github.com/jim60105/docker-ReverseProxy.git
  • 啟動nginx reverse proxy
    docker-compose -f ./docker-ReverseProxy/docker-compose.yml up -d

Reverse Proxy之使用

對每個後端服務添加以下環境變數
  • VIRTUAL_HOST: 要導向此container的網址
  • LETSENCRYPT_HOST: SSL證書之網域、別名
  • LETSENCRYPT_EMAIL: SSL證書申請人email,到期日近會有通知。請正確填寫,似乎不能變更 
  • (選)LETSENCRYPT_TEST: 申請測試證書。請給true/false。因正式申請有嘗試次數上限、申請數量上限,請在最後上線前再轉false
然後將所有後端服務都連上networks: proxy-tier,就像這樣

就這麼簡單(╹ڡ╹ )

附註: 常用docker指令

列出所有cotainer,-a: 列出包含未啟動的container
docker ps -a
列出所有volume
docker volume ls
清除所有未被container使用的volume
docker volume prune
建立compose,同時用來做驗證
docker-compose build
compose狀態,可以用來檢查變數是否有正確代入,環境變數的讀入順序十分麻煩
docker-compose config
啟動compose,-d: 以deamon背景服務執行
docker-compose up -d
compose操作都可以用-f 給定docker-compose.yml的位置,但需注意有些相對路徑可能會有問題
docker-compose -f <路徑> up -d
stop&remove compose的所有container,-v: 同時刪除volume
docker-compose down
列出此compose的logs,-f: 持續監聽
docker-compose logs
列出指定container的log,-f: 持續監聽
docker logs <container name>
重啟compose下的container
docker-compose restart
在container內執行指令,常會執行bash來做進入
docker exec -it <container name> <指令>

沒有留言:

張貼留言