[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт для работы с виртуальными хостами apache2
Страницы: 1, 2
RCuPeR
0. Intro

Для чего это все? Цели было 2:
  • избавиться от рутины ковыряния в консоли и файлах
  • получить экспы в разработке shell-скриптов.
1. Что это такое?

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

Итак, что же это такое?

Скрипт позволяет создавать, удалять, активировать и деактивировать хосты на машине, экономя при этом наше время. То есть, не нужно что-то прописывать, ковыряться в конфигах, кидать симлинки и прочее перезапускание сервера лишь для этой цели. Всего лишь одна команда в консоли может сократить время в разы. Поехали! )

2. Краткий хелп

Скрипт принимает след. аргументы:
vhost (add|del|enable|disable) vhostname

Соответственно, по командам (в скобках алиасы):
— add (create) — создать хост, создать базовую файловую структуру и активировать его*.
— del (delete, rm) — удалить только хост с конфигами.
— delall — удалить хост и конфиги, и удалить все файлы для этого сайта**
— enable (on) — добавить к апачу хост. (просто кидаются линки в sites-enabled).
— disable (off) — отключить хост (конфиги остаются)

Пример:
sudo vhost add test.lan
sudo vhost rm test.lan

Рут нужен для того, что бы записываться в /etc/hosts и перезапуска апача.

* Структура папок является таковой, какую использую я. Вверху скрипта есть переменные, в которых определяется, где хранятся ваши сайты.

** Только, если выдержана общая структура.
Например: хост называется test.lan, а файлы лежат в /home/user/www/test.lan. В этом случае удалится эта папка с содержимым.

3. The source of world.
Свернутый текст


#!/bin/bash

projects="/home/alex/web/www";
hosts="/home/alex/web/hosts";
enabled_hosts='/etc/apache2/sites-enabled';
user=$(whoami);
action=$1;
name=$2
db=$3;

add_folders() {
mkdir -p "$projects/$name/www";
mkdir -p "$projects/$name/logs"
mkdir -p "$projects/$name/tmp"
chown -R $user\: "$projects/$name/"
chmod -R 777 "$projects/$name";
}



add_host() {
echo "
<VirtualHost $name:80>
ServerAdmin webmaster@localhost
ServerName $name
ServerAlias www.$name
DocumentRoot $projects/$name/www
ErrorLog $projects/$name/logs/error.log
CustomLog $projects/$name/logs/access.log combined
DirectoryIndex index.php index.htm index.html
LogLevel debug
</VirtualHost>" > $hosts/$name

ln -s $hosts/$name $enabled_hosts/$name
echo "127.0.0.1 $name" >> /etc/hosts
}

add_index_file() {
echo "<html>
<body>
<h1>
$name works!</h1>
</body>
</html>
" > $projects/$name/www/index.htm
}

create_host() {
if [ -z $name ]; then
echo 'No name for vhost given.';
exit 1;
fi

if [ -f "$hosts/$name" ]; then
echo 'Virtual host already exists.';
exit 0;
fi

echo 'All is ok, fast forward -->';
add_folders;

echo '* Folders created';
add_host;

echo '* Host created';
add_index_file;

reload_apache;
}

delete_host() {
if [ -z $name ]; then
echo 'No name for vhost given. Exit.';
exit 1;
fi

if [ -f "$hosts/$name" ]; then
echo "Remove vhost $name? (y/n)";
read confirm;

if [ $confirm = 'y' ]; then
echo "* Removing vhost file from $hosts/$name";
rm $hosts/$name

echo "* Removing link from $enabled_hosts/$name"
rm $enabled_hosts/$name

echo "* Cleaning up /etc/hosts"
sed "/$name/d" /etc/hosts > /tmp/tmp-hosts;
mv -f /tmp/tmp-hosts /etc/hosts
echo "* Vhost $name removed";

reload_apache;
else
echo "Skipped.";
fi
else
echo 'No such vhost.';
exit;
fi
}

delete_all() {
if [ -z $name ]; then
echo 'No name for vhost given. Exit.';
exit 1;
fi

if [ -f "$hosts/$name" ]; then
echo "Remove vhost $name?";
echo "This action will remove all files and directories from this project (y/n)";
read confirm;

if [ $confirm = 'y' ]; then
echo "* Removing files and directories from $projects/$name";
rm -rf $projects/$name
echo "* Removing vhost file from $hosts/$name";

rm $hosts/$name
echo "* Removing link from $enabled_hosts/$name"

rm $enabled_hosts/$name
echo "* Cleaning up /etc/hosts"

sed "/$name/d" /etc/hosts > /tmp/tmp-hosts;
mv -f /tmp/tmp-hosts /etc/hosts
echo "* Done. The matrix has project $name";

reload_apache;

else
echo "Skipped.";
fi
else
echo 'No such vhost.';
exit;
fi
}

enable_host() {
if [ -f "$hosts/$name" ]; then
ln -s $hosts/$name $enabled_hosts/$name
echo "127.0.0.1 $name" >> /etc/hosts

reload_apache;

else
echo 'No such vhost.';
fi
}

disable_host() {
if [ -f "$enabled_hosts/$name" ]; then
echo '* Removing symlink for current host...';
rm /etc/apache2/sites-enabled/$name

echo '* Updating /etc/hosts';
sed "/$name/d" /etc/hosts > /tmp/tmp-hosts;
mv -f /tmp/tmp-hosts /etc/hosts

reload_apache;

echo '* Done'
else
echo 'No such vhost.';
fi
}

show_help() {
echo 'Available actions:
create - creates a new project. Includes folder structure and database (optional).
delete - delete all project files and drops database (optional). Asks for confirmation.
enable - enables selected virtual host.
disable - disables selected virtual host
help - shows this message.';
}

reload_apache() {
service apache2 reload
}

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

case $action in
create)
create_host;
;;

add)
create_host;
;;

rm)
delete_host;
;;

del)
delete_host;
;;

delete)
delete_host;
;;

delall)
delete_all;
;;

on)
enable_host;
;;

enable)
enable_host;
;;

off)
disable_host;
;;

disable)
disable_host;
;;

help)
show_help;
;;

*)
echo "Usage: `basename $0` (create|delete|enable|disable) vhostname";
exit 0;
;;

esac


4. Запуска скрипта

Собственно для запуска скрипта делаем следующее:
1. Сохраняем код в файл vhost.
2. Разрешаем исполнения файла как программы.
3. Копируем файл в директорию /usr/local/bin .
4. Запускаем: vhost (add|del|enable|disable) vhostname

_____________
Гнусный социопат с комплексом Бога.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.