本站使用WordPress搭建,之前一直使用Linode $10美刀一个月的服务,机房选择在JP,但是感觉速度不行,在国内链接的响应速度基本都在200-300ms之间,前段时间发现搬瓦工的速度还可以,而且按年付费价格比Linode便宜,所以用了好一段时间来折腾网站迁移的工作。
之前在Linode,网站直接搭建在主机上,上面搭建的服务还很多,迁移非常的困难,于是在新站点服务全面使用基于Docker配置,方便以后迁移。
本站迁移中,使用了两个Docker镜像,官方的WordPress和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镜像安装
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,配置了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访问站点了