程序旅途博客从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 去修改权限没有生效……