docker安装wordpress开启https

用docker-compose 安装wordpress

根据官方提供的模板,我们再结合你自己服务器的实际情况稍微修改就可以了.

 1version: '3.1'
2
3services:
4
5  wordpress:
6    image: wordpress
7    restart: always
8    ports:
9      - 8080:80
10    environment:
11      WORDPRESS_DB_HOST: db
12      WORDPRESS_DB_USER: wordpress
13      WORDPRESS_DB_PASSWORD: mypassword
14      WORDPRESS_DB_NAME: wordpress
15
16  db:
17    image: mysql:5.7
18    restart: always
19    environment:
20      MYSQL_DATABASE: wordpress
21      MYSQL_USER: wordpress
22      MYSQL_PASSWORD: mypassword
23      MYSQL_RANDOM_ROOT_PASSWORD: '1'

我们需要将以上内容保存为 docker-compose.yml 文件,可以在/root/文件夹下新建一个docker文件夹,存放各个应用的相关文件:

mkdir -p /root/docker/wordpress
cd ~/docker/wordpress
之后通过 Vim 来创建 docker-compose.yml 文件并将上面的内容复制进去。

vim docker-compose.yml
运行 Docker Compose 文件
在完成上述工作后,启动docker-compose.yml文件:

docker-compose up -d
如果没有报错,就可以正常启动,可通过docker ps查看各容器的运行情况:

完成 WordPress 的安装
容器正常运行后,在浏览器中输入http://服务器IP:8080即可打开 WordPress 主页,第一次打开需要进行安装:


可以看到,通过这种方法安装,并不需要我们再手动配置数据库相关信息。

至此,我们已经完成了 WordPress 的搭建,但是这还不够,我们还有下面这三个任务:

通过文件绑定或 Volume 来持久化存储容器中用户数据

配置端口转发

  • 配置 SSL 证书实现 HTTPS 访问
    在本部分内容中,我们只完成第一个任务,至于配置端口转发以及 SSL 证书这个工作,我们将在完成下一部分另一种 WordPress 搭建方式之后统一进行。

  • 持久化存储用户数据
    官方所提供的 docker-compose 文件示例是非常基础的,虽然我们的应用已经正常运行,但应用运行过程中的用户数据我们并未使用 Volume 或者文件绑定的方式存储,所以我们需要对 docker-compose.yml 文件进行完善.
    如果有需要持久化存储其他数据,可根据下面的内容自行修改 docker-compose.yml 文件添加。

本人是推荐直接使用 Volume 方式的,但考虑到可能有朋友需要方便修改 WordPress 主题部分文件之类的需求,同时也考虑到示例因素,本部分将为 wordpress 的网页目录提供两种存储方式,供各位参考,以下两种方式仍然是选择其中一种。

只使用 Volume
修改 docker-compose.yml 文件
使用vim修改docker-compose.yml内容,添加Volume相关信息,下面是示例,可自行与前文内容比较。

version: '3.1'

services:

wordpress:
image: wordpress
restart: always
ports:
- 8080:80
volumes:
- html:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: mypassword
WORDPRESS_DB_NAME: wordpress

db:
image: mysql:5.7
restart: always
volumes:
- db:/var/lib/mysql
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: mypassword
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
html:
db:

需要特别注意内容对齐

重新运行 docker-compose.yml 文件
之后删除之前的容器后,重新运行 docker-compose.yml文件:

docker-compose up -d
如果没有报错就说明一切正常,访问http://服务器IP:8080即可开始安装 WordPress,由于数据已经通过Volume持久存储,现在可以在安装完成 WordPress 后,将容器全部删除,之后再次重新运行docker-compose.yml文件,你会发现之前所设置的一切都还在。

同时使用 Volume 和文件绑定

使用文件绑定的方式是将宿主机中已存在的文件内容挂载到容器中,文件映射的方向是由宿主机到容器,为了保证容器能够正常运行,我们需要将容器中要绑定的文件内容复制到宿主机中。

运行临时 WordPress 容器以复制网页目录内容
由于之前的容器已经进行了安装,我们删除之前的容器,并重新运行 docker-compose.yml 文件

docker-compose up -d
之后我们通过docker cp命令将容器内的/var/www/html复制为宿主机的/root/docker/wordpress/html

cd ~/docker/wordpress #如果未建立该文件夹自行mkdir创建
docker cp wordpress_wordpress_1:/var/www/html . #注意最后的.表示当前目录
命令完成后可通过ls命令确认已经复制成功。

