bashスクリプトを使用してApache仮想ホストをすばやく作成する

少し前に、私はVPSから専用サーバーに移動しましたが、突然、古いサーバーから新しいサーバーにサイトを転送するという問題、つまり仮想ホストとデータベースの迅速な作成に直面しました。 もちろん、ISPmanagerコントロールパネルはサーバーの付属物にありましたが、この場合、次の2つの点が好きではありませんでした。



このため、すべてをペンで構成することにしました。 Apacheとphpのインストールについては記述しません。Habréとインターネットの両方でこのトピックに関する資料が多数あるためです。 ユーザー、仮想ホスト、データベースの迅速な作成に関心があります。 おもしろい人にはタックルでお願いします。



ロジックを2つのスクリプトに分割することにしました。



スクリプトのいくつかの条件。



新しい仮想ホストを作成するスクリプト(/ home / addsite)

#!/bin/bash IP_ADDRESS="1.2.3.4" APACHE2_DIR="/etc/apache2" UID_ROOT=0 if [ "$UID" -ne "$UID_ROOT" ]; then echo "$0 - Requires root privileges" exit 1 fi function is_user(){ local check_user="$1"; grep "$check_user:" /etc/passwd >/dev/null if [ $? -ne 0 ]; then #echo "NOT HAVE USER" return 0 else #echo "HAVE USER" return 1 fi } function generate_pass(){ CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+\\|/" LENGTH="8" while [ "${n:=1}" -le "$LENGTH" ] ; do PASSWORD="$PASSWORD${CHARS:$(($RANDOM%${#CHARS})):1}" let n+=1 done echo $PASSWORD } function is_yes(){ #TODO - add check 3-rd parameter for set default ansver (if press enter) while true do echo -n "Yes or No[Y/n]:" read x if [ -z "$x" ] then return 0; #defaul answer: Yes fi case "$x" in y |Y |yes | | | ) return 0;; n |N |no | | | ) return 1;; # * ) ; # asc again esac done } function create_user(){ local login="$1" local password="$2" `useradd -m -s /bin/bash $login` #set password echo -e "$password\n$password\n" | passwd $login >> /dev/null } USER_NAME=$1 echo -n "Check user name $USER_NAME: " if( is_user "$USER_NAME" )then USER_PASSWORD="$(generate_pass)" echo "-----------------------------------" echo "User name : $USER_NAME" echo "User password: $USER_PASSWORD" echo "-----------------------------------" echo -n "Continue? " if(! is_yes) then exit; fi echo "--- create user ---" create_user "$USER_NAME" "$USER_PASSWORD" fi if [ $# -eq 2 ]; then if [ "$2" != "delete" ]; then SITE_NAME=$2 mkdir /home/$USER_NAME/$SITE_NAME mkdir /home/$USER_NAME/$SITE_NAME/www mkdir /home/$USER_NAME/$SITE_NAME/logs mkdir /home/$USER_NAME/$SITE_NAME/tmp mkdir /home/$USER_NAME/$SITE_NAME/cgi-bin hostConf=" <VirtualHost ${IP_ADDRESS}:80> ServerName $SITE_NAME ServerAlias www.$SITE_NAME ServerAdmin webmaster@$SITE_NAME AddDefaultCharset utf-8 AssignUserID ${USER_NAME} ${USER_NAME} DocumentRoot /home/$USER_NAME/$SITE_NAME/www CustomLog log combined ErrorLog /home/$USER_NAME/$SITE_NAME/logs/error.log DirectoryIndex index.php index.html ScriptAlias /cgi-bin/ /home/$USER_NAME/$SITE_NAME/cgi-bin <FilesMatch \"\\.ph(p[3-5]?|tml)$\"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch \"\\.phps$\"> SetHandler application/x-httpd-php-source </FilesMatch> php_admin_value upload_tmp_dir "/home/$USER_NAME/$SITE_NAME/tmp" php_admin_value session.save_path "/home/$USER_NAME/$SITE_NAME/tmp" php_admin_value open_basedir "/home/$USER_NAME/$SITE_NAME/www:." </VirtualHost> <Directory /home/$USER_NAME/$SITE_NAME/www> Options +Includes +ExecCGI php_admin_flag engine on </Directory> " touch ${APACHE2_DIR}/vhosts/${SITE_NAME}.conf echo "$hostConf" >> ${APACHE2_DIR}/vhosts/${SITE_NAME}.conf touch //home/$USER_NAME/$SITE_NAME/www/index.php echo "<?php phpinfo() ?>" >> /home/$USER_NAME/$SITE_NAME/www/index.php chown $USER_NAME:$USER_NAME /home/$USER_NAME/$SITE_NAME/* service apache2 restart fi fi; #display information echo "*****************************************" echo "* Profit!" echo "*****************************************"
      
      





一般的に、複雑なことは何もありません。最初は、サーバーのIPアドレスとApache設定があるフォルダーを設定します。 ファイルを実行する権限を追加することを忘れないでください

 chmod -x /home/addsite
      
      





Apacheが構成を取得するために、メイン構成ファイルの最後に追加します

 Include vhosts/
      
      





単純にスクリプトを実行する

 /home/addsite user_name site.ru
      
      





スクリプトはユーザー、仮想ホストを作成し、Apacheを再起動します。 そしてもちろん、彼は新しく作成されたユーザーのパスワードを表示することを忘れないでしょう。

データベースの作成。 phpMyAdminからデータベースを作成することに少し悩みました。最初にデータベースを作成し、次にユーザーを作成し、新しいユーザーに特権を追加することを忘れないでください。ここでは、生活を簡略化します(/ home / addbd)。

 #!/bin/bash MYSQL_PASS="derev123blog" UID_ROOT=0 if [ "$UID" -ne "$UID_ROOT" ]; then echo "$0 - Requires root privileges" exit 1 fi function generate_pass(){ CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+\\|/" LENGTH="8" while [ "${n:=1}" -le "$LENGTH" ] ; do PASSWORD="$PASSWORD${CHARS:$(($RANDOM%${#CHARS})):1}" let n+=1 done echo $PASSWORD } function is_running(){ local result="$(ps -A|grep $1|wc -l)" if [[ $result -eq 0 ]]; then return 1 else return 0 fi } if [ $# -eq 1 ]; then echo -n "Check MySQL status: " if(is_running mysqld)then echo "OK [Running]"; DB_NAME=$1 DB_PASSWORD="$(generate_pass)" mysql -uroot -p${MYSQL_PASS} --execute="create database ${DB_NAME};" mysql -uroot -p${MYSQL_PASS} --execute="GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_NAME}'@'localhost' IDENTIFIED by '${DB_PASSWORD}' WITH GRANT OPTION;" else echo "Error: need start mysql daemon!" exit fi fi; #display information echo "*****************************************" echo "* Data base name: ${DB_NAME}" echo "* Data base user: ${DB_NAME}" echo "* User password: ${DB_PASSWORD}" echo "* Profit!" echo "*****************************************"
      
      





スクリプトの最初に、MySQLからrootユーザーのパスワードを設定します。 チームで実行

 /home/addsite bd_name
      
      





データベースとユーザーが作成され、接続用のデータが表示されます。

また、両方のファイルを/ binディレクトリに追加して、コマンドデータをすばやく呼び出すこともできます。

 cp /home/addsite /bin/addsite cp /home/addbd /bin/addbd
      
      





みんなのようです。 仮想ホストを作成するこの方法が、私だけでなくユーザーの生活を簡素化することを願っています。



All Articles