分享交流
合作共赢!

将wordpress站点迁移至全docker容器运行环境【亲测】

一、简介

随着容器化时代的到来,这项技术越来越普及,也确实因为其得天独到的优势,将会引来或正在进行一次技术革新。那么大众博客的网站也有必要进行一次技术更新,下面就如何将以传统类似LNMP架构的wordpress,迁移至全容器化运行的方式。

二、准备(备份数据)

1.备份数据库

我这里用的是mysql5.7,如下常规命令即可完成备份工作:

 mysqldump wordpress  -uuser -ppassword | gzip  > wordpress.sql.gz 

2.备份wordpress应用文件

用FTP或其他工具均可,最简单的还是scp命令,如下:

scp -P 22 root@10.10.10.10:/data/web/wordpress/... ./

三、迁移至容器化环境

简介:因为站点数据和访问量较小,单机运行即可,所以选择docker-compose的方式来实施容器化的目的。

1.准备容器化环境

安装docker、docker-compose,此安装过程比较简单,这里就不废话了(新手可以在此站点搜索关键字或百度或google)。

2.github创建私有仓库(可选项)

目的:持久化、安全、最大限度的定期更新的方式,来保存站点的数据,包括数据库和站点应用文件。后面将补充记录如何通过自动化脚本加定时任务来完成定时更新数据,并自动同步数据,自动化完成一系列过程。如果仅仅想完成迁移,可跳过此步骤。

3.编写docker-compose文件

这里因为创建了git仓库,直接在仓库中的docker-compose目录中编写docker-compse.yaml文件,内容入下:

 version: "3.9"

services:
  mysql:
    container_name: mysql
    image: mysql:5.7
    volumes:
      - ${MYSQL_DATA_PATH}:/var/lib/mysql:rw
      - ${GIT_HOME}/wordpress/wordpress/db/init:/docker-entrypoint-initdb.d:rw
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD} 

  adminer:
    container_name: adminer
    image: adminer
    restart: always
    ports:
      - 8080:8080

  wordpress:
    container_name: wordpress
    depends_on:
      - mysql 
    image: wordpress:5.9.3-php7.4-fpm
    volumes:
      - ${GIT_HOME}/wordpress/wordpress/themes:/var/www/html/wp-content/themes:rw
      - ${GIT_HOME}/wordpress/wordpress/plugins:/var/www/html/wp-content/plugins:rw 
      - ${GIT_HOME}/wordpress/wordpress/uploads:/var/www/html/wp-content/uploads:rw
      - ${GIT_HOME}/wordpress/wordpress/images:/var/www/html/wp-content/images:rw
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: ${MYSQL_USER} 
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD} 
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
        
  nginx:
    container_name: nginx
    depends_on:
      - mysql 
    image: nginx:1.13.5-alpine
    volumes_from:
      - wordpress:rw
    volumes:

      - ${GIT_HOME}/wordpress/wordpress/nginx:/etc/nginx/conf.d
    ports:
      - "80:80"
      - "443:443"
    restart: always 

上面定义的内容,简单地概括为:实现了mysql和wordpress的容器化目的。详细来说,分为如下两部分:

1.数据库

在启动并运行数据库之前通过volume(mount到容器的/docker-entrypoint-initdb.d)实现了自动初始化数据库,创建用户名、密码,并自动恢复数据库的效果;

2.站点应用

同样通过mount volume到宿主机的方式,把wordpress容器文件映射到本机,主要为了数据持久化存储和方便站点后期自定义更改的目的。同时暴露了80和443两个端口,可以通过此端口来访问wordpress站点。

对docker-compose内容不太熟悉的话,可以翻看官方文档,查看详细的使用说明。

4.运行容器

上面docker-compse内容要根据实际情况填写正确,确认无误,即可执行docker-compose命令来启动容器,如下:

# docker-comps up -d

四、启动wordpress

重要提示:

1.如果迁移前后域名保持不变的话,按上面步骤操作完成后即可正常打开wordpress主页。

2.如果迁移前后域名发生变化,操作完上面步骤后,不能正常打开网页,需要通过更改数据库信息,才可以。执行的数据库操作就是一个新旧域名替换的目的。参考: wordpress站点更换域名需要哪些操作?

五、通过cron定期同步站点数据

正常情况下,我们期望服务器站点的数据,包括站点静态数据和数据库数据与Github的数据保持实时同步,这里可以通过cron配置cron job,并编写同步脚本来实现。

1.cron job如下

# Backup wordpress project every day at 00:00
00 00 * * * /data/git/wordpress/script/wp-docker-backup.sh > /dev/null 2>&

2.数据同步实现代码如下:

#!/bin/bash

# What the purpose of this script is to back wordpress data, include databases and website files.
GIT_HOME="/data/git"
GIT_URL="git@github.com:zhangqiongjie/wordpress.git"
BACKUP_DATE=$(date "+%F")
COMMIT_DATE=$(date "+%F %H:%M:%S")
DB_HOME="$GIT_HOME/wordpress/wordpress/db"
if [ ! -d "$GIT_HOME/wordpress" ];then
  echo "git clone..."
  cd $GIT_HOME && git clone -b main $GIT_URL
else
  echo "git pull..."
  cd $GIT_HOME/wordpress && git pull
fi
if [ $? -eq 0 ];then
  echo "Backup databases ..."
  ls $DB_HOME/init/wordpress*.sql.gz
  if [ $? -eq 0 ];then
    mv $DB_HOME/init/wordpress*.sql.gz $DB_HOME/bak/
    echo "Moved init backup to bak folder successfully!"
  fi
  docker exec -it mysql mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} wordpress > $DB_HOME/init/wordpress-$BACKUP_DATE.sql
  sed -i "1d" $DB_HOME/init/wordpress-$BACKUP_DATE.sql
  gzip $DB_HOME/init/wordpress-$BACKUP_DATE.sql
  CURRENT_SIZE=$(ls -l $DB_HOME/init/wordpress-$BACKUP_DATE.sql.gz | awk '{print $5}')
  EXCEPT_SIZE=$((1024*1024*8))
  if [ $? -eq 0 -a $CURRENT_SIZE -gt $EXCEPT_SIZE ];then
    echo "$CURRENT_SIZE -gt $EXCEPT_SIZE"
    if [ $? -eq 0 -a $(ls $DB_HOME/bak/wordpress*.sql.gz |wc -l) -gt 4 ]; then
      ls -t $DB_HOME/bak/wordpress*.sql.gz | tail -1 | xargs rm -fr rm -f
      echo "Databases backup successfully and new backup file: $DB_HOME/init/wordpress-$BACKUP_DATE.sql.gz !"
    fi
    echo "Setup configuration for Git."
    git config --global user.email "15093087438@163.com"
    git config --global user.name "zhangqiongjie"
    echo "Sync up and commit to Git ..."
    if [ $? -eq 0 -a -n "$(git status -s)" ];then
      cd $GIT_HOME/wordpress
      git add .
      git commit -m "sync up from wordpress at $COMMIT_DATE"
      git push origin main
      if [ $? -eq 0 ];then
        echo "Congralation, wordpress sync up and commit successfully at $COMMIT_DATE !!"
      else
        echo "Got git commit error."
      fi
    else
      echo "Got database backup error or Nothing need to commit."
    fi
  fi
else
  echo "git clone or pull got error."
fi

后续完整代码的仓库地址会补充在此处

赞(0) 打赏
未经允许不得转载:琼杰笔记 » 将wordpress站点迁移至全docker容器运行环境【亲测】

评论 抢沙发

评论前必须登录!

 

分享交流,合作共赢!

联系我们加入QQ群

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册