Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 16 дек 2012, 22:15 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2898
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 121 раз.
ОС: RHEL 6.7
Подвернулась шабашка - зацепить за сервер >50 сайтов (Debian, nginx+apache). Задачка в принципе нетривиальная, но нудная и долгая. Благо у заказчика сайты были уже залиты в папку, и лежали в папке /var/www/html в папках соответствующим доменному имени. Быстренько сообразив, что без автоматизации процесса мне не обойтись накатал по-быстрому нижеследующий скрипт:

Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса bash
#!/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!"
Обработано за 0.024 секунд, используется GeSHi 1.0.8.4


Сей скрипт быстренько пролчесывает папку, цепляет доменные имена и подставляет их в шаблон конфига. Все это он вывалил в /tmp, в подпапки аналогичные debian'овской структуре конфигов. Остается скопировать все файло в оответствующую папку в /etc и идти пить пиво)))

Далее следовало насоздавать БД и пользователя БД для каждого сайта. Проблема заключалась в следующем - домены были ужасно длинные. Брать целиком имя сайта - запросто можно было упереться в ограничение имени пользователя MySQL. Дампы БД лежали в подпапке с сайтом, но именование тоже хромало - {цифровой блок}_{имя базы}.sql. Например: 123_mydbdump.sql. Обзывать так базу тоже не кавай. Проблему решил сл. скриптом:

Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса bash
#!/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
 
Обработано за 0.011 секунд, используется GeSHi 1.0.8.4


В результате скрипт создаст файлик с sql-запросами создающими БД и пользователя к ним, и записывает все имена, пароли и имена БД в csv-файл. Имя пользователя будет состоять из 8 символов из доменного имени (или меньше, если домен короче) и 1-3 цифр, Пароли будут типа QUG47G9zqzGz.


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Перенесенная Документация по Gentoo

в форуме Linux

Gen1us2k

0

4

05 мар 2010, 18:54

Gen1us2k Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO