本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html
本文做者: 蘇洋nginx
建立時間: 2019年04月27日 統計字數: 2001字 閱讀時間: 4分鐘閱讀 本文連接: soulteary.com/2019/04/27/…git
去年的時候,曾經寫過一篇使用 Docker 、Traefik 以及 Nginx 建立自動索引站點的文章,本篇內容將聊聊如何進行優化。github
包含內容:剝離容器配置中的變量、如何對容器進行健康檢查、如何限制容器日誌尺寸等。docker
更新的項目代碼保存在: GitHub 上,能夠自取。編程
前文的 docker-compose.yml
中,許多內容是直接寫死在文件中的,隨着配置文件愈來愈「複雜」、同類的服務啓動愈來愈多,咱們須要將一些基礎的配置剝離出來,以方便後續的維護。json
nginx:
image: nginx:1.15.7-alpine
labels:
- "traefik.frontend.rule=Host:demo.soulteary.com"
extra_hosts:
- "demo.soulteary.com:127.0.0.1"
複製代碼
好比「域名」、「鏡像名稱」等信息,咱們能夠從上面配置文件中進行剝離,剝離後的配置以下:瀏覽器
nginx:
image: ${NGX_IMAGE}
labels:
- "traefik.frontend.rule=Host:${NGX_DOMAIN}"
extra_hosts:
- "${NGX_DOMAIN}:127.0.0.1"
複製代碼
爲了讓 docker-compose.yml
可以像以前同樣正常工做,咱們須要建立一個 。env
文件,存放剛剛剝離的信息。bash
NGX_IMAGE=nginx:1.15.8-alpine
NGX_DOMAIN=demo.soulteary.com
複製代碼
後續這類信息多起來以後,能夠經過配置系統接口獲取,或者讓CD系統自動生成。app
Nginx 默認配置中,HTML
類型文件將會被渲染成咱們熟悉的網頁,這顯然不符合 auto index
的需求,若是可以像 TEXT
純文本同樣直接在瀏覽器中進行預覽或許會更好。
修改 Nginx 使用的 mime.types
文件,將 HTML
類型文件進行修改,原始文件如:
text/html html htm shtml;
複製代碼
須要修改成:
text/plain html htm shtml;
複製代碼
若是你須要用戶在訪問頁面時,可以直接下載文件,那麼能夠將 text/plain
修改成 application/octet-stream
。
爲了容器中的應用運行結果更加可靠,咱們須要讓容器進行健康檢查。
由於本例中的內容是動態生成的,雖然程序效率很高,可是仍是建議讓檢查工具請求的內容儘量更簡單一些,爲此咱們定義一個新的路徑 /health-check
,並將它添加到 nginx.conf
配置中:
location = /health-check {
access_log off;
default_type text/html;
return 200 'alive';
}
複製代碼
當健康檢查器或者用戶訪問這個地址時,將會獲得「alive」的結果。
接着,在 docker-compose.yml
中定義檢查器:
healthcheck:
test: ["CMD-SHELL", "wget -q --spider --proxy off localhost/health-check || exit 1"]
複製代碼
當你執行 docker ps
時,終端輸出的文本將會有一些不一樣。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9903d19aae7 nginx:1.15.8-alpine "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds (health: starting) 80/tcp
複製代碼
當程序徹底運行以後,Up 4 seconds (health: starting)
將會變動爲 Up 10 seconds (healthy)
。
將來在調試/查看容器服務情況時,辨別服務運行狀態就又有了一個新的依據啦。
搭建的應用,除了會被用戶訪問以外,還可能遭到掃描器問候、惡意的海量請求。
這時,若是不約束日誌文件尺寸,很容易將磁盤佔滿,形成其餘麻煩。
除了使用 logrotate 處理日誌外,更簡單的方案是在 docker-compose.yml
中對日誌尺寸進行限制,將下面的內容添加到配置文件中。
logging:
driver: "json-file"
options:
max-size: "10m"
複製代碼
我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。
在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)