您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

使用shell脚本一键部署虚拟主机

时间:2019-08-28 13:04:17  来源:  作者:

每次在配置服务器的时候,对于配置站点都很烦躁,因为招数都一样,却不得不东改一下西改一下,所以就编写了这个脚本,下次部署网站的时候,直接执行就可以了。

一、切换内定Shell为 bash

使用的ubuntu18.04 LTS 版本,默认的是dash

使用 命令查看当前系统的内定Shell是bash还是dash

————————————————

版权声明:本文为CSDN博主「Marhal」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_38157006/article/details/94569440

ls -l /bin/sh

如果结果显示为 bash就跳过,如果是dash 则切换过来

sudo dpkg-reconfigure dash

二、编写shell脚本 create_hosts.sh

#!/bin/bash
#默认的web服务器名称
SERVER_NAME=Nginx
#第一步,选择web服务器
doChooseServer(){
	echo -n '请选择服务器 1.nginx 2.Apache :' 
	read SERVICE_CODE
	 
	if [ $SERVICE_CODE == 1 ]
	then 
 	echo '你选择了nginx'
	elif [ $SERVICE_CODE == 2 ]
	then
 	echo '你选择了apache'
 	SERVER_NAME=apache2
	else
 	echo 'default nginx'
	fi
 
}
#第二步,输入域名
doInputUrl(){
 echo -e "请输入要添加的域名(不含http/https):"
 read INPUT_URL
 
	if [[ -z $INPUT_URL ]]
 then
 echo -e "域名不可为空!n"
 doInputUrl
	fi
}
#第三步,输入端口号 默认80
doInputPort(){
	echo -e "请输入端口号(默认80):"
	read INPUT_PORT
	if [[ -z $INPUT_PORT ]]
	then
		echo '80'
		INPUT_PORT=80
	fi
}
#第四步,输入项目根目录,不存在可以选择是否创建
doInputDir(){
	echo -e "请输入网站根目录(如 /var/www/html/myproject):"
	read INPUT_DIR
	if [[ -z $INPUT_DIR ]]
	then
		echo -e "网站目录不可为空!n"
		doInputDir
	fi
 
	if [ ! -d $INPUT_DIR ]
	then
		echo '文件夹不存在,是否创建?(1.创建2.不创建)'
		read IS_CREATE_DIR
		if [[ $IS_CREATE_DIR == 1 || -z $IS_CREATE_DIR ]]
		then
			mkdir -p $INPUT_DIR
			if [[ $? -ne 0 ]]
			then
				echo '文件夹创建失败,稍后请手动创建';
			fi
			echo '文件夹创建成功'
		else
			echo '稍后请手动创建项目根目录!'
		fi
	fi
 
}
 
 
doChooseServer
doInputUrl
doInputPort
doInputDir
#项目配置文件位置
SERVER_CONF_DIR="/etc/$SERVER_NAME/sites-available"
SERVER_LN_CONF_DIR="/etc/$SERVER_NAME/sites-enabled/"
# 再次确认虚拟主机信息
echo -e "service: $SERVER_NAME n 网站根目录: $INPUT_DIR n 域名: $INPUT_URL:$INPUT_PORT n 确认添加虚拟主机?(yes/no)"
 
read IS_SURE
 
if [[ -z $IS_SURE ]]
then
	exit 0
fi
 
if [ $IS_SURE == 'yes' ]
then
	echo '操作进行中......'
	echo -e "正在生成$INPUT_URL的配置文件...n"
 
	#-------------nginx 配置文件 START--------------#
 
	NGINX_LOCATION_STRING='
	location / {n
		try_files $uri $uri/ /index.php?$query_string;n
	}'
 
	NGINX_PHP_LOCATION_STRING='
	location ~ .php$ {n
		include snippets/fastcgi-php.conf;n
		fastcgi_split_path_info ^(.+.php)(/.+)$;n
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;n
		include fastcgi_params;n
	}'
 
	NGINX_KNOW_LOCATION_STRING='
	location ~ /.(?!well-known).* {n
		deny all;n
	}'
 
	NGINX_CONF_STRING="
	server {n
		listen $INPUT_PORT;n
		listen [::]:$INPUT_PORT;n
		root $INPUT_DIR;n
		add_header X-Frame-Options "SAMEORIGIN";n
		add_header X-XSS-Protection "1; mode=block";n
		add_header X-Content-Type-Options "nosniff";n
		index index.php index.html index.htm;n
		charset utf-8;n
		server_name $INPUT_URL;n
		$NGINX_LOCATION_STRINGn
		location = /favicon.ico { access_log off; log_not_found off; }n
		location = /robots.txt { access_log off; log_not_found off; }n
		error_page 404 /index.php;n
		$NGINX_PHP_LOCATION_STRINGn
		$NGINX_KNOW_LOCATION_STRINGn
	}"
	#-------------nginx 配置文件 END ---------------#
 
	#-------------apache 配置文件 START--------------#
 
	APACHE_ERROR_LOG_STR='Errorlog ${APACHE_LOG_DIR}/error.logn'
	APACHE_CUSTON_LOG_STR='CustomLog ${APACHE_LOG_DIR}/access.log combinedn'
 
	APACHE_CONF_STRING="<VirtualHost *:$INPUT_PORT>n
		ServerName $INPUT_URLn
		ServerAdmin webmaster@localhostn
		DocumentRoot $INPUT_DIRn
		$APACHE_ERROR_LOG_STRn
		$APACHE_CUSTON_LOG_STRn
	</VirtualHost>"
	#-------------apache 配置文件 END ---------------#	
 #写入配置文件
	if [ $SERVICE_CODE == 2 ]
	then
		CONF_PATH="$SERVER_CONF_DIR/$INPUT_URL.conf"
 CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf"
		echo -e $APACHE_CONF_STRING > $CONF_PATH
	else
		CONF_PATH=$SERVER_CONF_DIR/$INPUT_URL
 CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf"
		echo -e $NGINX_CONF_STRING > $CONF_PATH
	fi
 
 
	if [[ $? -ne 0 ]]
	then
		echo '配置文件写入失败'
		exit 0
	fi
 
	#创建软链接
	if [[ -L $CONF_LN_PATH ]]
	then
		echo '软链接已经存在,跳过此步骤';
	else
		ln -s $CONF_PATH $SERVER_LN_CONF_DIR
 
		if [[ $? -ne 0 ]]
		then
			echo '软链接创建失败';
		fi
	fi
 
 #更新hosts文件
 
	echo -e "正在更新hosts文件n"
	echo "127.0.0.1 $INPUT_URL" >> /etc/hosts
	if [[ $? -ne 0 ]]
	then
		echo 'hosts文件更新失败'
		exit 0
	fi
	echo 'hosts文件更新成功'
 
	echo -e "正在重启$SERVER_NAME服务器n"
	service $SERVER_NAME restart
 
	if [[ $? -ne 0 ]]
	then
		echo "$SERVER_NAME重启失败"
		exit 0
	fi
 
	echo -e "重启成功,网站配置完成"
