在我寫完Centos7.4下用Docker-Compose部署WordPress這篇文章後,個人我的博客已經正式的開始運做。但考慮到網站訪問的安全性以及從此可能會重複利用服務器來部署其餘網站的可能,所以我決定在原有基礎上來加上Nginx
用做反向代理,並添加SSL 證書
使博客運行在HTTPS
協議上。html
本文中統一使用www.fujiabin.com這個域名,在實際操做中,你應該所有替換成本身的域名。node
如今有不少免費的DV(Domain Valicated Certificate)
證書提供商,好比比較火的Let's encrypt
,然而我並無使用它:)。我用的都是阿里雲的服務,因此證書也用了阿里雲提供的。如下是用screentogif生成的一個申請阿里雲免費DV的動圖,若是圖沒動,請在瀏覽器中直接打開圖片:https://i2.wp.com/www.fujiabin.com/wp-content/uploads/2017/11/aliyun-dv.gif?resize=1024%2C512&ssl=1:
mysql
證書綁定的域名在【阿里雲的雲解析】產品中,受權系統自動添加一條記錄以完成域名受權驗證。
勾上便可,阿里雲將自動在你的域名管理中添加一條用以驗證的解析記錄。本身生成CSR
,或者直接選用系統生成CSR
,兩個並無區別,可是若是你以爲系統生成的不夠安全,能夠本身手動生成。系統生成CSR
選項,在域名審覈經過後(由於DV是系統自動審覈的,因此也就幾分鐘時間狀態就會變成已簽發
狀態),能夠在個人證書
菜單中,找到對應的域名,並點擊下載
按鈕下載你的證書和祕鑰文件包(裏面將包含一個xxx.key的祕鑰文件和一個xxx.pem的證書文件)。Docker Network
$ docker network create nginx-proxynginx
手動建立Docker Network
,這樣就能夠將全部yml中的容器鏈接到這個網絡上來互相聯通。web
這個配置文件是在前一片文章的基礎上修改的,只有修改部分我添加了註釋,其餘部分的說明可參考:Centos7.4下用Docker-Compose部署WordPress中相關部分。sql
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: xxxx MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wp_site:/var/www/html expose: # 容器將暴露80端口,80是默認端口,因此這個不寫也沒問題,若是用其餘端口的話,就必定須要寫一下 - 80 restart: always environment: VIRTUAL_HOST: www.fujiabin.com,fujiabin.com WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress # 如下是nginx反向代理服務的配置 nginx-proxy: image: jwilder/nginx-proxy container_name: nginx-proxy restart: always ports: - "80:80" - "443:443" # ssl 默認是443端口,所以須要將443端口映射到宿主機上 volumes: - /var/run/docker.sock:/tmp/docker.sock:ro # 將宿主機的docker.sock綁定到nginx,這樣,從此添加新的站點時,nginx將會自動發現站點並重啓服務 - wp_certs:/etc/nginx/certs:ro # 將nginx中的證書目錄,映射到宿主機中 volumes: db_data: wp_site: wp_certs: # nginx證書命名卷(named volume) # 配置一個公共外部網絡來聯通全部容器 networks: default: external: name: nginx-proxy
還記得剛纔在阿里雲後臺得到的證書文件嗎?如今立刻要派上用場了。如下命令均在宿主機中執行:docker
$ docker volume lsvim
這個命令將在宿主機中查看Docker
中全部的卷信息,你會看到一個VOLUME NAME
爲xxx_wp_certs
(前綴是Docker
自動添加的,後面的wp_certs
是yml配置中指定的)的卷。centos
$ docker volume inspect --format '{{ .Mountpoint }}' xxx_wp_certs瀏覽器
執行這個命令,將打印出xxx_wp_certs
(這個卷名應該替換成上一步中得到的真實卷名)這個卷在宿主機中的實際路徑,通常多是:/var/lib/docker/volumes/xxx_wp_certs/_data
。
$ cd /var/lib/docker/volumes/xxx_wp_certs/_data && sudo vim www.fujiabin.com.key
這個命令至關於在Nginx
添加ssl祕鑰文件www.fujiabin.com.key
,將在阿里雲後臺下載的文件xxx.key
中的內容黏貼進來並保存。
$ cd /var/lib/docker/volumes/xxx_wp_certs/_data && sudo vim www.fujiabin.com.crt
這個命令至關於在Nginx
添加ssl祕證書文件www.fujiabin.com.crt
,將在阿里雲後臺下載的文件xxx.pem
中的內容黏貼進來並保存。
鏡像nginx-proxy
中的腳本包含了以下功能:
若是在certs文件夾下找到當前域名的.crt
和.key
文件,則將自動將訪問轉到HTTPS
協議,所以到此爲止,咱們已經完成了全部須要作的工做,是否是感受特別簡單優雅?
$ sudo docker-compose down
$ sudo docker-compose up -d
重啓服務,此時再次訪問網站(即便是用http://www.fujiabin.com這個地址),將自動跳轉到https://www.fujiabin.com。
本文在博客園和個人我的博客www.fujiabin.com上同步發佈。轉載請註明來源。