Pull to refresh

Comments 17

можно еще добавить чтоб записи на NSах добавлял.
это делается навсегда один раз добавлением звездочки в ДНС:

domain.ru 123.465.789.123
*.domain.ru domain.ru
Я такой скрипт написал сразу как пересел на убунту. Вот только не додумался к нему еще базу данных добавить.
У меня создает SVN, Trac, делает запись в /etc/hosts и создает файлы для апача.
Проверок он не делает никаких, так что это сырое решение и он не создает директорию для сайта, т. к. мне потом удобней сделать это в Eclipse

<font size="2" face="Courier New" color="black">#!/bin/sh # simple module <font color="#0000ff">for</font> create <font color="#0000ff">new</font> Virtual Host <font color="#0000ff">for</font> Apache2 path_to_apache=<font color="#A31515">"/etc/apache2/sites-available"</font>; path_to_apache_link=<font color="#A31515">"/etc/apache2/sites-enabled"</font>; echo -n <font color="#A31515">"Введите имя сайта: "</font>; read site_name; <font color="#0000ff">if</font> [ <font color="#A31515">"$site_name"</font> != <font color="#A31515">""</font> ] then  <font color="#0000ff">if</font> [ ! -e <font color="#A31515">"$path_to_apache/$site_name"</font> ]  then   echo -n <font color="#A31515">"Создаю сайт $site_name: "</font>;   echo <font color="#A31515">"   NameVirtualHost *:80   <VirtualHost *:80>    ServerAdmin webmaster@localhost    DocumentRoot /www/$site_name/    ServerName $site_name    ErrorLog /var/log/apache2/hosts/$site_name-error.log    CustomLog /var/log/apache2/hosts/$site_name-access.log combined    ServerSignature Off    <Directory /www/$site_name/>    Order Deny,Allow    Deny from all    Allow from 127.0.0.0/24    </Directory>   </VirtualHost>   "</font> > $path_to_apache/$site_name;  echo <font color="#A31515">" готово"</font>;   <font color="#0000ff">else</font> echo <font color="#A31515">"VHost уже существует"</font>;  fi;  <font color="#0000ff">if</font> [ ! -h <font color="#A31515">"$path_to_apache_link/$site_name"</font> ]   then   echo -n <font color="#A31515">"Разрешаем загрузку: "</font>;   a2ensite $site_name;   echo <font color="#A31515">" готово"</font>;   <font color="#0000ff">else</font>   echo <font color="#A31515">"Сайт уже доступен"</font>  fi; isset_site=`grep <font color="#A31515">"$site_name"</font> /etc/hosts`; <font color="#0000ff">if</font> [ <font color="#A31515">"$isset_site"</font> = <font color="#A31515">""</font> ]  then   old_str=`grep <font color="#A31515">"127.0.0.1"</font> /etc/hosts`;   new_str=<font color="#A31515">"$old_str $site_name"</font>;   sed -e <font color="#A31515">"s/$old_str/$new_str/"</font> /etc/hosts > /etc/hosts.temp;   cp /etc/hosts.temp /etc/hosts;   rm /etc/hosts.temp; fi; echo <font color="#A31515">"Сайт $site_name успешно создан"</font>; mkdir /<font color="#0000ff">var</font>/svn/$site_name; svnadmin create /<font color="#0000ff">var</font>/svn/$site_name; chown -R www-data:svn /<font color="#0000ff">var</font>/svn/$site_name; chmod -R g+ws /<font color="#0000ff">var</font>/svn/$site_name; mkdir /<font color="#0000ff">var</font>/trac/$site_name; trac-admin /<font color="#0000ff">var</font>/trac/$site_name initenv $site_name sqlite:db/trac.db svn /<font color="#0000ff">var</font>/svn/$site_name; chown -R www-data:svn /<font color="#0000ff">var</font>/trac/$site_name; chmod -R g+ws /<font color="#0000ff">var</font>/trac/$site_name; echo <font color="#A31515">"  <LocationMatch \"/trac/$site_name/login\">     AuthType Basic     AuthName \"Projects\"     AuthUserFile /etc/apache2/trac.htpasswd     Require valid-user  </LocationMatch>    <Location /trac/$site_name>     SetHandler mod_python     PythonInterpreter main_interpreter     PythonHandler trac.web.modpython_frontend     PythonOption TracEnv /var/trac/$site_name     PythonOption TracUriRoot /trac/$site_name                       </Location> "</font> > /etc/apache2/conf.d/trac_$site_name; trac-admin /<font color="#0000ff">var</font>/trac/$site_name permission add user TRAC_ADMIN /etc/init.d/apache2 restart; <font color="#0000ff">else</font> echo <font color="#A31515">"Вы не ввели имя сайта"</font>; fi exit 0;</font><font size="1" color="gray"> * This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font size="1" color="gray">Source Code Highlighter</font></a>.</font>
Извиняюсь, подсветка не отобразилась, добавляю так
#!/bin/sh
# simple module for create new Virtual Host for Apache2

