Docker部署WordPress并配置https

一、前期准备

配置https需要ssl证书,若是在腾讯云或阿里云购买的域名,可直接在相应平台免费申请,证书有效期为一年,过期后需再次手动申请。

国内网络Docker拉取镜像可能会出现进度缓慢或拉取失败的情况,建议修改配置为从国内的镜像站拉取。

二、Docker部署mysql

部署前请查看WordPress所支持的mysql版本,这里选择的版本为5.7,若服务器已安装mysql可省略此步骤。

docker run -d -name mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql:5.7

这里的 12345678 为数据库root账户的密码,请自行设定。上述命令执行完成后输入docker ps查看已启动的容器,若列表中存在mysql则说明创建成功了。

部署phpMyAdmin,主要用来管理mysql数据库,后边会用到。

三、部署WordPress

docker run -d --name phpmyadmin --link mysql:db phpmyadmin
docker run -d --name wordpress --link mysql:db wordpress

四、部署nginx

先创建一个文件夹用于放置nginx的配置文件以及日志,本次创建的文件夹为/root/nginx

docker run -d --name nginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/logs:/var/log/nginx -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/certs:/etc/nginx/certs --link wordpress:wordpress --link phpmyadmin:phpmyadmin docker

由于/root/nginx中并没有nginx的配置文件,所有nginx容器无法启动。接下来将容器中的相应文件复制到这个文件夹中。

docker cp nginx:/etc/nginx/nginx.conf /root/nginx/nginx.conf
docker cp nginx:/var/log/nginx /root/nginx/logs
docker cp nginx:/usr/share/nginx/html /root/nginx/html
mkdir /root/nginx/certs

假如你的域名是 www.ggboomsky.com,证书名是ggboomsky.crtggboomsky.key

先将证书放置在/root/nginx/certs目录下,编辑文件/root/nginx/nginx.conf,在http内添加如下配置:

# 安装完wordpress删除该配置
server {
  listen 80;
  server_name install.ggboomsky.com;
  location / {
    proxy_pass http://wordpress;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}
# phpMyAdmin
server {
  listen 80;
  server_name admin.ggboomsky.com;
  location / {
    proxy_pass http://phpmyadmin;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}


# http跳转到https
server {
  listen 80;
  server_name www.ggboomsky.com ggboomsky.com;
  return 301 https://www.ggboomsky.com$request_uri;
}
# 不带www跳转到带www
server {
  listen 443 ssl;
  server_name ggboomsky.com;
  ssl_certificate /etc/nginx/certs/ggboomsky.crt;
  ssl_certificate_key /etc/nginx/certs/ggboomsky.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  return 301 https://www.ggboomsky.com$request_uri;
}

server {
  listen 443 ssl;
  server_name www.ggboomsky.com;
  ssl_certificate /etc/nginx/certs/ggboomsky.crt;
  ssl_certificate_key /etc/nginx/certs/ggboomsky.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  location  / {
    proxy_pass http://wordpress;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

文件保存后执行docker start nginx启动nginx容器。

五、安装WordPress

一切准备就绪后,浏览器先访问http://admin.ggboomsky.com创建WordPress要用到的数据库以及账号密码。

然后访问http://install.ggboomsky.com开始安装WordPress。

安装完成后,http网站就已经部署好了,接下来是配置https。

后台搜索插件Really Simple SSL并安装。

然后在设置-常规中将WordPress地址站点地址改为https://www.ggboomsky.com

注意,点击保存更改后浏览器会出现无法加载网页的情况,请接着往下看。

docker cp wordpress:/var/www/html/wp-config.php /root/

执行上述命令将WordPress容器中的配置文件拷贝出来,然后修改。

<?php下边一行添加$_SERVER['HTTPS'] = 'on';然后执行以下命令将文件拷贝到 WordPress容器内。

docker cp /root/wp-config.php wordpress:/var/www/html/

完成后执行docker restart wordpress重新启动WordPress容器。

最后,浏览器访问https://www.ggboomsky.com。

写在最后

建议部署时将mysql容器中的数据文件和WordPress配置文件挂载到外部文件夹,否则当你删除容器时,容器中的所有数据也会被一同删除掉。