Алексей Набоков Web — разработка, seo, программирование

17Авг/100

Управление виртуальными хостами

Для разработчика частой бывает ситуация, когда необходимо на локальной машине или тестовом сервере поднять новый хост.  При создании нового проекта или тестовой копии существующего.

Это довольно рутинная операция, которая обычно состоит из добавления нового виртуального хоста в apache, добавления ns-записи в hosts, создании БД в MySQL.

Для автоматизации написал два небольших скрипта добавления и удаления хостов на bash. Вызываются скрипты из под root`а

add_host.sh

#!/bin/bash
# Добавление хоста
path_vhost='/var/sites/'
path_hosts='/etc/hosts'
path_conf='/etc/apache2/sites-enabled/'
mysql_host='localhost'
mysql_user='root'
mysql_pass='pass'
ip='127.0.0.1'
user='anabokov'
group='anabokov'

while getopts "m" optname
  do
   case "$optname" in
    "m")
     sql_flag="yes"
     ;;
   esac
done

host=${@:$OPTIND}
if test -z "$host"
then
  echo 'Вы не ввели название хоста'
  exit
fi

#/etc/hosts
echo "${ip}${host}.loc" >> $path_hosts

# папки
cd $path_vhost
mkdir  ${path_vhost}${host}
mkdir  ${path_vhost}${host}/www
mkdir  ${path_vhost}${host}/logs
chown -R ${user}:${group} ${path_vhost}${host}

#conf apache
cd $path_conf
conf="<VirtualHost $host.loc>\n
ServerAdmin a.nabokov@gmail.com\n
ServerName $host.loc\n
DocumentRoot \"${path_vhost}${host}/www/\"\n
ErrorLog ${path_vhost}${host}/logs/error.log\n
LogLevel warn\n
CustomLog ${path_vhost}${host}/logs/access.log combined\n
</VirtualHost>"

echo -e $conf > $host.conf

# restart apache
service apache2 restart

#mysql база опционально
if [ "$sql_flag" ]
then
  sql="CREATE DATABASE \`${host}\`  CHARACTER SET utf8 COLLATE utf8_general_ci;"
  mysql -h $mysql_host -u $mysql_user -p$mysql_pass -e "${sql}"
fi

Вызов:

sudo ./add_host.sh  [-m] hostname

-m опция создания БД MySQL

del_host.sh

#!/bin/bash
# Удаление хоста
path_vhost='/var/sites/'
path_hosts='/etc/hosts'
path_conf='/etc/apache2/sites-enabled/'
mysql_host='localhost'
mysql_user='root'
mysql_pass='hp2101'
ip='127.0.0.1'

host=$1
if test -z "$host"
then
  echo 'Вы не ввели название хоста'
  exit
fi

# подтвержение удаление?
read -p "Вы уверены что хотите удалить хост ${host} ? (Y/N) " CONT
if [[ ! $CONT =~ ^[Yy]$ ]]
then
   exit 1
fi

#/etc/host
res=`sed -e "/${ip}\t${host}.loc/d" $path_hosts`
echo "$res" > $path_hosts

#папки
rm -Rf  ${path_vhost}${host}

#conf apache
rm -f ${path_conf}${host}.conf

#mysql база
sql="DROP DATABASE IF EXISTS \`${host}\`;"
  mysql -h $mysql_host -u $mysql_user -p$mysql_pass -e "${sql}"

# restart apache
service apache2 restart

Вызов:

sudo ./del_host.sh   hostname

Комментарии (0) Пинги (0)

Пока нет комментариев.


Оставить комментарий

Введите сумму с картинки *

Trackbacks are disabled.