程序旅途博客从2013年7月建立到现在已经4年了,一直放在香港的虚拟主机上,马上就要到期了,决定迁移到阿里云上。虚拟主机提供了控制面板,操作起来很简单,迁移到Ubuntu,当然也要本着简单的原则,于是就有了这篇WordPress迁移到Docker上的文章。

下面是迁移的过程。

备份网站

登录到虚拟主机的“主机面板”

WordPress迁移到Docker过程记录-程序旅途

选择“数据备份”,就可以整站备份,包括WordPress程序,资源文件和数据库。备份完,通过FTP下载到Ubuntu服务器。

FTP下载备份文件

# 进入ftp交互模式
ftp
# 与ftp服务器建立连接,回车提示输入用户名、密码
open ftp地址
# 输入ftp账户
ftp账户
# 输入ftp密码
ftp密码
# 登录ftp成功后,可以使用ls命令查看目录内容
# 下载备份文件
mget 备份文件路径

Docker运行WordPress和MySQL容器

首先确保服务器上已经安装了docker和docker-compose,可以使用下面的命令检查是否已经安装

docker -v
docker-compose -v

如果没有安装,可以参照官方文档按照步骤安装即可。

Ubuntu安装Docker CE: https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
安装Docker Compose: https://docs.docker.com/compose/install/

将下载下来的备份文件解压

tar -zxvf backup-Jul-17-2017-1.tar.gz

然后将public_html目录移动到~/wordpress/chengxulvtu目录下

mv backup-Jul-17-2017-1/domains/chengxulvtu.net/public_html ~/wordpress/chengxulvtu/html

进入到~/wordpress/chengxulvtu/html,新建一个Compose的配置文件docker-compose.yml

cd ~/wordpress/chengxulvtu/html
vim docker-compose.yml

配置文件的内容如下

version: '3'
services:
  mysqldb:
    image: mysql
    container_name: wordpress_mysql
    ports:
      - '3306:3306'
    volumes:
      - ./data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: chengxulvtu
      MYSQL_USER: chengxulvtu
      MYSQL_PASSWORD: 123456

  wordpress:
    depends_on:
      - mysqldb
    image: wordpress
    container_name: wordpress_chengxulvtu
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: wordpress_mysql:3306
      WORDPRESS_DB_NAME: chengxulvtu
      WORDPRESS_DB_USER: chengxulvtu
      WORDPRESS_DB_PASSWORD: 123456
    volumes:
      - ./html:/var/www/html

Compose配置文件写好后,就可以运行下面的命令,启动容器了

docker-compose up -d

这里需要注意是,要给wp-content目录及子目录rwx的权限,否则可能会出现“因为我们不能复制一些文件,升级未被安装,这通常是因为存在不一致的文件权限”的错误。

chmod -R 777 wp-content

Nginx反向代理

现在已经成功运行wordperss了,Compose配置的监听端口为8080。现在需要使用Nginx作为反向代理服务器,以便可以通过80端口访问。

Ubuntu安装Nginx: https://www.chengxulvtu.net/2017/07/05/ubuntu-16-04-install-nginx.html

/etc/nginx/conf.d中新建一个chengxulvtu.conf的配置文件

vim /etc/nginx/conf.d/chengxulvtu.conf

配置如下

server {
    listen      80;
    server_name www.chengxulvtu.net chengxulvtu.net;
    
    client_max_body_size    20m;

    location / {
		proxy_pass http://localhost:8080;
		proxy_set_header Host $host;
		proxy_set_header X-Forward-For $remote_addr;
    }
}

然后重启Nginx

# 检查nginx配置有没有错误
nginx -t
# 重启nginx
nginx -s reload

还原数据库

最后一步,还原数据库。备份文件里包含有备份的SQL文件,直接导入到数据库中即可。

我使用的MySQL客户端是Sequel Pro,使用Compose配置里设置的MySQL用户名,密码登录到MySQL,然后打开备份的MySQL文件,会有下面的提示:

WordPress迁移到Docker过程记录-程序旅途

选择“Import”,就可以将数据库还原了。

至此,成功将WordPress迁移到Docker上了。

相关链接

Ubuntu安装Docker CE: https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
安装Docker Compose: https://docs.docker.com/compose/install/
Ubuntu安装Nginx: https://www.chengxulvtu.net/2017/07/05/ubuntu-16-04-install-nginx.html

补充

2017-07-19
配置Nginx的时候需要调整允许上传文件的大小,否则上传大文件的时候会报错,详细可以参考这篇文章
nginx出现413 Request Entity Too Large的解决办法

另外php上传相关的配置也要修改,否则可能出现“上传的文件尺寸超过php.ini中定义的upload_max_filesize值"的错误,如何配置可以参考这篇文章Docker部署WordPress出现上传的文件尺寸超过php.ini中定义的upload_max_filesize值的解决办法