Код: Выделить всё
#!/bin/bash                                                          
if [ ! -e /tmp/sites-available ]; then
    mkdir -p /tmp/sites-available     
fi                                    
if [ ! -e /tmp/sites-enabled ]; then  
    mkdir -p /tmp/sites-enabled       
fi                                    
if [ ! -e /tmp/nginx/vhosts.d ]; then 
    mkdir -p /tmp/nginx/vhosts.d      
fi                                    
for domain in `ls /var/www/html`; do
cat << EOF > /tmp/sites-available/${domain}.conf
<VirtualHost *:8080>                            
ServerAdmin hostmaster@${domain}                
ServerName ${domain}                            
ServerAlias http://www.${domain}                       
DocumentRoot /var/www/html/${domain}/htdocs/   
<IfModule itk.c>
    AssignUserID ftpuser ftpuser
    # MaxClientsVHost 10        
    NiceValue -4                
</IfModule>                     
<Directory /var/www/html/${domain}/htdocs/>
    Options Indexes FollowSymLinks MultiViews MultiViews
    AllowOverride All
    Order allow,deny
    Allow from All
</Directory>
</VirtualHost>
EOF
cat << EOF > /tmp/nginx/vhosts.d/${domain}.conf
server {
          listen 80;
          server_name ${domain} http://www.${domain};
          error_log       /var/log/nginx/${domain}.error.log;
          access_log /var/log/nginx/${domain}.access.log;
          charset utf8;
          client_max_body_size 2g;
          location ~* ^.+\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)\$ {
                    root /var/www/html/${domain}/htdocs;
                    error_page 404 = @fallback;
                    error_page 405 = @fallback;
                    try_files \$uri \$uri/@fallback;
          }
          location / {
                    expires   0;
                    proxy_pass http://127.0.0.1:8080;
                    proxy_redirect off;
                    proxy_set_header Host \$host;
                    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto \$scheme;
                    proxy_set_header X-Real-IP \$remote_addr;
          }
          location @fallback {
                    proxy_pass http://127.0.0.1:8080;
                    expires   0;
                    add_header X-Cache "Warning - static files goes from backend!";
                    proxy_set_header Host \$host;
                    proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto \$scheme;
                    proxy_set_header X-Real-IP \$remote_addr;
          }
          location ~ /\.ht {
                    deny all;
          }
        }
EOF
cd /tmp/sites-enabled
ln -sf ../sites-available/${domain}.conf 001-${domain}.conf
done
echo "Generating done!"Далее следовало насоздавать БД и пользователя БД для каждого сайта. Проблема заключалась в следующем - домены были ужасно длинные. Брать целиком имя сайта - запросто можно было упереться в ограничение имени пользователя MySQL. Дампы БД лежали в подпапке с сайтом, но именование тоже хромало - {цифровой блок}_{имя базы}.sql. Например: 123_mydbdump.sql. Обзывать так базу тоже не кавай. Проблему решил сл. скриптом:
Код: Выделить всё
#!/bin/bash
echo "Username,Password,Database," > dbuserlist.csv
for domain in `ls /var/www/html`; do
db=`ls /var/www/html/${domain} | grep sql | cut -d_ -f 2 | cut -d. -f1` # отсекаем все лишнее из имени БД
password="`pwgen -s 12 1`" # Генерируем секурный пароль (требуется программка pwgen)
user="`echo ${domain} | cut -d. -f1 | sed -e s/-//g | cut -c1-8`" # берем из доменного имени первый блок, удаляем из него дефисы, и ограничиваем все это 8-ю символами
rnd=`shuf -i 0-100 -n 1` # Генерируем случайное число
echo "CREATE DATABASE \`${db}\`;" >> /tmp/create.sql
echo "GRANT all privileges ON ${db}.* TO ${user}${rnd}@localhost IDENTIFIED BY '${password}';" >> /tmp/create.sql
echo "${user}${rnd},${password},${db}," >> dbuserlist.csv
done

