【玩转Lighthouse】简单几步建立主备服务器系统,实现快速克隆

2022-05-05 16:39:17 浏览数 (1)

背景及目标

宝塔面板自带一键备份功能,但是只能备份源码,而不会备份网站列表、反代配置、SSL证书等信息。

本文目标是:仅通过复制粘贴,几下点击操作,即可快速克隆所有网站到备用服务器。

需要用到的服务

  • 2台/多台轻量应用服务器
  • 宝塔面板

注:

  1. 使用腾讯云对象存储COS来存储/同步备份文件体验更佳;
  2. 腾讯云COS是付费服务,计费项包括:存储容量费用、请求费用、数据取回费用、流量费用和管理功能费用,具体信息参考计费概述

设置步骤

1、在备用服务器上安装和主服务器相同的环境(Apache/Nginx、PHP等)

2、主服务器、备用服务器登录“腾讯云COSFS”

可选项,如不使用对象存储COS保存备份可跳过本操作。

按提示挂载。如果不用COS,也可以手动下载后上传到备用服务器,个人喜欢用cos,同地域内网上传下载速度极快,很方便。

如果没安装先安装如果没安装先安装
输入密钥等参数输入密钥等参数
挂载COS到服务器挂载COS到服务器

记住挂载的路径,后面用得到,这里记下:/www/cosfs/bt-sh

3、在主服务器添加计划任务

任务类型选择Shell脚本,复制粘贴以下内容,添加任务。

第7行根据实际情况修改,CLOUD=后面,填写备份文件存储路径,如使用COS填写步骤2挂载的路径/www/cosfs/bt-sh,不使用COS就填本地路径,如/www/backup/fastsync

代码语言:javascript复制
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin;

#-------配置信息-------#

#备份文件存储位置
CLOUD="/www/cosfs/bt-sh"
#7z压缩包密码
PWD7Z="password"
#源码压缩包文件名
WWWROOT_FILE="wwwroot.7z";
#设置项压缩包文件名
CONFIG_FILE="config.7z";

#-------配置信息-------#

if [ $(whoami) != "root" ];then
	echo "请使用root权限执行命令"
	exit 1;
fi
if [ ! -d /www/server/panel ] || [ ! -f /etc/init.d/bt ];then
	echo "未安装宝塔面板."
	exit 1
fi

PARM7Z="-mx0 -bsp0 -bb0 -bd -p${PWD7Z} -xr!*.7z -xr!*.zip -xr!*.gz"

install_7z(){
	if [ ! -f /usr/bin/7za ]; then
		yum install p7zip -y
	fi
}

mk_dir(){
	mkdir -p /www/backup/cron;
	mkdir -p /www/backup/cron/temp/;
	mkdir -p /www/backup/cron/temp/config;
}

backup_wwwroot(){
	echo "★备份网站源码...";
	echo $(7za a -t7z -r /www/backup/cron/${WWWROOT_FILE} "/www/wwwroot/*" ${PARM7Z}) > /dev/null
}

backup_config(){
	echo "★备份站点信息...";
	sqlite3 /www/server/panel/data/default.db <<EOF
.output /www/backup/cron/temp/config/default.sql
.dump binding
.dump config
.dump domain
.dump sites
.dump site_types
EOF
	
	cp -a /www/server/panel/vhost /www/backup/cron/temp/config/;
	if [ -f /www/server/panel/data/proxyfile.json ]; then
		cp /www/server/panel/data/proxyfile.json /www/backup/cron/temp/config/
	fi
	if [ -f /www/server/panel/data/redirect.conf ]; then
		cp /www/server/panel/data/redirect.conf /www/backup/cron/temp/config/
	fi
	if [ -f /www/server/panel/data/site_dir_auth.json ]; then
		cp /www/server/panel/data/site_dir_auth.json /www/backup/cron/temp/config/
	fi

	echo $(7za a -t7z -r /www/backup/cron/${CONFIG_FILE} /www/backup/cron/temp/config ${PARM7Z}) > /dev/null
	rm -rf /www/backup/cron/temp;
}

mv_to_cos(){

	echo "★上传到COS...";
	mkdir -p $CLOUD
	mv -f /www/backup/cron/${WWWROOT_FILE} ${CLOUD}/${WWWROOT_FILE}
	mv -f /www/backup/cron/${CONFIG_FILE} ${CLOUD}/${CONFIG_FILE}
	rm -rf /www/backup/cron
}

main(){
	echo "★★备份数据开始."
	install_7z
	mk_dir
	backup_wwwroot
	backup_config
	mv_to_cos
	echo "★★备份数据完成."
}

main

