Быстрая установка Drupal-сайтов через drush

скрипты
hrizolyt ср, 01/23/2013 - 23:06

Занимаясь разработкой сайтов и web-сервисов мы сталкиваемся с необходимостью многократных инсталяций сайтовых движков как на локальные машины, так и на удаленные сервера.

Потребность в данном действе у всех возникает по разным причинам: кто-то нуждается во многих копиях для проведения тестов, у кого очень много одновременных заказов на клиентские сайты, кто-то просто любит пощупать все новое.

Не суть важно "зачем", в этом посте отвечу на вопрос "Как сделать это быстро". Говорить, естественно, будем о Drupal (хотя лично я пользуюсь его оптимизированной версией по имени Pressflow).

Насколько мне известно, Drupal фактически единственная система, с которой идет столь мощная утилита управления сайтом из коммандной строки, как drush.

Главный плюс такого подхода к администрированию и управлению сайтами - это возможность групповых операций и автоматизации процесса. Вот ей-то самой автоматизацией на новогодних праздниках я и решил заняться, когда закончились мандарины.

Сразу оговорюсь, что ниже приведенный скрипт актуален только для Unix-подобных систем (читаем де-факто Linux). Со всякими виндавсами и денверами я извращаться не привык.

Итак даем вводную: у нас имеется *nix-сервер с установленными и настроенными Apache и MySQL серверами, drush и wget, а также root-доступ (да-да, не надо кидать в меня помидорами, скрипт работает из под рута, так как мой скрипт делался для локальной домашней машины, если кто его доработает с запуском от имени пользователя, будем рады).

Работать будет и на виртуальном хостинге, но он должен иметь доступ по SSH и поддерживать установку drush. Найти такой хостинг можно, например через этот рейтинг https://hostinghub.ru

Далее, что будем иметь на выходе: полностью сконфигурированный виртуальный хост, созданную базу данных, и отдельного пользователя на нее, установленный самый свежий друпал, закачанные и установленные модули, полную руссификацию, правильно выставленные права на все каталоги, закачанные и установленные необходимые библиотеки.

Что нужно делать и что менять. Тут все просто:

  1. Вводим имя сайта (оно же будет именем каталога и виртуального хоста)
  2. Вводим имя пользователя (оно будет именем базы и пользователем базы)
  3. Вводим пароль (будет паролем на базу и паролем админа сайта)
  4. Ввводим пароль рута сервера (так надо, если доработаете, поделитесь)

Само собой все эти параметры можно поменять или добавить индивидуальные. Кроме того, в скрипте присутствует список модулей, который вы, естественно можете поменять на свой. Пути в скрипте свормированы для Ubuntu 12.10, для других дистрибутивов их нужно скорректировать будет. Ну а ниже собственно сам скрипт:


#!/bin/sh

# vars
echo "Введите имя сайта:"
read sitepatch # = '/var/www/'
echo "Введите имя пользователя:"
read user # = 'user'
echo "Введите пароль для сайта:"
read password # = 'qwerty'
echo "Введите пароль root:"
read PSWD_SQL # root pass

# install mysql db
# Создаем базу данных имя которой мы ввели
mysql -uroot -p${PSWD_SQL} --execute="create database ${user};"
echo "База данных создана"
# Создаем нового пользователя
mysql -uroot -p${PSWD_SQL} --execute="GRANT ALL PRIVILEGES ON ${user}.* TO ${user}@localhost IDENTIFIED by '${password}' WITH GRANT OPTION;"
echo "Пользователь базы данных создан"

# create sitedir
mkdir /var/www/$sitepatch
chown -R www-data:www-data /var/www/$sitepatch/
chmod -R 777 /var/www/$sitepatch/
echo "Каталог сайта создан"

# apache conf
add_to_apache_conf="
ServerAdmin webmaster@localhost

DocumentRoot /var/www/$sitepatch

Options FollowSymLinks
AllowOverride All


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

ErrorLog /var/www/$sitepatch/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/www/$sitepatch/access.log combined

"

add_to_hosts_conf="127.0.0.1 ${sitepatch}"
echo "$add_to_hosts_conf" >> /etc/hosts
touch /etc/apache2/sites-available/${sitepatch}
echo "$add_to_apache_conf" >> /etc/apache2/sites-available/${sitepatch}
ln -s /etc/apache2/sites-available/${sitepatch} /etc/apache2/sites-enabled/${sitepatch}
echo "Кофигурация apache создана"
/etc/init.d/apache2 reload
echo "Сервер перезагружен"

# install site
cd /var/www/$sitepatch
drush dl
mv drupal*/* . && mv drupal*/.htaccess .
rm -r drupal*
mkdir /var/www/$sitepatch/sites/all/libraries
chmod -R 777 /var/www/$sitepatch/
drush --root=/var/www/$sitepatch -y site-install standard --db-url=mysql://$user:$password@localhost/$user –account-name=$user --account-pass=$password
chown -R www-data:www-data /var/www/$sitepatch/
chmod -R 755 /var/www/$sitepatch/
chmod 755 /var/www/$sitepatch/sites/default/
chmod 755 /var/www/$sitepatch/sites/default/settings.php
chmod 777 -R /var/www/$sitepatch/sites/default/files/

echo "Сайт создан"

# install modules
modules='ctools drush_language l10n_update image_resize_filter imce colorbox ckeditor metatag pathauto token transliteration views xmlsitemap yandex_metrics zen admin_menu admin_menu_toolbar '
drush --root=/var/www/$sitepatch -y dl ${modules}
echo "Модули загружены"

# enable modules

drush --root=/var/www/$sitepatch -y en ${modules}
echo "Модули установлены"
drush -y dis toolbar

# russian
drush language-add ru
drush language-enable ru
drush language-default ru
drush l10n-update-refresh
drush l10n-update

# libraries
wget jacklmoore.com/colorbox/colorbox.zip
wget download.cksource.com/CKEditor/CKEditor/CKEditor%204.0.1/ckeditor_4.0.1_standard.tar.gz
unzip colorbox.zip -d /var/www/$sitepatch/sites/all/libraries
tar xvfz ckeditor_4.0.1_standard.tar.gz -C /var/www/$sitepatch/sites/all/libraries
chmod -R 755 /var/www/$sitepatch/sites/all/libraries/
rm /var/www/$sitepatch/colorbox*
rm /var/www/$sitepatch/ckeditor*

# last config
chmod 777 -R /var/www/$sitepatch/sites/default/files
drush -y cc

Вот такая вот новогодняя оптимизация труда была :)

С удовольствием приму критику и оптимизацию кода.

 

Комментарии

Всё супер-классно, только вот стоит разделить манипуляции с апачей и друпалом у меня вот nginx и пришлось перелопачивать этот скрипт )) и еще надо добавить нечто подобное: drush si minimal --account-name=admin --account-pass=123456 --db-su=root \ --db-su-pw=654321 --db-url=mysql://username:'password'@'localhost'/database --site-name='My new site on Drupal 7'