docker-compose 迁移 wordpress

Author Avatar
MagicDo 11月 02, 2019
  • 在其它设备中阅读本文章

docker-compose 允许用户通过一个单独的docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

​ 我一直想把自己的博客迁移到docker 上来,之前看docker实战,记得里面有利用docker-compose 配置wordpress 的说明,趁着周末,拿出点时间将博客完全迁移过来。

准备工作

首先要做的是数据的备份,由于数据不多,我们首先利用mysqldump将mysql 中的数据备份出来。

1
mysqldump -u root -p wordpress_db >wordpress.2019.11.02.sql

然后将 wordpress 的程序 备份一下,避免出现问题。

安装 docker-compose

1
sudo curl -L "https://github.com/docker/compose/releases/download/1.17.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

授权:

1
sudo chmod +x /usr/local/bin/docker-compose

编写docker-compose.yml, 在这之前需要查看自己之前的php 版本以及wordpress 版本,然后更改 以下文件的wordpress 镜像的版本。不然的化,迁移可能会有问题

可以去docker hub(https://hub.docker.com/_/wordpress?tab=tags&page=1&ordering=-last_updated) 上查找版本,我们使用的是 apache 版本的。

然后将挂载的文件夹建好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: "3"
services:

db:
image: mysql:5.7
container_name: mysql-wp
volumes:
- /alidata/mysql/db_data:/var/lib/mysql
ports:
- "13306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpresspass

wordpress:
depends_on:
- db
image: wordpress:4.7.0-php5.6-apache
ports:
- "9000:80"
container_name: wordpress
volumes:
- /alidata/www/wordpress:/var/www/html
restart: always
environment:
WORDPRESS_DB_HOST: db:13306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspass

开始迁移

在 docker-compose.yml 同级目录执行以下命令

1
docker-compose up -d

查看日志:

1
docker-compose logs

将之前备份好的数据导入到 mysql 中。建议客户端连接之前的数据库,将sql文件导入。执行之前,如果域名有变化,需要将sql文件中的域名全部替换掉再执行。

然后服务器上将刚才的服务停掉

1
docker-compose stop

将挂载的wordpress 文件夹中的文件删掉,替换为自己的wordpress 文件。记得给文件夹赋权限。

1
docker-compose start

这样程序就迁移成功了。

配置nginx 代理

nginx 我们直接装在主机里面了,没有使用docker 管理。

编写nginx 配置文件

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
server_name xxx.xxx.com;

location / {
proxy_pass http://127.0.0.1:9000;
proxy_redirect off;
proxy_set_header Host $host;
}
}

将配置文件放在nginx 配置文件的 conf.d 文件夹中,重启nginx,访问域名即可。

之前的博客配置了固定链接 404 的问题

需要开启apache2 的 伪静态

将容器中的配置文件拷贝出来修改

1
docker cp wordpress:/etc/apache2/apache2.conf .

AllowOverride None

改为

AllowOverride All

修改完拷贝进去

1
docker cp apache2.conf wordpress:/etc/apache2/apache2.conf

进入容器

1
docker exec -it wordpress /bin/bash

执行

1
a2enmod rewrite

退出容器后重启容器

1
docker restart wordpress

再次访问就不会404了