Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx做为反向代理并添加SSL证书(阿里云免费DV证书)

前言

在我写完Centos7.4下用Docker-Compose部署WordPress这篇文章后,个人我的博客已经正式的开始运做。但考虑到网站访问的安全性以及从此可能会重复利用服务器来部署其余网站的可能,所以我决定在原有基础上来加上Nginx用做反向代理,并添加SSL 证书使博客运行在HTTPS协议上。html

本文中统一使用www.fujiabin.com这个域名,在实际操做中,你应该所有替换成本身的域名。node

准备SSL证书

如今有不少免费的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

  • 阿里云后台地址:https://home.console.aliyun.com/new#/(须要注册才能访问)。
  • 若是你的域名也是在阿里云上申请的话,域名的验证将会变得特别简单,在补全域名信息的时候,将选项证书绑定的域名在【阿里云的云解析】产品中,受权系统自动添加一条记录以完成域名受权验证。勾上便可,阿里云将自动在你的域名管理中添加一条用以验证的解析记录。
  • CSR你能够选本身生成CSR,或者直接选用系统生成CSR,两个并无区别,可是若是你以为系统生成的不够安全,能够本身手动生成。
  • 若是选用的是系统生成CSR选项,在域名审核经过后(由于DV是系统自动审核的,因此也就几分钟时间状态就会变成已签发状态),能够在个人证书菜单中,找到对应的域名,并点击下载按钮下载你的证书和秘钥文件包(里面将包含一个xxx.key的秘钥文件和一个xxx.pem的证书文件)。

配置

添加一个Docker Network

$ docker network create nginx-proxynginx

手动建立Docker Network,这样就能够将全部yml中的容器链接到这个网络上来互相联通。web

docker-compose.yml

这个配置文件是在前一片文章的基础上修改的,只有修改部分我添加了注释,其余部分的说明可参考: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

添加ssl证书

还记得刚才在阿里云后台得到的证书文件吗?如今立刻要派上用场了。如下命令均在宿主机中执行:docker

$ docker volume lsvim

这个命令将在宿主机中查看Docker中全部的卷信息,你会看到一个VOLUME NAMExxx_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上同步发布。转载请注明来源。


参考文档

相关文章
相关标签/搜索