Что получилось: самомодифицирующийся скрипт, который генерит конфиг виртуалхоста для апача по шаблону.
Код: Выделить всё
<VirtualHost *:81>
ServerAdmin webmaster@${DOMAIN}
ServerName $PROJECT.${DOMAIN}
DocumentRoot /var/www/vhosts/$PROJECT
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/vhosts/$PROJECT >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/$PROJECT.${DOMAIN}-error.log
LogLevel warn
CustomLog /var/log/apache2/$PROJECT.${DOMAIN}-access.log combined
</VirtualHost>
Код: Выделить всё
#!/usr/bin/env python
# Author: Gen1us2k
# Adding apache default config to new virtual host
# This script self-modifying and storing all your projects located at vdir
#
from socket import gethostname
import re, os, inspect, sys, io
def main():
domain = "kg"
conf = "/path/to/vhost/template/vhost.conf"
apache_path = "/etc/apache2/sites-available/"
vdir = "/var/www/vhosts/"
projects = '[www1, www2]'
projects = projects[1:-1].split(', ')
projects.sort()
cprojects = []
nprojects = []
for project in os.listdir(vdir):
path = vdir + "/" + project
if os.path.isdir(path):
cprojects.append(project)
cprojects.sort()
srcfile = inspect.getsourcefile(sys.modules[__name__])
src = open(srcfile, 'r').read()
match = re.search ("projects = '(.*)", src)
for cproject in cprojects:
if not cproject in projects:
print "Adding apache configuration for " + cproject + " virtual host"
config = open(apache_path + cproject + domain, 'w')
for line in io.open(conf, 'r'):
line = line.replace('$PROJECT', cproject)
line = line.replace('${DOMAIN}', cproject + "." + domain)
config.write(line)
config.close()
nprojects.append(cproject)
for project in projects:
if not project in cprojects:
print "Removing apache configuration for " + project + " virtual host"
os.popen("rm /etc/apache2/sites-enabled/" + project + "." + domain)
os.popen("rm /etc/apache2/sites-available/" + project + "." + domain)
os.popen("/etc/init.d/apache2 reload").readline()
projects.remove(project)
projects.sort()
if match:
src = src[:match.start(1)] + "[" + ", ".join(projects) + ", " + ", ".join(nprojects) + "]'" + src[match.end(1):]
f = open(srcfile, 'w')
f.write(src)
f.close()
print os.popen('/etc/init.d/apache2 stop').readline()
os.popen("sudo chown -R www-data:www-data /var/www/vhosts")
if __name__=='__main__':
main()
conf = "/path/to/vhost/template/vhost.conf"
apache_path = "/etc/apache2/sites-available/"
vdir = "/var/www/
Эти переменные редактируем на свой лад, запускаем, радуемся.
ЗЫ подогнано для Debian
На гитхабе: https://github.com/gen1us2k/bash-script ... nerator.py