用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/wordpresscd ~/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相关信息,下面是示例,可自行与前文内容比较。
services: wordpress: db:
version: '3.1'
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
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
此时就能够用域名访问博客了。