4Debian.Info - Портал русскогоязычного сообщества Debian Карта сайта Контакты

Меню

Репозитории Debian

Скачать Debian

Установка Debian - Видео



Авторизация:

Новые статьи

Статьи в RSS

Новые комментарии

Новые уроки

Уроки в RSS


Вернутся к списку статей

Скрипт создания виртуальных хостов Apache на Python

В этой статье я выложил готовый скрипт на Python для создания виртуальных хостов под Apache на Debian (скрипт так же можно использовать и на других операционных системах на ядре linux, предварительно сделав немного изменений в настройках).
Давайте попробуем разобраться  теперь, что необходимо сделать для создания виртуальных хостов. 
Спонсор показа статьи: обучение персонала в Москве . Пожалуйста, посетите их сайт.

1. Необходимо определится в каком каталоге будет у нас находится папка с проектом (сайтом).

2. В папке с настройками virtualhost ( /etc/apache2/sites-enabled/ ) создать файл с описанием виртуального хоста: именем, местом его расположения, так же можно указать и другие настройки, например путь к файлу с логами ошибок или запросов по виртуальному хосту.  Пример такого файла:
python:
  1. DocumentRoot /home/user/domains/mydomain.local/www
  2. ServerAlias www.mydomain.local
  3. ServerName mydomain.local
  4. ScriptAlias /cgi-bin/ /home/user/domains/mydomain.local/www/cgi-bin/
  5.  
  6. AllowOverride All
  7. Order Deny,Allow
  8. Allow from all
  9. Options All
  10.  
  11. AllowOverride None
  12. Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
  13. Order allow,deny
  14. Allow from all
  15.  
  16. DirectoryIndex index.php index.html index.cgi
  17.  
  18. #SuexecUserGroup user user
  19. ErrorLog "/home/user/domains/mydomain.local/log/error.log"
  20. CustomLog "/home/user/domains/mydomain.local/log/access.log" combined
  21. LogLevel warn
Из данного файла настроек, Вам должно было быть понятно, что они принадлежат к mydomain.local, так же существует алиас www.mydomain.local. По данному запросу запрос производится к директории /home/user/domains/mydomain.local/www , а index файлами являются файлы: index.php index.html index.cgi. Файлы соответствующих логов "/home/user/domains/mydomain.local/log/error.log"
и "/home/user/domains/mydomain.local/log/access.log", а директория для CGI скриптов расположена /home/user/domains/mydomain.local/www/cgi-bin/. Дополнительные настройки можно найти в официальной документации.

3. Теперь необходимо донести до нашего компьютера, что домен  mydomain.local ведет на наш ip адресс и в последующем обработается с помощью Apache. 
В случае если Ваш домен должен быть виден из сети, необходимо настроить DNS (это тема для отдельной статьи), если нам необходимо только самим видеть данный virtualhost, тогда необходимо указать в файле /etc/hosts к какому ip должен быть присоединен наш домен, по умолчанию можно присоединять к IP 127.0.0.1.
python:
  1. 127.0.0.1 mydomain.local www.mydomain.local
 

Скрипт создания виртуальных хостов Apache на Python
Все описанные выше действия были описаны в скрипте опубликованном ниже.

Для его использования необходимо сохранить скрипт (для удобства можно поместить его например в директорию /usr/local/sbin например с именем ad-da) и установить права на запуск скрипта chmod +x /usr/local/sbin/ad-da 
python:
  1. cd /usr/local/sbin/
  2. wget http://4debian.info/download-script/ad-da
  3. chmod +x ad-da
  4. nano ad-da

Изменить стандартные настройки на необходимые:
python:
  1. parser.add_option("-d", "--dir_site", default="/home/valualit/domains/",
  2. metavar="/home/valualit/domains/", help=u"Директория для домена.");
Заменить /home/user/domains/ на директорию в которую будут складываться папки с нашими доменами. Остальные изменения внести по необходимости.

- Скрипт запускается только с правами суперпользователя или с помощью sudo но все файлы проекта(сайта) созданные по умолчанию принимают права родительской директории (в данном примере /home/user/domains/) поэтому файлы будут легко редактироваться владельцем директории.

