服務器最重要的是創建一個入口網關,所有的服務都使用這個入口網關分流。
例如你服務器上有一個 blog 服務,還有一個 bbs 服務,它們使用各自不同的軟件部署好,但你需要用戶都通過默認的 80 端口來訪問它。入口網關就是這一目的,讓它工作在80端口,當用戶訪問對應的服務時,它將請求轉發到實際的服務。
入口網關通常需要依據不同的訪問域名去區分和分流服務,這也是前文要求你去購買域名的原因之一。
ingress
我通常會使用 compose 創建一個 ingress 項目,來充當入口網關,它的 compose 類似下面這樣
networks:
intranet:
ipam:
driver: default
config:
- subnet: "172.20.0.0/16"
services:
envoy:
image: ${IMAGE_OF_ENVOY}
restart: always
hostname: envoy
ports:
- "80:80"
- "443:443"
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /opt/data/ingress:/etc/envoy:ro
networks:
intranet:
ipv4_address: ${IP_OF_ENVOY}
web:
image: ${IMAGE_OF_NGINX}
restart: always
environment:
- LANG=C.UTF-8
- LC_ALL=C.UTF-8
volumes:
- ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./conf/nginx/snippets:/etc/nginx/snippets:ro
- ./conf/nginx/conf.d:/etc/nginx/conf.d:ro
- ./conf/web:/web:ro
- /var/www:/var/www:ro
networks:
intranet:
ipv4_address: ${IP_OF_NGINX}
- 它實現創建了一個子網 172.20.0.0/16,後續服務都將部署在這個子網,這樣網關才能反代各種服務
- 啓動了一個 service envoy,它將宿主機的 80 和 443 綁定到容器因爲我打算讓它做入口網關
- service web 則使用 nginx 作爲了一些靜態內容的補充,新人可以直接使用 nginx作爲網關不使用 envoy 更簡單
service web 直接把項目下的 conf/nginx 中的設定映射到了image,這樣方便隨時修改設定
反代
剩下的就是依據你的域名爲 envoy 寫反代設定。如果你使用 nginx 作爲入口網關就寫 nginx 反代設定。
如果使用 nginx 直接手寫設定即可,很簡單,google 學習下幾分鐘就能學會。
如果使用 envoy 就相對複雜,首先你需要花費時間學習下它的設定如何寫,此外學會了也不建議直接手寫很麻煩,建議使用 ejt 工具。