背景及目标
宝塔面板自带一键备份功能,但是只能备份源码,而不会备份网站列表、反代配置、SSL证书等信息。
本文目标是:仅通过复制粘贴,几下点击操作,即可快速克隆所有网站到备用服务器。
需要用到的服务
- 2台/多台轻量应用服务器
- 宝塔面板
注:
- 使用腾讯云对象存储COS来存储/同步备份文件体验更佳;
- 腾讯云COS是付费服务,计费项包括:存储容量费用、请求费用、数据取回费用、流量费用和管理功能费用,具体信息参考计费概述
设置步骤
1、在备用服务器上安装和主服务器相同的环境(Apache/Nginx、PHP等)
2、主服务器、备用服务器登录“腾讯云COSFS”
可选项,如不使用对象存储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、数据库备份可使用宝塔自带的备份,无需自己造轮子