一、简介
随着容器化时代的到来,这项技术越来越普及,也确实因为其得天独到的优势,将会引来或正在进行一次技术革新。那么大众博客的网站也有必要进行一次技术更新,下面就如何将以传统类似LNMP架构的wordpress,迁移至全容器化运行的方式。
源码和详细步骤:https://github.com/zhangqiongjie/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
参考文档:
https://juejin.cn/post/7160952210547802149
后续完整代码的仓库地址会补充在此处。
评论前必须登录!
注册