else
	exit 0
fi

三、配置权限

sudo chmod +x create_hosts.sh

四、开始执行

sudo sh create_hosts.sh

然后根据提示输入相应的信息即可,亲测可用。

五、缺陷。

1.没有检测站点是否已经存在,存在的话会覆盖掉原有的配置

2.hosts文件会无限追加

3.没有正则判断输入的格式

so,这只是个人用来偷懒的一个小脚本,如有可以改进的地方,多多指教。



Tags:虚拟主机   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
话不多说,直奔主题什么是301重定向?301重定向网站是一项简单的服务,用于301将整个网站重定向到一个或多个新主机。我们的虚拟主机提供四十多项快速管理功能,其中就有301重定向...【详细内容】
2021-08-04  Tags: 虚拟主机  点击:(63)  评论:(0)  加入收藏
虚拟主机怎样设置域名解析?设置域名解析,就是将域名的不同形式绑定在虚拟主机商,并将域名解析到虚拟主机的IP上,完成这些操作之后,就设置好了域名解析。这里我们以主机服务商西部...【详细内容】
2021-06-09  Tags: 虚拟主机  点击:(133)  评论:(0)  加入收藏
虚拟主机便宜,云主机云服务器贵点。两者都可以建立网站运行。稳定性和安全性 云主机云服务器比较好。一般网站虚拟主机足够用,如果是比较重要的网站,就选择安全性比较好的云服...【详细内容】
2021-04-08  Tags: 虚拟主机  点击:(241)  评论:(0)  加入收藏
都2020年了,虚拟主机的价格其实于一些入门级别的云服务器差别不是很大,有时可能云服务器还要更便宜一些哦,所以悦然网络工作室一直建议大家直接购买服务器,尽量还是不用虚拟主机...【详细内容】
2020-06-28  Tags: 虚拟主机  点击:(85)  评论:(0)  加入收藏
阿里云虚拟主机开通成功后,web全栈工程师培训老师提醒同学们如需通过域名正常访问,需要满足以下几个条件: 绑定网站域名,并将域名解析到主机的 IP 地址。 域名已备案成功,且备案...【详细内容】
2020-04-23  Tags: 虚拟主机  点击:(80)  评论:(0)  加入收藏
相信看过我之前的文章的人应该知道,我之前出过一期帝国cms的安装教程,但是帝国cms对小白的基础性是很高的,没个基础也玩不来,所以呢,今天我出个wordpress的安装以及使用教程,希望...【详细内容】
2020-04-09  Tags: 虚拟主机  点击:(139)  评论:(0)  加入收藏
虚拟主机能用mysql么?虚拟主机能用mysql的。MySQL数据库一般与Linux系统搭配使用较多,绝大部分的服务商都会提供支持MySQL数据库的虚拟主机产品。MySQL是一种关系数据库管理系...【详细内容】
2020-04-01  Tags: 虚拟主机  点击:(50)  评论:(0)  加入收藏
有的站长或者小型企业在选择虚拟主机的时候,一般都需要根据网站所采用的数据库类型来选择空间方案。数据库也就是放置存储网站数据的地方,基本上所有的动态网站都需要用到数据...【详细内容】
2020-03-18  Tags: 虚拟主机  点击:(83)  评论:(0)  加入收藏
VPS(Virtual Private Server 虚拟专用服务器)技术,由于有很多的物理服务器其实使用率很低,平均CPU的使用率一般都在20%以下。在这样的环境下就出现了将一台物理服务器分割成多个...【详细内容】
2020-03-11  Tags: 虚拟主机  点击:(169)  评论:(0)  加入收藏
网站的种类多到让我们眼花缭乱,不管是高端网站建设还是普通的模板建站,我们都知道网站要想运行需要放到虚拟主机或者服务器上,那么我们也面临着如何选择购买主机的问题。网站主...【详细内容】
2019-12-27  Tags: 虚拟主机  点击:(74)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条