使用 Docker 安装 WordPress

创建
阅读 790

docker-wordpress.png

今天是元旦,首先要祝自己、祝大家元旦快乐?。

好久没有写东西了,新年新开始,从今天开始写点东西吧。

昨天刚把 Wordpress 装上了,记录一些安装过程。毕竟不是像原来那样常规的安装方式。

安装方式

通过 docker 安装,docker-compose 放在 gist 上,其中包含一些其他 services,请自行忽略

遇到的问题

1.通过 nginx 转发 wordpress

因为做了多个 services,所以不能直接将宿主机的 80 端口或 443 端给 wordpress,一开始我不知道怎么弄,后来发现可以直接转到通过反向代理转到http://wordpress:80

参考GitHub 链接

2.SSL 证书错误

因为 1 中使用 http,80 端口访问的,也就是从 nginx container 到 wordpress container 中访问是通过 HTTP 访问的,由于 wordpress container 中没有配置 SSL 证书,目前也只能这样了。正因为这样,wordpress 中检测不到 https 访问,所以资源链接一律返回 HTTP,到浏览器一片红。

找到一个解决办法。

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
$_SERVER['HTTPS'] = '1';

if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

我的配置,简单粗暴,不带判断

$_SERVER['HTTPS'] = '1';
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];

参考链接:https://github.com/docker-library/wordpress/issues/251#issuecomment-345687824

3.数据库保存

目前将数据保存在 mysql container 中,对 mysql image 还没有深入研究,毕竟经常会 docker-compose up -d --force-recreate ,数据保存在 container,多危险。这是一个 //TODO 的事情。

2018.01.10 update:

重新配置 WordPress

2018.03.24 update:

4.客户端 IP 获取错误

由于请求是通过 nginx 转发了一次,Wordpress 获取到的客户端 IP 是 docker 传过去的形似 172.18.0.x 的 IP 地址,在评论中显示作者 IP 那就是 172.18.0.x了,要想拿到真实的客户端 IP,可以这样做:

在 nginx 配置文件中添加

proxy_set_header  X-Real-IP          $remote_addr;

在 Wordpress 中 wp-config.php 添加

if (isset($_SERVER['HTTP_X_REAL_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

更新记录

  1. 2018-01-01 12:48:54 首次发布

本文链接 https://www.yidiankuaile.com/post/install-wordpress-with-docker