每次在配置服务器的时候,对于配置站点都很烦躁,因为招数都一样,却不得不东改一下西改一下,所以就编写了这个脚本,下次部署网站的时候,直接执行就可以了。 一、切换内定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(){ techo -n '请选择服务器 1.nginx 2.apache :' tread SERVICE_CODE t tif [ $SERVICE_CODE == 1 ] tthen techo '你选择了nginx' telif [ $SERVICE_CODE == 2 ] tthen techo '你选择了apache' tSERVER_NAME=apache2 telse techo 'default nginx' tfi } #第二步,输入域名 doInputUrl(){ echo -e "请输入要添加的域名(不含http/https):" read INPUT_URL tif [[ -z $INPUT_URL ]] then echo -e "域名不可为空!n" doInputUrl tfi } #第三步,输入端口号 默认80 doInputPort(){ techo -e "请输入端口号(默认80):" tread INPUT_PORT tif [[ -z $INPUT_PORT ]] tthen ttecho '80' ttINPUT_PORT=80 tfi } #第四步,输入项目根目录,不存在可以选择是否创建 doInputDir(){ techo -e "请输入网站根目录(如 /var/www/html/myproject):" tread INPUT_DIR tif [[ -z $INPUT_DIR ]] tthen ttecho -e "网站目录不可为空!n" ttdoInputDir tfi tif [ ! -d $INPUT_DIR ] tthen ttecho '文件夹不存在,是否创建?(1.创建2.不创建)' ttread IS_CREATE_DIR ttif [[ $IS_CREATE_DIR == 1 || -z $IS_CREATE_DIR ]] ttthen tttmkdir -p $INPUT_DIR tttif [[ $? -ne 0 ]] tttthen ttttecho '文件夹创建失败,稍后请手动创建'; tttfi tttecho '文件夹创建成功' ttelse tttecho '稍后请手动创建项目根目录!' ttfi tfi } 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 texit 0 fi if [ $IS_SURE == 'yes' ] then techo '操作进行中......' techo -e "正在生成$INPUT_URL的配置文件...n" t#-------------nginx 配置文件 START--------------# tNGINX_LOCATION_STRING=' tlocation / {n tttry_files $uri $uri/ /index.php?$query_string;n t}' tNGINX_PHP_LOCATION_STRING=' tlocation ~ .php$ {n ttinclude snippets/fastcgi-php.conf;n ttfastcgi_split_path_info ^(.+.php)(/.+)$;n ttfastcgi_pass unix:/var/run/php/php7.2-fpm.sock;n ttinclude fastcgi_params;n t}' tNGINX_KNOW_LOCATION_STRING=' tlocation ~ /.(?!well-known).* {n ttdeny all;n t}' tNGINX_CONF_STRING=" tserver {n ttlisten $INPUT_PORT;n ttlisten [::]:$INPUT_PORT;n ttroot $INPUT_DIR;n ttadd_header X-Frame-Options "SAMEORIGIN";n ttadd_header X-XSS-Protection "1; mode=block";n ttadd_header X-Content-Type-Options "nosniff";n ttindex index.php index.html index.htm;n ttcharset utf-8;n ttserver_name $INPUT_URL;n tt$NGINX_LOCATION_STRINGn ttlocation = /favicon.ico { access_log off; log_not_found off; }n ttlocation = /robots.txt { access_log off; log_not_found off; }n tterror_page 404 /index.php;n tt$NGINX_PHP_LOCATION_STRINGn tt$NGINX_KNOW_LOCATION_STRINGn t}" t#-------------nginx 配置文件 END ---------------# t#-------------apache 配置文件 START--------------# tAPACHE_ERROR_LOG_STR='Errorlog ${APACHE_LOG_DIR}/error.logn' tAPACHE_CUSTON_LOG_STR='CustomLog ${APACHE_LOG_DIR}/access.log combinedn' tAPACHE_CONF_STRING="n ttServerName $INPUT_URLn ttServerAdmin webmaster@localhostn ttDocumentRoot $INPUT_DIRn tt$APACHE_ERROR_LOG_STRn tt$APACHE_CUSTON_LOG_STRn t" t#-------------apache 配置文件 END ---------------#t #写入配置文件 tif [ $SERVICE_CODE == 2 ] tthen ttCONF_PATH="$SERVER_CONF_DIR/$INPUT_URL.conf" CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf" ttecho -e $APACHE_CONF_STRING > $CONF_PATH telse ttCONF_PATH=$SERVER_CONF_DIR/$INPUT_URL CONF_LN_PATH="$SERVER_LN_CONF_DIR/$INPUT_URL.conf" ttecho -e $NGINX_CONF_STRING > $CONF_PATH tfi tif [[ $? -ne 0 ]] tthen ttecho '配置文件写入失败' ttexit 0 tfi t#创建软链接 tif [[ -L $CONF_LN_PATH ]] tthen ttecho '软链接已经存在,跳过此步骤'; telse ttln -s $CONF_PATH $SERVER_LN_CONF_DIR ttif [[ $? -ne 0 ]] ttthen tttecho '软链接创建失败'; ttfi tfi #更新hosts文件 techo -e "正在更新hosts文件n" techo "127.0.0.1 $INPUT_URL" >> /etc/hosts tif [[ $? -ne 0 ]] tthen ttecho 'hosts文件更新失败' ttexit 0 tfi techo 'hosts文件更新成功' techo -e "正在重启$SERVER_NAME服务器n" tservice $SERVER_NAME restart tif [[ $? -ne 0 ]] tthen ttecho "$SERVER_NAME重启失败" ttexit 0 tfi techo -e "重启成功,网站配置完成" else texit 0 fi
三、配置权限 sudo chmod +x create_hosts.sh
四、开始执行 sudo sh create_hosts.sh
然后根据提示输入相应的信息即可,亲测可用。 五、缺陷。 1.没有检测站点是否已经存在,存在的话会覆盖掉原有的配置 2.hosts文件会无限追加 3.没有正则判断输入的格式 so,这只是个人用来偷懒的一个小脚本,如有可以改进的地方,多多指教。 |