пятница, 21 января 2011 г.

Скрипт для добавления сайтов Apache в Ubuntu 10.10

 

В связи с частой потребностью добавлять новые удалять старые сайты, надоело постоянно создавать все каталоги и новые файлы вручную. Следовательно был написан простенький скрипт, сводящий эту процедуру к вызову данного файла и ввода имени сайта.

Итак, скрипт для добавления:

#!/bin/sh

echo --------------------------
echo "Добавление нового сайта "
echo --------------------------

echo –n "Введите имя сайта: "

#Ждем ввода  имени сайта
read SITE

DIR="/var/www/$SITE"

#Проверяем существования такого каталога

if [ -d $DIR ]
then
echo "Такой сайт уже существует "
exit 1
fi

FILE="/etc/apache2/sites-available/$SITE"

#Создаем файл с настройками из копии исходного
cp /etc/apache2/sites-available/default $FILE

#Делаем ссылку на наш файл
ln -s $FILE /etc/apache2/sites-enabled/$SITE

#Редактируем наш файл. Заменяются стандартные имена и пути
sed -i "s/*/$SITE/" $FILE
sed -i "/<VirtualHost $SITE:80>/i NameVirtualHost $SITE:80" $FILE
sed -i "s/default/$SITE/g" $FILE
sed -i "s/webmaster@localhost/webmaster@$SITE/" $FILE
sed -i "/DocumentRoot \/var\/www\/$SITE/i ServerAlias www.$SITE" $FILE
sed -i "/ServerAlias www.$SITE/i Servername $SITE" $FILE

#Создаем необходимые каталоги

mkdir $DIR
mkdir $DIR/cgi-bin

#Меняем их владельца
chown -R www-data:www-data /var/www/$SITE

#Включаем сайт
a2ensite $SITE

#Добавляем наш сайт в хосты

echo "127.0.0.1 $SITE" >> /etc/hosts

#Копируем тестовый файл проверки работы веб-сервера

cp /var/www/default/index.html $DIR/index.html

#Перезапускаем веб-сервер

/etc/init.d/apache2 reload

 

Делаем скрипт исполняемым, и помещаем в папку /sbin. Оеперь достаточно набрать имя файла и после запроса ввести имя нового сайта.

Теперь скрипт для удаления. Здесь все еще проще.

#!/bin/sh

echo "Удаление сайта"
echo -n "Введите имя сайта : "

read SITE

DIR="/var/www/$SITE"

if [ -d $DIR ]
then

a2dissite $SITE

rm -r  $DIR
rm /etc/apache2/sites-available/$SITE

sed -i "/127.0.0.1 $SITE/d" /etc/hosts

/etc/init.d/apache2 reload

echo "Сайт $SITE был успешно удален"
exit 1

else

echo "Сайта $SITE нет на сервере"
exit 1
fi

 

С этим скриптом поступаем аналогично первому. Работает точно так же. Запускаем файл, вводим имя удаляемого сайта.

Со временем я решил усовершенствовать эти скрипты и объединил их в один. Получилось вот такое:

#!/bin/sh

#Функция добавления

add_site()
        {
        echo "Добавление нового сайта "
        sleep 1
        echo -n  "Введите имя сайта: "
        #Ждем ввода  имени сайта
        while read SITE
        do
        if
                [ "$SITE" != "" ]
        then
        DIR="/var/www/$SITE"
        FILE="/etc/apache2/sites-available/$SITE"

                if
                        [ -d $DIR ]
                then
                        echo "Такой сайт уже существует "
                        exit 1
                else

                #Создаем файл с настройками из копии исходного
                cp /etc/apache2/sites-available/default $FILE
                ln -s $FILE /etc/apache2/sites-enabled/$SITE

               #Редактируем наш файл
                sed -i "s/*/$SITE/" $FILE
                sed -i "/<VirtualHost $SITE:80>/i NameVirtualHost $SITE:80" $FILE
                sed -i "s/default/$SITE/g" $FILE
                sed -i "s/webmaster@localhost/webmaster@$SITE/" $FILE
                sed -i "/DocumentRoot \/var\/www\/$SITE/i ServerAlias www.$SITE" $FILE
                sed -i "/ServerAlias www.$SITE/i Servername $SITE" $FILE

                #Создаем необходимые каталоги
                mkdir $DIR
                mkdir $DIR/cgi-bin

                #Меняем их владельца
                chown -R www-data:www-data $DIR

                #Включаем сайт
                a2ensite $SITE >> /dev/null 2>&1

                #Добавляем наш сайт в хосты
                echo "127.0.0.1 $SITE" >> /etc/hosts
                cp /var/www/default/index.html $DIR/index.html
                /etc/init.d/apache2 restart  >> /dev/null 2>&1
                echo "Сайт $SITE успешно добавлен"
                exit 0
                fi
        fi
        echo "Вы не ввели название."
        echo -n  "Введите имя сайта или ^Z для выхода: "
        done
        }

#Функция удаления

rm_site()
        {
        echo "Удаление сайта"
        sleep 1
        echo -n  "Введите имя сайта: "
        while read SITE
        do
        if
                [ "$SITE" != "" ]
        then
                DIR="/var/www/$SITE"
                FILE="/etc/apache2/sites-available/$SITE"

                if
                        [ -d $DIR ]
                then
                        a2dissite $SITE >>/dev/null 2>&1

                      #Удаляем каталоги и файлы
                        rm -r  $DIR
                        rm /etc/apache2/sites-available/$SITE
                        sed -i "/127.0.0.1 $SITE/d" /etc/hosts
                        /etc/init.d/apache2 reload >> /dev/null 2>&1
                        echo "Сайт $SITE был успешно удален"
                        exit 0
                else
                echo "Сайта $SITE нет на сервере"
                exit 1
                fi
        fi
        echo "Вы не ввели название."
        echo -n  "Введите имя сайта или ^Z для выхода: "
        done
        }

 

#Проверяем права пользователя 

  if
                [ $(whoami) != "root" ]
        then
                echo 'You must be root.'
                exit 1
        fi

#Процедура добавления удаления 

        if
                [ "$1" = "" ]
        then

         #Если запустили без параметров
        echo "Неверный параметр. "

        echo "Используйте add для добавления и remove для удаления"
        exit 1
        else
                case $1 in
                add)
                add_site #
Добавляем сайт
                ;;
                remove)
                rm_site #
Удадяем сайт
                ;;
                esac
        fi

 

Называем наш файл site, помещаем в папку /sbin, делаем исполняемым. Запускать его нужно с параметрами:

site add – для добавления сайта;

site remove – для удаления.

4 комментария:

  1. что это за язык программирования?

    ОтветитьУдалить
  2. Привет! Если есть желание за денежку чуток дописать скрипт по добавлению доменов - отпиши на vanmadden@europe.com. Это срочно!

    ОтветитьУдалить