Docker安装配置WordPress

本站使用WordPress搭建,之前一直使用Linode $10美刀一个月的服务,机房选择在JP,但是感觉速度不行,在国内链接的响应速度基本都在200-300ms之间,前段时间发现搬瓦工的速度还可以,而且按年付费价格比Linode便宜,所以用了好一段时间来折腾网站迁移的工作。

之前在Linode,网站直接搭建在主机上,上面搭建的服务还很多,迁移非常的困难,于是在新站点服务全面使用基于Docker配置,方便以后迁移。

本站迁移中,使用了两个Docker镜像,官方的WordPress和MariaDB镜像。

安装MariaDB

下载安装最新版的MariaDB镜像

docker pull mariadb

创建一个外部目录/docker/mariadb/var/lib/mysql来存放MariaDB数据文件

mkdir -p /docker/mariadb/var/lib/mysql/

创建并运行MariaDB容器,把本地数据目录映射到容器中的/var/lib/mysql目录,并把3306端口映射到主机地址的3306端口,要注意使用-e MYSQL_ROOT_PASSWORD来指定MariaDB root用户初始密码

docker run --name mariadb -p 3306:3306 -v /docker/mariadb/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=XXXXXXXXXX -d mariadb

登入MariaDB容器环境

docker exec -it mariadb bash
mysql -u root -p

创建数据库和数据库维护用户

create database wordpress character set utf8 collate utf8_general_ci;
create user wordpress_user identified by 'XXXXXXXXX';
grant all privileges on wordpress.* to wordpress_user;
flush privileges;

安装WordPress

下载最新版的WordPress镜像安装

docker pull wordpress

创建并运行Docker容器环境,官方的WordPress镜像是基于Ubuntu+Apache+MySQL的,镜像里面使用的是80端口,因为主机上安装了nginx,代理很多服务,所以把容器里面的80端口映射到主机的8081端口,使用–link mariadb:mysql指定使用的MySQL为已安装的MariaDB容器

docker run --name wordpress -p 8081:80 --link mariadb:mysql -d wordpress

这时候通过浏览器打开地址ip:8081即可按照提示安装WordPress了。

使用nginx反向代理

本机上安装了nginx,配置了https给很多服务使用,所以这里也把WordPress的地址通过用nginx反向代理实现https访问。

在/etc/nginx/conf.d/目录下创建一个新的配置文件

server {
    listen 80;
    server_name liangxiaorui.com www.liangxiaorui.com;
    return 301  https://$server_name$request_uri;
}

server {
  listen       443 ssl;
  server_name liangxiaorui.com www.liangxiaorui.com;
  ssl_certificate /path/to/cert.pem;
  ssl_certificate_key /path/to/key.pem;
  keepalive_timeout 70; 

  error_log /var/log/nginx/liangxiaorui.com.log error; 

  location  / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8081; 
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}

这里使用proxy_pass反向代理到容器的8081端口实现https访问。这里需要注意的是,一定要加上

proxy_set_header X-Forwarded-Proto $scheme;

因为外部nginx使用的是https,容器里面的Apache使用的是http,添加这句话就是为了识别用户实际发出的是https协议还是http协议,之前没加,导致一直出现127.0.0.1重定向错误。这也是迁移过程中遇到的一个小问题之一。

配置完成之后,就可以通过https访问站点了

标签:WordPressDocker 发布于:2019-10-25 04:02:40