当前位置: 代码迷 >> 综合 >> Liunx shell脚本一键部署虚拟主机(初级代码,欢迎指教)
  详细解决方案

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

热度:67   发布时间:2023-12-12 01:30:55.0

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

一、切换内定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_CODEif [ $SERVICE_CODE == 1 ]then    echo '你选择了nginx'elif [ $SERVICE_CODE == 2 ]thenecho '你选择了apache'SERVER_NAME=apache2elseecho 'default nginx'fi}
#第二步,输入域名
doInputUrl(){echo -e "请输入要添加的域名(不含http/https):"read INPUT_URLif [[ -z $INPUT_URL ]]thenecho -e "域名不可为空!\n"doInputUrlfi
}
#第三步,输入端口号 默认80
doInputPort(){echo -e "请输入端口号(默认80):"read INPUT_PORTif [[ -z $INPUT_PORT ]]thenecho '80'INPUT_PORT=80fi
}
#第四步,输入项目根目录,不存在可以选择是否创建
doInputDir(){echo -e "请输入网站根目录(如 /var/www/html/myproject):"read INPUT_DIRif [[ -z $INPUT_DIR ]]thenecho -e "网站目录不可为空!\n"doInputDirfiif [ ! -d $INPUT_DIR ]thenecho '文件夹不存在,是否创建?(1.创建2.不创建)'read IS_CREATE_DIRif [[ $IS_CREATE_DIR == 1 ||  -z $IS_CREATE_DIR ]]thenmkdir -p $INPUT_DIRif [[ $? -ne 0 ]]thenecho '文件夹创建失败,稍后请手动创建';fiecho '文件夹创建成功'elseecho '稍后请手动创建项目根目录!'fifi}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_SUREif [[ -z $IS_SURE ]]
thenexit 0
fiif [ $IS_SURE == 'yes' ]
thenecho '操作进行中......'echo -e "正在生成$INPUT_URL的配置文件...\n"#-------------nginx 配置文件 START--------------#NGINX_LOCATION_STRING='location / {\ntry_files $uri $uri/ /index.php?$query_string;\n}'NGINX_PHP_LOCATION_STRING='location ~ \.php$ {\ninclude snippets/fastcgi-php.conf;\nfastcgi_split_path_info ^(.+\.php)(/.+)$;\nfastcgi_pass unix:/var/run/php/php7.2-fpm.sock;\ninclude fastcgi_params;\n}'NGINX_KNOW_LOCATION_STRING='location ~ /\.(?!well-known).* {\ndeny all;\n}'NGINX_CONF_STRING="server {\nlisten $INPUT_PORT;\nlisten [::]:$INPUT_PORT;\nroot $INPUT_DIR;\nadd_header X-Frame-Options \"SAMEORIGIN\";\nadd_header X-XSS-Protection \"1; mode=block\";\nadd_header X-Content-Type-Options \"nosniff\";\nindex index.php index.html index.htm;\ncharset utf-8;\nserver_name $INPUT_URL;\n$NGINX_LOCATION_STRING\nlocation = /favicon.ico { access_log off; log_not_found off; }\nlocation = /robots.txt  { access_log off; log_not_found off; }\nerror_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="<VirtualHost *:$INPUT_PORT>\nServerName $INPUT_URL\nServerAdmin webmaster@localhost\nDocumentRoot $INPUT_DIR\n$APACHE_ERROR_LOG_STR\n$APACHE_CUSTON_LOG_STR\n</VirtualHost>"#-------------apache 配置文件 END ---------------#	#写入配置文件if [ $SERVICE_CODE == 2 ]thenCONF_PATH="$SERVER_CONF_DIR/$INPUT_URL.conf"CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf"echo -e $APACHE_CONF_STRING > $CONF_PATHelseCONF_PATH=$SERVER_CONF_DIR/$INPUT_URLCONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf"echo -e $NGINX_CONF_STRING > $CONF_PATHfiif [[ $? -ne 0 ]]thenecho '配置文件写入失败'exit 0fi#创建软链接if [[ -L $CONF_LN_PATH ]]thenecho '软链接已经存在,跳过此步骤';elseln -s $CONF_PATH $SERVER_LN_CONF_DIRif [[ $? -ne 0 ]]thenecho '软链接创建失败';fifi#更新hosts文件echo -e "正在更新hosts文件\n"echo "127.0.0.1 $INPUT_URL" >> /etc/hostsif [[ $? -ne 0 ]]thenecho 'hosts文件更新失败'exit 0fiecho 'hosts文件更新成功'echo -e "正在重启$SERVER_NAME服务器\n"service $SERVER_NAME restartif [[ $? -ne 0 ]]thenecho "$SERVER_NAME重启失败"exit 0fiecho -e "重启成功,网站配置完成"
elseexit 0
fi

三、配置权限

sudo chmod +x create_hosts.sh

四、开始执行

sudo sh create_hosts.sh

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

五、缺陷。

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

2.hosts文件会无限追加

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

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