使用Docker部署WordPress会遇到几个小坑

本文主要解决反向代理CSS/JS丢失

和后台无限重定向的问题

索性从头到尾重新梳理一遍

Docker安装

使用官方一键安装脚本

1
curl -fsSL https://get.docker.com | bash -s docker

拉取镜像

需要MySQL、WordPress、nginx-proxy-manager这三个镜像
MySQL可以用Mariadb替代
当然web服务器也可以用apache、caddy等替代

1
2
3
4
5
6
7
8
拉取MySQL5.7镜像
docker pull mysql:5.7

拉取WordPress镜像
docker pull wordpress

拉取NginxProxyManager镜像
docker pull jc21/nginx-proxy-manager

查看所拉取的镜像

1
docker images

创建网络

创建一个名为web的虚拟网络

1
docker network create web

运行MySQL镜像

首先启动MySQL容器 并加入到web这个网络
自定义密码MYSQL_ROOT_PASSWORD设置为123456

1
docker run --name mysql57 --net web -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci

然后进入容器 创建数据库及添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#进入mysql57容器内部
docker exec -it mysql57 bash

#登录数据库
mysql -uroot -p #输入密码123456

#创建数据库wp
mysql> create database wp;

#创建用户wp 并设置密码为123456
mtsql> create user wp identified by "123456";

#给用户添加权限
mysql> grant all on wp.* to wp;

#最后退出
exit
操作视频

运行WordPress镜像

创建一个目录用于存放wordpress文件

1
2
cd /home
mkdir blog

进入目录 运行wordpress镜像

1
2
cd blog
docker run -dit --net web -v `pwd`:/var/www/html --name wordpress wordpress
操作视频

运行NginxProxyManager镜像

创建一个目录用于存放NginxProxyManager配置文件

1
2
cd /home
mkdir nginx_proxy

进入目录 运行nginx-proxy-manager镜像

1
2
3
4
cd nginx_proxy

#管理页面端口映射为60054 可以自定义
docker run -dit -p 80:80 -p 60054:81 -p 443:443 --net web --name nginx_proxy -v $PWD/data:/data -v $PWD/letsencrypt:/etc/letsencrypt --restart=unless-stopped jc21/nginx-proxy-manager
操作视频

基础需要的镜像就启动完成了 检查一下

1
docker ps

以上容器都启动完成了

后续配置

提前将域名解析到服务器IP
打开nginx-proxy-manager的管理界面登录http://IP:60054

默认登录信息:

1
2
Email:    admin@example.com
Password: changeme

进入后先修改登录信息
再到SSL Certificates页面申请SSL证书

填写你的域名
同意条款 点击保存

申请完成后回到Hosts > Proxy Hosts
新增一个代理填好你的域名信息 以及代理转发的地址和端口

然后点击窗口上方的SSL 选择刚才申请的证书
并开启强制使用SSL HTTP2支持根据自己需求选择 最后保存

保存后打开域名应该就能看到wordpress站点安装页面了
但是这里就出现了CSS/JS丢失的情况

暂时先不管 直接安装即可 注意数据库信息填写的时候不要填错了

填写站点信息 完成安装

问题解决

最后解决一下css/js丢失的问题
进入/home/blog目录
编辑wp-config.php这个文件
将以下代码添加到文件偏上处

1
2
3
4
5
6
7
8
9
/**强制使用SSL/HTTPS访问后台以及登录**/
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

/**请求标头告知**/
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
&& $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
操作视频

最后保存 刷新网页 css/js不再丢失

原创不易 转载需注明原文链接 若有疑问请联系i@tls.su 谢谢