Nginx是一個高性能的HTTP和反向代理web服務(wù)器,也是我本人在部署前后端項目時最常用的web服務(wù)器穿挨,無論是部署前端靜態(tài)網(wǎng)站還是反向代理后端服務(wù)器,nginx都表現(xiàn)出無與倫比的便捷與高效豪筝。隨著容器技術(shù)的普及愚墓,越來越多的應(yīng)用開發(fā)者推出了官方Docker鏡像,Nginx也不例外些楣。本文教大家在Nginx官方鏡像的基礎(chǔ)上安裝Certbot脂凶,讓你的web應(yīng)用隨時隨地插上https的翅膀。
Nginx官方Docker鏡像簡介
先上網(wǎng)站:
https://hub.docker.com/_/nginx
官網(wǎng)介紹了Nginx鏡像的常用方法愁茁,有Docker基礎(chǔ)的小伙伴使用起來很簡單蚕钦。構(gòu)建好的鏡像基本用法與官方鏡像完全相同,具體的使用方法可以參考官網(wǎng)鹅很。
Certbot簡介
先上網(wǎng)站:
https://certbot.eff.org/
Certbot可以為服務(wù)器免費申請及自動部署Let's Encrypt證書嘶居,支持大多數(shù)Linux發(fā)行版和web服務(wù)器(我記得另一個工具支持IIS,回頭找找)促煮,在官網(wǎng)選擇服務(wù)器軟件及操作系統(tǒng)后邮屁,會出現(xiàn)使用教程,還是很貼心的污茵。需要注意的是樱报,Let's Encrypt證書有效期只有三個月,過期后訪問網(wǎng)站會提示證書無效泞当,所以需要定期更新或者配置自動更新迹蛤,自動更新的方法在官網(wǎng)有教程。
在Nginx官方Docker鏡像中安裝Certbot
Certbot在生成證書時,會掃描/etc/nginx/conf.d/文件夾下的conf配置文件盗飒,將配置文件中的域名生成SSL證書并修改配置文件嚷量,所以如果應(yīng)用部署在Nginx的Docker鏡像中,則需要在鏡像中安裝Certbot逆趣。
當然可以選擇每次部署應(yīng)用時都安裝一遍Certbot蝶溶,但這違背了Docker的初衷。Docker的就是為了一次打包宣渗,隨時使用抖所,所以我們應(yīng)該在Nginx鏡像的基礎(chǔ)上安裝Certbot,并生成新的鏡像上傳至DockerHub痕囱。
先上Dockerfile
FROM nginx:latest
ADD https://dl.eff.org/certbot-auto /usr/local/bin/certbot-auto
RUN chown root /usr/local/bin/certbot-auto && \
chmod 0755 /usr/local/bin/certbot-auto && \
certbot-auto -n --install-only
這里用的是Debian8的安裝方法(后來才知道Nginx鏡像中的Linux版本是Debian9田轧,不過沒什么影響),而且走了很多彎路鞍恢。一開始并不知道 --install-only
這個參數(shù)傻粘,手動改了certbot-auto
文件好久,就是為了只安裝而不執(zhí)行操作(官網(wǎng)教程并沒有告訴我......)帮掉。certbot-auto
是一個sh腳本弦悉,在certbot-auto
文件里發(fā)現(xiàn)了--install-only
這個參數(shù),加上之后就可以只安裝而不執(zhí)行了蟆炊。直到后來腦子突然反應(yīng)過來稽莉,我TM應(yīng)該先--help
一下。不過這也不是一件壞事盅称,讀sh腳本可以學到很多東西肩祥,就當是交學費了。
由于國內(nèi)你懂得的網(wǎng)速缩膝,鏡像的構(gòu)建需要相當長的時間混狠,所以我把構(gòu)建放在了DockerHub上,這是鏡像地址:
https://hub.docker.com/r/yuhaow/nginx
使用方法
下載鏡像
$ docker pull yuhaow/nginx
啟動鏡像
$ docker run -d -v /docker/nginx/conf.d:/etc/nginx/conf.d -v /docker/nginx/logs:/var/log/nginx -v /docker/nginx/letsencrypt:/etc/letsencrypt -v /etc/localtime:/etc/localtime:ro -p 80:80 -p 443:443 --restart=always --name nginx yuhaow/nginx
介紹一下這幾個參數(shù):
-
-v /docker/nginx/conf.d:/etc/nginx/conf.d
掛載配置文件夾疾层,方便添加及修改配置 -
-v /docker/nginx/logs:/var/log/nginx
掛載日志文件夾 -
-v /docker/nginx/letsencrypt:/etc/letsencrypt
掛載證書文件夾 -
-v /etc/localtime:/etc/localtime:ro
修改鏡像時區(qū)與服務(wù)器同步 -
-p 80:80 -p 443:443
端口映射
生成證書
$ docker exec -it nginx certbot-auto --nginx
更新證書
$ docker exec -it nginx certbot-auto renew
至于自動更新将饺,參考官網(wǎng)的crontab
方案吧
想動手的小伙伴可以自己構(gòu)建一下鏡像,不想動手的話可以使用我構(gòu)建成功的鏡像痛黎,我會不定期nginx版本予弧。