Подготавливаем локальный веб-сервер для разработки на Ubuntu 12.x.
В данной записи я расскажу как поставить веб-сервер на абсолютно чистую Ubuntu.
I. Устанавливаем веб-сервер
Для начала нам нужно установить Apache, PHP, MySQL, phpMyAdmin. Открываем терминал (CTRL+ALT+T) и пишем:
sudo apt-get install apache2 php5 phpmyadmin mysql-server
После небольшого ожидания, выйдет вопрос: «Продолжать установку или нет?», а также количество необходимого места на жестком диске. Если Вы еще не передумали, пишем либо «Д», либо «Y» и жмем Enter. После того как все будет загружено и установлено, откроется настройка MySQL в котором предложат установить пароль. Если сервер будет для локального использования, то просто ставьте root и в логине и пароле. Такое точно не забыть. После ввода пароля, нам предложат настроить phpMyAdmin, а именно, предложат выбрать тип веб-сервера для автоматической настройки. Нас интересует «apache». Если он выделен красной точкой, то просто жмем Enter и идем дальше. Далее пойдут вопросы на разрешение автоматической настройки. Если не хотите настраивать руками, и нет в этом острой необходимости, то просто жмем «ДА». И последней настройкой будет пароль для phpMyAdmin. Вводим, жмем Enter. Всё, на этом веб-сервер установлен. Далее надо проделать некоторые настройки для корректной работы.
II. Настраиваем веб-сервер
Первое что мы сделаем — это укажем что наш сервер будет доступен по адресу http://localhost/. Для этого открываем терминал и вводим следующую команду:
sudo gedit /etc/apache2/httpd.conf
У нас откроется текстовый редактор, в котором ничего не будет, поэтому пишем в
него: ServerName localhost
.
Далее сохраняем и закрываем редактор. Теперь делаем ярлык на phpMyAdmin, чтобы он был доступен по адресу http://localhost/phpMyAdmin/. Для этого в терминале пишем:
sudo ln -s /usr/share/phpmyadmin/ /var/www/phpmyadmin
После чего, нам необходимо включить modRewrite, чтобы в Drupal работали «чистые ссылки» (ЧПУ). В терминале пишем:
sudo a2enmod rewrite
Завершающим этапом будет рестарт apache командой в терминале:
sudo /etc/init.d/apache2 restart
На этом все. Ваш веб-сервер доступен по адресу http://localhost/, зайдя по данному адресу вы должны увидеть сообщение «It works!», а зайдя по адресу http://localhost/phpMyAdmin увидеть интерфейс phpMyAdmin. В принципе, с ним уже можно работать. Все файлы лежат в /var/www/. Там уже должен быть файл index.html (It works!) и ссылка на phpMyAdmin.
III. Создание адресов для сайтов (алиасов)
Этот шаг поможем вам создавать алиасы по которым будут доступны ваши сайты у вас на компьютере. Для начала создадим папку для будущих алиасов. В терминале пишем:
sudo mkdir /var/www/public_html
Далее создаем макрос, через который будем в пару нетрудных телодвижений создавать алиасы для сайтов. Для этого нам понадобится создать файл с расширением .sh, а в свойствах сделать файл выполняемым. После этого в него вставляем данный код:
#!/bin/bash
echo -n "Введите имя создаваемого хоста: "
read newHost
newPath="/var/www/public_html/$newHost"
mkdir $newPath
# Производим запись в hosts.
file="/etc/hosts"
b=$(cat $file)
newContent="127.0.0.1 ${newHost}"$'\n'"127.0.0.1 www.${newHost}"$'\n'$b
sudo bash -c "echo '${newContent}' > $file"
# Добавляем сайт в sites-available и прописываем в него нужные директивы.
sap=/etc/apache2/sites-available/$newHost
sudo touch $sap
sudo chmod 777 $sap
directives="<virtualhost>
ServerName ${newHost}
ServerAlias ${newHost} www.${newHost}
DocumentRoot ${newPath}
<directory></directory>
AllowOverride All
</virtualhost>"
echo "$directives">$sap
# Включаем виртуальный хост.
sudo a2ensite $newHost
# Перезапускаем сервер.
sudo /etc/init.d/apache2 restart
Запускаем скрипт как приложение через терминал, вводим адрес, например drupal.dev (без HTTP и WWW). Теперь зайдя на http://drupal.dev/ (или http://www.drupal.dev/) вы увидите то что хранится в папке по адресу /var/www/public_html/drupal.dev. К примеру можно кинуть туда файл index.html. P.s. Можно, и нужно (в случае работы с Drupal) установить curl. В терминале пишем:
sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart
На данную конфигурацию, Drupal устанавливается и работает успешно. Единственное на что стоит обращать внимание, это на скрытые файлы (.htaccess) и права доступа.
Для Drupal 7
Для того чтобы можно было загружать файлы на сайт нужно прописать:
sudo chown www-data:www-data -R /var/www/drupal/sites
Где адрес - адрес до папки sites конкретного сайта. Это значит что для каждого сайта это необходимо проделывать отдельно.
Комментарии
Спасибо за совет.
Ещё один момент: чтобы при включённом vhost_alias работал модуль mod_rewrite, в .htaccess сайта, лежащего в каталоге виртуального хоста, нужно раскомментировать (для Drupal) или вписать строку RewriteBase /
Не знаю, в тему будет или нет, но все же подчеркну один момент, который часто возникает на форумах Ubuntu.
Вопрос выглядит примерно так обычно: "Святые хомячки, установил все как в гайде, но папок и файлов не видит, а если видит, то не устанавливается..." и в таком же духу...
Ответ примерно одинаков: "Не всегда, но в большинстве случаев топорной установки сервера на Ubuntu, автоматом права на папки и файлы ставятся без учета возможности записи. Берем любой ftp клиент (это проще всего) и на директории пеняем права, чтобы запись была доступна, к примеру 777. Но это если выделаете у себя на компе, если выходите в глобальную сеть с провами осторожней быть надо. А то откроете то, что не стоит открывать и все, дыра с размером Техас".
Добрый день.
Советую включить модуль для Apache vhost_alias. Он нужен для динамического добавления виртуальных хостов без перезапуска Apache. Это гораздо удобнее, чем каждый раз прописывать настройки для каждого хоста отдельно.
Пример конфигурационного файла /etc/apache2/mods-enabled/vhost_alias.conf:
<IfModule vhost_alias_module>
# UseCanonicalName: Определяет как Apache строит внутренние URL-ссылки и
# значения переменных SERVER_NAME и SERVER_PORT. Когда задано "Off", Apache
# использует имя и порт, данные клиентом. Если же задано "On", то Apache
# использует значение директивы ServerName.
UseCanonicalName Off
# Создаем лог-файл доступа в котором будет не только ip-адрес,
# но и хост, к которому пытались обратится
#<IfModule log_config_module>
# LogFormat "%V %h %l %u %t "%r" %s %b" vcommon
# CustomLog logs/access_log.log vcommon
#</IfModule>
# Разрешим доступ к содержимому виртуальных хостов
# если этого е сделать, то получим access forbidden
# поскольку по умолчанию работает правило
# order deny,allow
# deny from all
<Directory /var/www/*>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
VirtualDocumentRoot /var/www/%0
#VirtualScriptAlias /var/www/%2+
</IfModule>