Liunx shell脚本一键部署虚拟主机(初级代码,欢迎指教)

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

一、切换内定Shell为 bash

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

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

ls -l /bin/sh

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

sudo dpkg-reconfigure dash

在跳出的选择框里选择 NO 回车即可。

二、编写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_STRING\n

		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_STRING\n

		$NGINX_KNOW_LOCATION_STRING\n

	}"
	#-------------nginx  配置文件 END ---------------#

	#-------------apache 配置文件 START--------------#

	APACHE_ERROR_LOG_STR='Errorlog ${APACHE_LOG_DIR}/error.log\n'
	APACHE_CUSTON_LOG_STR='CustomLog ${APACHE_LOG_DIR}/access.log combined\n'

	APACHE_CONF_STRING="\n
		ServerName $INPUT_URL\n
		ServerAdmin webmaster@localhost\n
		DocumentRoot $INPUT_DIR\n
		$APACHE_ERROR_LOG_STR\n
		$APACHE_CUSTON_LOG_STR\n
	"
	#-------------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,这只是个人用来偷懒的一个小脚本,如有可以改进的地方,多多指教。

你可能感兴趣的:(Nginx,Ubuntu,Apache,LNMP,LAMP,Linux)