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

每次在配置服务器的时候,对于配置站点都很烦躁,因为招数都一样,却不得不东改一下西改一下,所以就编写了这个脚本,下次部署网站的时候,直接执行就可以了 。
一、切换内定Shell为 bash
使用的ubuntu18.04 LTS 版本,默认的是dash
【使用shell脚本一键部署虚拟主机】使用 命令查看当前系统的内定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_CODEif [ $SERVICE_CODE == 1 ] thenecho '你选择了nginx' elif [ $SERVICE_CODE == 2 ] thenecho '你选择了apache'SERVER_NAME=apache2 elseecho 'default nginx' fi }#第二步,输入域名doInputUrl(){ echo -e "请输入要添加的域名(不含http/https):" read INPUT_URLif [[ -z $INPUT_URL ]] then echo -e "域名不可为空!n" doInputUrl fi}#第三步,输入端口号 默认80doInputPort(){ echo -e "请输入端口号(默认80):" read INPUT_PORT if [[ -z $INPUT_PORT ]] thenecho '80'INPUT_PORT=80 fi}#第四步,输入项目根目录,不存在可以选择是否创建doInputDir(){ echo -e "请输入网站根目录(如 /var/www/html/myproject):" read INPUT_DIR if [[ -z $INPUT_DIR ]] thenecho -e "网站目录不可为空!n"doInputDir fiif [ ! -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 '稍后请手动创建项目根目录!'fi fi }doChooseServerdoInputUrldoInputPortdoInputDir#项目配置文件位置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 0fi if [ $IS_SURE == 'yes' ]then echo '操作进行中......' 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_STRINGnlocation = /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_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>nServerName $INPUT_URLnServerAdmin webmaster@localhostnDocumentRoot $INPUT_DIRn$APACHE_ERROR_LOG_STRn$APACHE_CUSTON_LOG_STRn </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_PATH elseCONF_PATH=$SERVER_CONF_DIR/$INPUT_URL CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf"echo -e $NGINX_CONF_STRING > $CONF_PATH fiif [[ $? -ne 0 ]] thenecho '配置文件写入失败'exit 0 fi#创建软链接 if [[ -L $CONF_LN_PATH ]] thenecho '软链接已经存在,跳过此步骤'; elseln -s $CONF_PATH $SERVER_LN_CONF_DIRif [[ $? -ne 0 ]]thenecho '软链接创建失败';fi fi#更新hosts文件echo -e "正在更新hosts文件n" echo "127.0.0.1 $INPUT_URL" >> /etc/hosts if [[ $? -ne 0 ]] thenecho 'hosts文件更新失败'exit 0 fi echo 'hosts文件更新成功'echo -e "正在重启$SERVER_NAME服务器n" service $SERVER_NAME restartif [[ $? -ne 0 ]] thenecho "$SERVER_NAME重启失败"exit 0 fiecho -e "重启成功,网站配置完成"else exit 0fi


推荐阅读