Drupal в Ubuntu на localhost

25.07.2012

О том, как установить связку LAMP (Linux-Apache-MySQL-PHP) не на сервер, а к себе на рабочую станцию, написано множество статей. Потребность в локальном сервере для веб-разработчика неоспорима. Действительно, гораздо разумнее создавать и редактировать сайт на своём компьютере, а затем, когда он будет доведён до совершенства, выкладывать его на хостинг на всеобщее обозрение. Статей, как и мнений, много, однако мне всегда хотелось настроить такой локальный сервер правильно.

Что значит "правильно"? Как мне известно, один из принципов Unix way гласит, что одно и то же сложное действие может быть совершено множеством способов и каждый волен выбрать для себя подходящий. Так вот, я хочу создать оптимальную конфигурацию, которая давала бы максимальные преимущества и как "сайт на сервере", и как "домашняя папка".

Во загнул. Попробую объяснить, что я имею в виду и откуда вообще ноги растут. Когда люди делают сайты на компьютере под управлением одной из операционных систем фирмы Microsoft, у них есть такой замечательный инструмент, как Denwer (джентельменский набор веб-разработчика), ну или WAMP (по аналогии с LAMP). Хотя дело даже, по большому счёту, не в них (можно и полноценные серверные версии apache и mysql в windows установить), а в том, что веб-разработчик на своей рабочей станции, как правило, является администратором. И, как администратор, имеет полный доступ ко всей файловой системе. С администраторскими правами, соответственно, запускаются и серверы, будь они полноценные или локализированные. Поэтому проблем с разграничением доступа к файлам нет никаких.

Идеология Linux/Unix категорически не рекомендует работать на рабочей станции под администраторской учётной записью root. И это вполне разумно, поскольку root в unix - это НАСТОЯЩИЙ администратор, он может делать в системе ЧТО УГОДНО, вплоть до того, что может полностью стереть ВСЁ содержимое жесткого диска. Поэтому под root-ом в системе работают исключительно в случаях, необходимых для администрирования системы - установка системного ПО, обновление... Все остальные действия осуществляются под соответствующим пользователем. В Ubuntu пошли даже дальше - пользователь root в системе есть, но он скрыт, напрямую зайти под ним в систему нельзя. Администраторские действия осуществляются при помощи команды sudo, дающей права root-а непосредственно выполняющейся программе.

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

Все эти вещи я рассказываю для того, чтобы объяснить нетривиальность задачи УДОБНОГО функционирования локального веб-сервера для обычного пользователя, у которого полные права обычно ограничены своей домашней папкой. И каждый сервер запускается под своим собственным пользователем. Http-сервер Apache запускается под пользователем www-data, его "домашней" папкой является /var/www. Сервер баз данных MySQL запускается от имени пользователя mysql, хотя в нашем случае это не критично - не будем же мы  файлы базы данных вручную редактировать. Для этого phpMyAdmin имеется. А вот в файлах сайта хочется копаться напрямую, без бесконечных сообщений о недостаточности прав доступа.

Самый простой способ обеспечить удобное функционирование - дать права на полный доступ "всем остальным" в папку /var/www. Но... Вряд ли можно назвать такой способ правильным в том смысле о котором я писал выше. Нельзя привыкать делать так, как удобнее и проще, но в потенциале может привести к небрежному отношению к безопасности системы. Оставим такую дырку на живом сервере, а потом будем удивляться, как это хакеры доступ к сайту получили.

Итак, мотивы свои я объяснил. Стало быть, к делу. Прежде всего установим необходимое программное обеспечение для наших серверов. Для этого нужно действовать от имени root, коим, как я писал выше, зайти напрямую в Ubuntu 12.04 нельзя. Однако есть хитрость, позволяющая это ограничение обойти. Вход в консоль root осуществляется командой su, но просто зайти, набрав пароль суперпользователя, не получится. Получим "Сбой при проверке подлинности".

Но вот такая команда

sudo su

вполне сработает! Сменившийся на root пользователь в приглашении говорит нам о том, что мы находимся в консоли root-a.

Устанавливаем серверы apache c модулем php и MySQL. Можно было бы и не заходить под root-ом, запустив эту команду через sudo, но тогда нам на каждом шаге придётся всё делать через неё и вводить пароль. А так это мы сделаем один раз, потом закроем сеанс и "придём в себя", то есть будем продолжать работу под собственным пользователем.

apt-get install php5-mysql apache2 mysql-server php5 libapache2-mod-php5 php5-gd

При установке MySQL будет запрошен пароль пользователя-администратора этого сервера, его нужно будет задать. Установим сразу и phpMyAdmin.

apt-get install phpmyadmin

Эта установка спрашивает пароль администратора MySQL, только что придуманный, и просит задать пароль администратора phpmyadmin.

chown -R kwoqer:www-data /var/www

Команда chown меняет информацию о собственнике файла и его группе. Ключ -R означает рекурсивное изменение для всех каталогов и файлов, находящихся внутри, если задаётся каталог. В данном случае там пусто, есть лишь один файл index.html, созданный для проверки функционирования apache, но тем не менее... Команда назначает хозяином /var/www моего пользователя, а группу - www-data, чтобы единственными, кто мог манипулировать там файлами, были я и http-сервер Apache.

cd /var/www
wget http://ftp.drupal.org/files/projects/drupal-7.14.tar.gz
tar xvf drupal-7.14.tar.gz
mv drupal-7.14/ sandbox
rm drupal-7.14.tar.gz

Эта группа команд осуществляет копирование с сервера drupal.org свежей версии drupal, распаковывании её внутрь, переименовании каталога с названием версии в собственное - sandbox (песочница) и удалении ставшим ненужным скачанного архива.  Когда впоследствии номер версии изменится, нужно будет, само собой, подставить нужный.

chown -R kwoqer:www-data /var/www/sandbox
chmod -R g+w /var/www

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

cd /etc/apache2/sites-available
sed 's/www/www\/sandbox/g' default > sandbox

Эта "страшная непонятная команда" делает буквально следующее. Заходим в каталог /etc/apache2/sites-available, и берём файл-конфигурацию для сайта по умолчанию default и сохраняем её под именем sandbox, поменяв внутри стандартный путь /www на /www/sandbox.

a2ensite sandbox
a2dissite default
service apache2 restart

Подключаем сайт sandbox, отключаем сайт по умолчанию default, и перезагружаем apache.

ln -s /var/www /home/kwoqer/www

Для удобства создаём ссылку на каталог /var/www в своём домашнем каталоге.

Теперь попасть на наш локальный сайт можно по адресу http://localhost, по адресу
http://localhost/phpmyadmin расположен phpMyAdmin.

Ход инсталляции drupal на локальном сервере ничем не отличается от описанной в разделе "Внутренний мир"  установки. Точно так же создаётся база данных с пользователем через phpMyAdmin и запускается инсталляционный скрипт через http://localhost. В итоге по этому адресу у нас будет свой сайт-песочница, на котором можно проводить разные эксперименты и исследовать новые модули. И писать свои!
 

P.S. Продолжение тут



Добавить комментарий