docker部署wordpress,以及遇到的那些坑

第一个博客,就把部署这个博客(wordpress)的过程以及遇到的那些坑写一下吧。环境是阿里云的Ubuntu,mysql、wordpress、以及反向代理nginx均使用docker容器部署。

1. docker-compose 配置文件

数据库mysql以及反向代理nginx的镜像配置就不说了,不熟悉的同学单独搜下这两个镜像的配置吧。直接上wordpress的docker-compose.yaml配置:

services:
  mywordpress:
    image: wordpress:latest
    container_name: mywordpress
    restart: unless-stopped
    environment:
      WORDPRESS_DB_HOST: core-mysql:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: xxxxxxx
      WORDPRESS_DB_NAME: xxxxxxx
    volumes:
        - ./mywordpress/wp-content:/var/www/html/wp-content
    links:
        - core-mysql
    expose:
        - "80"

networks:
  default:
    external:
      name: my-network

直接使用命令下方命令启动 ( 服务方式启动使用命令 docker-compose up -d mywordpress )

docker-compose up mywordpress 

日志中出现错误

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.2.15. Set the 'ServerName' directive globally to suppress this message 

搜了半天,据称要在apache2的配置文件总加个ServerName配置项。

docker exec -it mywordpress bash

进入容器内,打开文件 /etc/apache2/apache2.conf, 增加一行内容

ServerName  blog.stumpbox.cn

说实话我不晓得这个配置项要加什么内容,于是我就把自己域名加上去了。
然后,启动成功….

ps. 容器中是没有vim的,如果你受得了apt官方镜像的龟速,下面命令安装

apt update
apt install vim

我试了下,实在太慢了。我修改了下apt镜像源。找了很多国内源的配置,update报错。下面这个成功了,但据说是不用GPG验证的,有安全隐患。

mv /etc/apt/sources.list /etc/apt/sources.list.bak

cat <<EOF >/etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
EOF

apt update
apt install vim

2. 反向代理配置

nginx反向代理之前对web系统的配置很简单,像这样

  server {
    listen  80;
    server_name  blog.stumpbox.cn;

    location / {
      set $upstream mywordpress:80;
      proxy_pass http://$upstream;
    }
  }

但是,这样部署之后打开 blog.stumpbox.cn 直接跳转到 http://mywordpress/wp-admin/ 这把域名直接换成了容器的名字是几个意思?
对我这个万年后端来说,实在查不出原因,问谷哥度娘了,搜出下面这段配置,成功了。依然不知道原因,后面慢慢研究吧。

  server {
    listen  80;
    server_name  blog.stumpbox.cn;

    root html;
    location / {
        proxy_pass http://mywordpress;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_next_upstream error timeout http_502;
    }
  }

域名解析配好,访问 blog.stumpbox.cn ,成功打开安装界面, 填信息,下一步,网站就搭建好了。

3. 中文支持

依然是咨询了谷哥度娘,都回答是如下步骤:

  1. 修改 wp-config.php 文件,添加配置 define('WPLANG', 'zh_CN');.
  2. 管理页面 dashboard > update 去更新。然后我等~~~~
  3. 如果你等到更新成功,在设置里面切换至简体中文就可以了。

但是我没有等到….. 不停的timeout。
于是下载了中文包, 找到 wp-content/languages 目录, 直接将整个languages目录复制到宿主机的 ${pwd}/mywordpress/wp-content 中( 看第一节,的docker-compose配置文件,容器做了volumes映射,所以放到宿主机的对应目录就可以了), 重启mywordpress容器,成功切换到中文。

4. 主题安装

扒拉主题页,找到了Astra,比较喜欢这种极简风,安装,弹出要填写主机的机器名,ftp用户名密码,神马鬼?
没错,我又去咨询了谷哥和度娘。
下面的是照抄原文:

主要原因是wordpress主目录的权限所有者不属于apache造成的;

1.找到apache服务所使用的用户名和用户组,打开终端,输入:
   
   ps -aux

找到 /usr/sbin/apach 的用户名,它就是apache的所有者,我这里是 www-data

2.终端输入:

  sudo chown www-data:www-data -R /var/www/

这里的/var/www/是我的web主目录也是wordpress主目录;

好了,这样就OK了,再进入wordpress后台安装主题和插件不在需要FTP帐户和密码了!!
不知道有没有其它方法,暂时就这样了!

搞定,写博客去浪啦~

2020年12月16日更新: 装上了wp-statistics来统计点击率,发现,由于我使用了反向代理,wp-statistics是无法获取访问者的真实ip的,统一变成了我服务器的内部ip了…..

修改nginx配置,设置header中的X-Real-IP属性,配置如下:

  server {
    listen  80;
    server_name  blog.stumpbox.cn;

    root html;
    location / {
        proxy_pass http://mywordpress;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_next_upstream error timeout http_502;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

  }

保存重启nginx,然后到wp的管理后台,统计->设置->访客ip,然后REMOTE_ADDR 和 HTTP_X_REAL_IP 都变成真实ip了,选哪个都行。

然后设置访问识别,启用 GeoIP的国家、城市识别,更新ip数据库。大部分童鞋会更新失败,别怕,到wp的部署目录中,找到 wp-content/plugins/wp-statistics/includes/class-wp-statistics-geoip.php ( wp-statistics版本V13.0.4,老版本的位置可能不同 ), 看里面有配置的country 和 city 的source,替换两个source为下面的两个cdn链接( 来自http://rosm.cn/?p=1051 ):

https://cdn.rosm.cn/GeoLite2-City.mmdb.gz
https://cdn.rosm.cn/GeoLite2-Country.mmdb.gz

配置好后启用GeoIP, 更新数据库,OK了,可以正常统计访问者IP了。

点击数:111415

3人评论了“docker部署wordpress,以及遇到的那些坑”

  1. WordPress内部用Apache,外部docker用Nginx吗(狗头

    另外可以配置一下WordPress设置中的【固定链接】,也就是“伪静态”,涉及到Apache或者Nginx的配置

    有利于SEO

发表评论

您的电子邮箱地址不会被公开。

*

code