Генератор конфигов apache+nginx и баз mysql
Добавлено: 16 дек 2012, 22:15
Код: Выделить всё
#!/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