前言
圖源 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做建置,特撰此文以做前導
流程簡述
- 起一台新的Linux
- 安裝docker、docker-compose
- git clone下Reverse Proxy之建置檔案
- docker-compose up -d
建置
Linux主機
-
起一台Linux做Main Server,理論上任何能裝Docker的arm64 linux都行
這裡我選一台Unbuntu x64 LTS我個人是用Digital Ocean,最便宜的方案每個月6美元 (4美元的方案請略過它)
這是老牌的主機商,在業界有信譽有口碑,比國內的主機商穩定得多
亞洲可選的資料中心在新加坡,對台灣連線速度佳,沒有什麼奇怪的問題
透過上方推廣鏈結註冊,你會拿到兩個月內100鎂的試用額度,而這足夠玩遍所有功能
DigitalOcean的註冊優惠都是這個價,用我的推廣就當成是對我小額贊助吧 -
由後台從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 \ lsb-release
-
加入gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
加入repo庫
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
安裝Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
-
安裝Docker-compose
- 快速解,但此版本可能不是最新版
sudo apt-get install docker-compose
在撰文時(2021/10/15),apt倉庫中的版本為v1.25.0-1,而v1最新版為v1.29.2
- 手動安裝請參考官方文件:
https://docs.docker.com/compose/install/sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- 快速解,但此版本可能不是最新版
-
測試
docker --version
安裝成功,印出docker版本號docker-compose --version
如果見到錯誤bash: /usr/bin/docker-compose: No such file or directory
,則建立連結sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
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狀態,可以用來檢查變數是否有正確代入,環境變數的讀入順序十分麻煩
啟動compose,-d: 以deamon背景服務執行docker-compose config
docker-compose up -d
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> <指令>
您好,我想要用我的synology nas來自動youtube直播錄影,已於nas安裝docker,並試著用SSH以root權限連入,鍵入docker --version及docker-compose --version都有回傳版本號。
回覆刪除接著進行Reverse Proxy建置要cd到root家目錄,想請問也是在同上鍵入docker --version的地方鍵入cd嗎?我鍵入cd後,沒有回傳任何東西也沒感覺任何路徑的資訊,一樣只有[email protected]:~#這樣而已。
接著git clone專案,鍵入git clone…(下略),卻回傳-ash: git: command not found
想請問一下這樣是哪邊操作的問題呢?請您協助解惑,非常感謝您!
~就是家目錄
刪除在套件中心安裝Git Server就有git了
這是基礎Linux知識問題