修改 docker-compose.yml 文件
同样使用vim修改docker-compose.yml内容,添加卷和文件绑定相关信息,下面是示例,可自行与前文内容比较。

 1version: '3.1'
2
3services:
4
5  wordpress:
6    image: wordpress
7    restart: always
8    ports:
9      - 8080:80
10    volumes:
11      - ~/docker/wordpress/html:/var/www/html  
12    environment:
13      WORDPRESS_DB_HOST: db
14      WORDPRESS_DB_USER: wordpress
15      WORDPRESS_DB_PASSWORD: mypassword
16      WORDPRESS_DB_NAME: wordpress
17
18  db:
19    image: mysql:5.7
20    restart: always
21    volumes:
22      - db:/var/lib/mysql
23    environment:
24      MYSQL_DATABASE: wordpress
25      MYSQL_USER: wordpress
26      MYSQL_PASSWORD: mypassword
27      MYSQL_RANDOM_ROOT_PASSWORD: '1'
28volumes:
29  html:
30  db:   


重新运行 docker-compose.yml 文件
之后删除之前的容器后,重新运行 docker-compose.yml文件:

docker-compose up -d
如果没有报错就说明一切正常,访问http://服务器IP:8080即可开始安装 WordPress,由于数据已经持久存储,现在可以在安装完成 WordPress 后,将容器全部删除,之后再次重新运行docker-compose.yml文件,你会发现之前所设置的一切都还在。

SSL 证书以及端口转发配置

看到这里的朋友应该都已经完成了搭建,目前我们已经可以通过http://服务器IP:8080这一地址访问网站了,但这显然无法满足真正的需求,我们要实现的是通过https://www.yourdomain.com之类的域名进行访问,本部分将简单说明实现方法。

SSL 证书申请

可以在阿里云,腾讯云,申请免费的一年SSL证书,这里就不详细讲了
推荐看这位大佬写的博客

Web服务器安装

进行端口转发需要安装 Web 服务器,这里我们使用 Nginx,如果你未安装,我推荐你使用 Docker 快速搭建一个,

需要注意的是我们需要增加 SSL 证书文件夹的绑定:
这里首先新建一个docker nginx
把默认配置复制到宿主机里
docker run -d -P nginx
然后把docker ps看一下ID
新建宿主机存nginx配置文件的文件夹,就放在前面设置的docker文件夹里面
docker cp nginx-name:/etc/nginx /root/docker
这里在复制之前先进docker nginx的shell就在/etc/nginx新建一个cert的文件夹
这样后面放证书的时候就不用瞎折腾

1docker run -d --name nginx \
2-v /root/docker/nginx:/etc/nginx \
3-v /root/wwwroot:/usr/share/nginx/html \
4-v /etc/letsencrypt:/etc/letsencrypt \ #另一位大佬的方法
5-v /root/docker/nginx/cert: /etc/nginx/cert #如果按我说的方法做(二选一)
6-p 80:80 \
7-p 443:443 \
8nginx

配置 SSL 证书和端口转发

  • 配置 Nginx
    在这里我们假设你使用了Certbot来申请证书,证书位置为默认的/etc/letsencrypt/下,并将其与 Nginx 容器相同目录进行了绑定

在 Nginx 配置目录下添加 yourdomain.com.conf文件,参考配置如下:

 1server {
2    listen 80;
3    server_name liangxiaorui.com www.liangxiaorui.com;
4    return 301  https://$server_name$request_uri;
5}
6
7server {
8  listen       443 ssl;
9  server_name liangxiaorui.com www.liangxiaorui.com;
10  ssl_certificate /path/to/cert.pem; //证书文件
11  ssl_certificate_key /path/to/key.pem;//证书文件
12  keepalive_timeout 70
13
14  error_log /var/log/nginx/liangxiaorui.com.log error; 
15
16  location  / {
17        proxy_redirect off;
18        proxy_set_header Host $host;
19        proxy_set_header X-Forwarded-Server $host;
20        proxy_set_header X-Real-IP $remote_addr;
21        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
22        proxy_set_header X-Forwarded-Proto $scheme;
23        proxy_pass http://服务器ip:8081; 
24    }
25
26    error_page   500 502 503 504  /50x.html;
27    location = /50x.html {
28        root   /usr/share/nginx/html;
29    }
30
31}

需要注意的是,其中proxy_set_header X-Forwarded-Proto $scheme很关键,这是避免内部apache和外部nginx之间通信导致异常。

保存文件后,重启 Nginx 容器即可。

docker restart nginx
此时就能够用域名访问博客了。

赞赏