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

选择“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值的解决办法

您好,我在安装wordpress插件时提示需要 FTP 服务,我的解决方法(参考 https://www.cnblogs.com/scleer/p/7122915.html)是修改容器内的 wp-config.php 文件和设置 wp-content 目录的权限。
请问您是怎么解决这个问题的呢?
也是修改目录权限。
手动进入容器修改权限么?我感觉最好的方式应该是通过 Dockerfile 声明所有的操作,避免黑箱操作。但是我在 Dockerfile 中用 RUN 去修改权限没有生效……