*该脚本执行完毕,会有两个压缩包(wwwroot.7z和config.7z)上传到COS存储桶/存储在本地备份目录

执行之后可以看日志,是否执行成功

4、备用服务器添加计划任务

在备用服务器添加计划任务,复制粘贴以下内容

第7行根据实际情况修改,CLOUD=后面,填写备份文件存储路径,如使用COS填写步骤2挂载的路径/www/cosfs/bt-sh。不使用COS就填本地路径,如/www/backup/fastsync,然后把主服务器上的备份文件(wwwroot.7z和config.7z)手动上传到备用服务器的/www/backup/fastsync目录下

代码语言:javascript复制
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin;

#-------配置信息-------#

#cosfs插件挂载位置
CLOUD="/www/cosfs/bt-sh"
#7z压缩包密码
PWD7Z="password"
#源码压缩包文件名
WWWROOT_FILE="wwwroot.7z"
#设置项压缩包文件名
CONFIG_FILE="config.7z"

#-------配置信息-------#

if [ $(whoami) != "root" ];then
	echo "☆请使用root权限执行命令!"
	exit 1;
fi
if [ ! -d /www/server/panel ] || [ ! -f /etc/init.d/bt ];then
	echo "☆未安装宝塔面板"
	exit 1;
fi

PARM7Z=" -p${PWD7Z} -bsp0 -bb0 -bd  -y";

if [ ! -f "${CLOUD}/${WWWROOT_FILE}" ] || [ ! -f "${CLOUD}/${CONFIG_FILE}" ]; then
	echo "☆[$CLOUD]目录下未发现备份文件,请确保已登录cosfs插件并挂载!";
	exit 1;
fi

install_7z(){
	if [ ! -f /usr/bin/7za ]; then
		yum install p7zip -y
	fi
}

restore_wwwroot(){
	echo "★还原wwwroot网站源码";
	find /www/wwwroot -name ".user.ini" -exec chattr -i {} ;
	rm -rf "/www/wwwroot/*";
	echo $(7za x ${CLOUD}/${WWWROOT_FILE} -o/www/wwwroot ${PARM7Z}) > /dev/null
	chown www -R /www/wwwroot
	find /www/wwwroot -name ".user.ini" -exec chattr  i {} ;
}

restore_config(){
	echo "★还原配置文件";
	mkdir -p /www/tmp/
	CONFIG_PATH=/www/tmp/config
	if [ ! -d ${CONFIG_PATH} ];then
		rm -rf ${CONFIG_PATH};
	fi
	
	echo $(7za x ${CLOUD}/${CONFIG_FILE} -o/www/tmp/ ${PARM7Z}) > /dev/null
	
	cp -a -f ${CONFIG_PATH}/vhost /www/server/panel;
	if [ -f ${CONFIG_PATH}/proxyfile.json ]; then
		cp -f ${CONFIG_PATH}/proxyfile.json /www/server/panel/data
	fi
	if [ -f ${CONFIG_PATH}/redirect.conf ]; then
		cp -f ${CONFIG_PATH}/redirect.conf /www/server/panel/data
	fi
	if [ -f ${CONFIG_PATH}/site_dir_auth.json ]; then
		cp -f ${CONFIG_PATH}/site_dir_auth.json /www/server/panel/data
	fi
	
	sqlite3 /www/server/panel/data/default.db <<EOF
drop table binding;
drop table config;
drop table domain;
drop table site_types;
drop table sites;
.read ${CONFIG_PATH}/default.sql
EOF
	if test $? != 0; then
		echo "☆配置还原失败!"
		exit 1;
	fi
	
	rm -rf $CONFIG_PATH
}


restart_server(){
	if [ -f /etc/init.d/nginx ];then
		/etc/init.d/nginx restart
	fi

	if [ -f /etc/init.d/httpd ];then
		/etc/init.d/httpd restart
	fi

	if [ -f /etc/init.d/memcached ];then
		/etc/init.d/memcached restart
	fi
	
	if test $? != 0; then
		echo "☆Web服务重启失败!"
		exit 1;
	fi
	echo "★Web服务重启成功!"
}


main(){
	echo "★★还原数据开始."
	install_7z && sleep 5
	restore_wwwroot
	restore_config
	restart_server
	echo "★★还原数据完成."
}

main

*执行完毕,备用服务器就拥有了和主服务器相同的站点及配置

主服务器主服务器
备用服务器同步后备用服务器同步后

需要切换时

1、在主服务器手动执行备份任务

2、待备份文件就绪后,在备用服务器手动执行恢复任务

3、数据库备份可使用宝塔自带的备份,无需自己造轮子

0 人点赞