- Так же скрипт создает все стандартные файлы для возможности мгновенно проверить работу скрипта и Apache.

- После добавления или удаления virtualhost через скрипт Apache автоматически перезагружается.
python:
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. ###
  4. # Скрипт предназначен для легкого управления локальными доменами
  5. ###
  6.  
  7. import os, sys, re, shutil, string, pwd, grp, stat
  8. from optparse import OptionParser
  9.  
  10. # Проверяем права администратора, если нет, то выводим предупреждение
  11. # т.к. правка системных файлов не возможно без соответствующих прав доступа
  12. # и приведет к ошибкам
  13. if os.getuid()!=0:
  14. sys.exit ("33[31mСкрипт должен работать с правами администратора!33[0m");
  15.  
  16. # Название скрипта
  17. sname=os.path.basename(__file__);
  18.  
  19. def main():
  20. parser = OptionParser(usage="usage: %prog [options] [add|drop] domain",
  21. version="%prog 1.0")
  22. parser.add_option("-d", "--dir_site", default="/home/valualit/domains/",
  23. metavar="/home/valualit/domains/", help=u"Директория для домена.");
  24. parser.add_option("-a", "--apache_bin", default="/etc/init.d/apache2",
  25. metavar="/etc/init.d/apache2", help=u"Бинарник apache для рестарта.");
  26. parser.add_option("-c", "--apache_config_site",
  27. default="/etc/apache2/sites-available/", metavar="/etc/apache2/sites-available/",
  28. help=u"Директория sites-available от apache для настроек virtualhost.");
  29. parser.add_option("-t", "--host", default="/etc/hosts", metavar="/etc/hosts",
  30. help=u"Системный файл hosts для внесения информации о домене.");
  31. parser.add_option("-i", "--ip", default="127.0.0.1", metavar="127.0.0.1",
  32. help=u"IP для сайта");
  33. parser.add_option("-e", "--a2ensite", default="a2ensite", metavar="a2ensite",
  34. help=u"enable an apache2 site / virtual host");
  35.  
  36. (options, args) = parser.parse_args();
  37. if len(args)!=2 or not args[0] in {"add":1,"drop":2}:
  38. parser.error(sname+" -h");
  39. return {"options":options,"args":args};
  40.  
  41. conf=main();
  42. options=conf['options'];
  43.  
  44. # Получаем группу и пользователя права которого будут для папки
  45. # Возьмем их из папки в которую все сложим: dir_site
  46. stat_info = os.stat(options.dir_site);
  47. options.uid = stat_info.st_uid;
  48. options.gid = stat_info.st_gid;
  49. options.user = pwd.getpwuid(options.uid)[0];
  50. options.group = grp.getgrgid(options.gid)[0];
  51.  
  52. # Функция удаления строки из файла
  53. def remove_string(filename, string):
  54. rst = [];
  55. with open(filename) as fd:
  56. t = fd.read();
  57. for line in t.splitlines():
  58. if line != string:
  59. rst.append(line);
  60. with open(filename, 'w') as fd:
  61. fd.write('n'.join(rst))
  62. fd.write('n')
  63.  
  64.  
  65. def apache_site_config(name):
  66. file_name=options.apache_config_site+name;
  67. dir_site=options.dir_site+name;
  68. f = open(file_name,"w+");
  69. print >> f, '<VirtualHost *:80>nn'+
  70. 'DocumentRoot '+ dir_site +'/wwwn'+
  71. 'ServerAlias www.'+name+'n'+
  72. 'ServerName '+name+'n'+
  73. 'ScriptAlias /cgi-bin/ '+dir_site+'/www/cgi-bin/nn'+
  74. '<Directory "'+dir_site+'/www">n'+
  75. 'tAllowOverride Alln'+
  76. 'tOrder Deny,Allown'+
  77. 'tAllow from alln'+
  78. 'tOptions Alln'+
  79. '</Directory>nn'+
  80. '<Directory "'+dir_site+'/www/cgi-bin/">n'+
  81. 'tAllowOverride Nonen'+
  82. 'tOptions +ExecCGI -MultiViews +SymLinksIfOwnerMatchn'+
  83. 'tOrder allow,denyn'+
  84. 'tAllow from alln'+
  85. '</Directory>nn'+
  86. '<IfModule dir_module>n'+
  87. 'tDirectoryIndex index.php index.html index.cgin'+
  88. '</IfModule>nn'+
  89. '#SuexecUserGroup '+options.user+' '+options.group+'n'+
  90. 'ErrorLog "'+ dir_site +'/log/error.log"n'+
  91. 'CustomLog "'+ dir_site +'/log/access.log" combinedn'+
  92. 'LogLevel warnnn'+
  93. '</VirtualHost>';
  94. f.close();
  95.  
  96. # Функция добавления домена
  97. def add_domain(name):
  98. dir_site=options.dir_site+name;
  99. if os.path.exists(dir_site):
  100. sys.exit("Сайт "+name+" не может быть записан в "+dir_site);
  101. elif os.path.exists(options.apache_config_site+name):
  102. sys.exit(options.apache_config_site+name+" - Занят конфигурационный файл!");
  103. else:
  104. os.makedirs(dir_site+"/");
  105. os.makedirs(dir_site+"/www/");
  106. os.makedirs(dir_site+"/www/cgi-bin/");
  107. os.makedirs(dir_site+"/log/");
  108. f = open(dir_site+"/www/index.php","a+");
  109. f.write('<?phpnphpinfo();');
  110. f.close();
  111. f = open(dir_site+"/www/cgi-bin/index.cgi","a+");
  112. print >> f,'#!/usr/bin/env pythonn# -*- coding: utf-8 -*-nn'+
  113. 'import cgitbncgitb.enable()nn'+
  114. 'print "Content-Type: text/plain;charset=utf-8"n'+
  115. 'printnnprint "Hello World!"';
  116. f.close();
  117. os.system("chown -R "+options.user+":"+options.group+" "+dir_site);
  118. os.chmod(dir_site+"/www/cgi-bin/index.cgi", 0755);
  119. apache_site_config(name);
  120. f = open(options.host,"a+");
  121. f.write("n"+options.ip+"t"+name+"twww."+name);
  122. f.close();
  123. f = open(dir_site+"/www/.htaccess","a+");
  124. f.write("AddDefaultCharset UTF-8");
  125. f.close();
  126. os.system(options.a2ensite+" "+name);
  127. os.system(options.apache_bin+" restart");
  128. sys.exit("33[31mДомен http://"+name+" успешно создан33[0m");
  129. pass;
  130.  
  131. # Функция удаления домена
  132. def drop_domain(name):
  133. dir_site=options.dir_site+name;
  134. if os.path.exists(dir_site):
  135. shutil.rmtree(dir_site);
  136. if os.path.exists(options.apache_config_site+name):
  137. os.unlink(options.apache_config_site+name);
  138. remove_string(options.host, options.ip+"t"+name+"twww."+name);
  139. os.system(options.apache_bin+" restart");
  140. sys.exit("33[31mУпоминания о домене "+name+" удалены!33[0m");
  141. pass;
  142.  
  143. if conf["args"][0] in {"add":1,"drop":2} and
  144. re.compile('^[-w.]{3,}$').match(conf["args"][1]):
  145. if conf["args"][0]=='add':
  146. add_domain(conf["args"][1]);
  147. else:
  148. drop_domain(conf["args"][1]);
  149. else:
  150. sys.exit("33[31mКоманды "" + conf["args"][0] + "" не существует!33[0m");
И как полагается прикладываю несколько скриншотов.

4Debian - Python скрипт создания virtualhost в Apache
4Debian - Python скрипт создания virtualhost в Apache
4Debian.Info , apache, virtualhost

Комментарии: Скрипт создания виртуальных хостов Apache на Python

2014.12.01 00:15 ewewuhi Ссылка

Скрипт супер! Но у меня почему-то всё "сайты" созданные через него 403)

Только авторизованные пользователи могут оставлять комментарии!

Авторизация или Быстрая регистрация



Яндекс.Метрика
4Debian.Info
При полной или частичной перепечатке текстов статей и публикаций гиперссылка на www.4debian.info обязательна. | "4Debian.Info" | © 2017