首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转Lighthouse】简单几步建立主备服务器系统,实现快速克隆

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

原创
作者头像
TDP-苏苏
修改2022-05-05 16:39:17
2.8K1
修改2022-05-05 16:39:17
举报
文章被收录于专栏:上云实践笔记上云实践笔记

背景及目标

宝塔面板自带一键备份功能,但是只能备份源码,而不会备份网站列表、反代配置、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

#!/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目录下

#!/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、数据库备份可使用宝塔自带的备份,无需自己造轮子

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景及目标
  • 需要用到的服务
  • 设置步骤
    • 1、在备用服务器上安装和主服务器相同的环境(Apache/Nginx、PHP等)
      • 2、主服务器、备用服务器登录“腾讯云COSFS”
        • 3、在主服务器添加计划任务
          • 4、备用服务器添加计划任务
          • 需要切换时
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档