path_to_apache="/etc/apache2/sites-available";
path_to_apache_link="/etc/apache2/sites-enabled";
echo -n «Введите имя сайта: »;
read site_name;
if [ "$site_name" != "" ]
then
if [! -e "$path_to_apache/$site_name" ]
then
echo -n «Создаю сайт $site_name: »;
echo "
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /www/$site_name/
ServerName $site_name
ErrorLog /var/log/apache2/hosts/$site_name-error.log
CustomLog /var/log/apache2/hosts/$site_name-access.log combined
ServerSignature Off
<Directory /www/$site_name/>
Order Deny,Allow
Deny from all
Allow from 127.0.0.0/24
" > $path_to_apache/$site_name;
echo " готово";
else echo «VHost уже существует»;
fi;
if [! -h "$path_to_apache_link/$site_name" ]
then
echo -n «Разрешаем загрузку: »;
a2ensite $site_name;
echo " готово";
else
echo «Сайт уже доступен»
fi;
isset_site=`grep "$site_name" /etc/hosts`;
if [ "$isset_site" = "" ]
then
old_str=`grep «127.0.0.1» /etc/hosts`;
new_str="$old_str $site_name";
sed -e «s/$old_str/$new_str/» /etc/hosts > /etc/hosts.temp;
cp /etc/hosts.temp /etc/hosts;
rm /etc/hosts.temp;
fi;
echo «Сайт $site_name успешно создан»;
mkdir /var/svn/$site_name;
svnadmin create /var/svn/$site_name;
chown -R www-data:svn /var/svn/$site_name;
chmod -R g+ws /var/svn/$site_name;
mkdir /var/trac/$site_name;
trac-admin /var/trac/$site_name initenv $site_name sqlite:db/trac.db svn /var/svn/$site_name;
chown -R www-data:svn /var/trac/$site_name;
chmod -R g+ws /var/trac/$site_name;
echo "
<LocationMatch \"/trac/$site_name/login\">
AuthType Basic
AuthName \«Projects\»
AuthUserFile /etc/apache2/trac.htpasswd
Require valid-user
<Location /trac/$site_name>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/trac/$site_name
PythonOption TracUriRoot /trac/$site_name
" > /etc/apache2/conf.d/trac_$site_name;
trac-admin /var/trac/$site_name permission add user TRAC_ADMIN
/etc/init.d/apache2 restart;

else
echo «Вы не ввели имя сайта»;
fi
exit 0;
Какой-то треш: жестко закодированые пути, имена групп, ip адресс, путь к mysql бинарнику.
Нигде нет проверки на возврат значения.
Жутко коряво.
есть вариант лучше? просим предоставить решение
Варианты лучше, очевидно, есть, например openpanel.com — она позволяет создавать хостинг акаунты как с консоли, так и с веб-интерфейса. Выше я указал на ОЧЕВИДНЫЕ недостатки Вашего скрита и они достаточно серьезные.
Сделайте, хотя-бы прием параметров через командную строку. На то он и скрипт, чтобы динамически меняться.

«IDENTIFIED by 'anypassword'» — это же ппц!

Для вызова программ используйте /usr/bin/env,
и т. д. и т. п.

Не учите плохому.
Посмотрите в сторону mod_vhost_alias в апаче. Такие костыли актуальны только для обслуживание хостинга, когда пути, названия баз и все остальное максимально стандартизированны.
Я понял вас.
Прошу прощения за то, что не прояснил в какой сфере и для каких целей этот скрипт.
Наша студия занимается тем, что разрабатывает проекты качественно в срок. Таким образом для того, чтобы нам держать марку, мы постоянно пересматриваем некоторые участки процессов разработки.

В данном случае у меня была существенная проблема: при входе нового проекта в стадию разработки не было стандартизирован процесс автоматической настройки окружения для этого проекта, т. е. на каждый такой новый проект создавалась своя директория, прописывались соответствующие настройки в конфиг веб сервера, создавалась БД и доступ к ней — все это было жестко привязано к чловеку, хорошо знакомому с этим процессом. Т. е. когда этот специалист был занят другой более важной задачей, приходилось либо самому проделывать все эти дейсвия, либо поручать другим менее квалифицированным в этом вопросе людям, в последнем случае это могло затягиваться на несколько часов. Таких неудобств было много.

Данное решение мне помогло в:
1. том, что сейчас такой процесс стандартизирован, как следствие исчезла ненужная коммуникация между участниками проекта, все читают кодинг стандарт и знают теперь где какой логин, пароль, папка и прочее ( планирую прописать настройки по SVN )
2. в том, что данный скрипт могут запускать разработчики с низкими знаниями в UNIX( и настройках его), таким образом, процесс менее зависим от квалификации сотрудника
3. в том, что не нужно устанавливать полный комплекс серьёзных программных продуктов (я про ISP панели) ради запуска проектов на своем сервере разработки

/usr/apache/bin/apachectl restart

идеологически неверно :)

если апач двойка (а судя по параметру restart, именно двойка), то правильнее делать
apachectl configtest
apachectl graceful
Небольшое дополнение к вашему скрипту — строки 6 и 7 можно заменить одной, используя опцию -p (--parents):
mkdir -p /usr/www/$NAME_OF_PROJECT/htdocs/
вот именно ето я и искал!
некий аналог денвера)))
точнее реализация его наибольшего плюса
Вы меня простите, конечно, но это ппц. Автоматизация. Автоматизация разработки.

Я ожидаю в ближайшее время цикл статей в продолжение этой темы:
Параметры apachectl — Путь сетевого самурая.
избранные места man man — Познай себя.
И т. п.
Господа, вы, конечно, извините. Но такие решения — это ппц. Вот почему:
1. Врядли среди аудитории найдется компания, которая «шлепает» хотябы по 2 web-проекта в день.
2. Если найдется — сисадмины давно придумали вещи веселее текущей.
3. Отсутствие «конфигурируемости» подобного решения — явный косяк. А что, если проект на перле (в добавляемой конфигурации не увидел ничего про cgi-bin/cgi)? А что, если не нужна БД? Где интерактивность? :)

Эти операции делаются ручками за 2 минуты. Не разбираешься в конфигах — не лезь. (разобраться-то, 2 минуты).

Еслиб написали проект реализации всех этих вещей через web-интерфейс (а-ля ISP) — думаю, люди были бы более благодарны. Скрипт не поможет, если не влезть в него руками :)
Sign up to leave a comment.

Articles

Change theme settings