19 Ноябрь 2010

Установка и настройка Apache, PHP, MySQL в Ubuntu. Часть 2

Установка и настройка Apache+PHP+MySQL в Ubuntu

Итак, уважаемый читатель, сегодня мы займемся непосредственно установкой и настройкой Apache + PHP + MySQL в Ubuntu.

Первую часть с теоретическими основами можно найти здесь.

Установка Apache

В Терминале необходимо выполнить команду:

sudo apt-get install apache2 libapache-mod-auth-mysql

С предназначением команды sudo мы знакомились в первой части данного руководства.

Команда apt-get install запускает менеджер пакетов в режиме установки нового ПО.

Через пробел следуют названия устанавливаемого ПО: apache2 libapache-mod-auth-mysql — самого Apache и дополнительного модуля.

Вот и все, Apache установлен. За это я и люблю Ubuntu, не надо искать и скачивать дистрибутивы, процесс приятно автоматизирован.

Устанавливаем PHP

Все, что необходимо для работы PHP можно установить одной командой:

sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql

Устанавливаем MySQL

Команда для установки:

sudo apt-get install mysql-server mysql-client

После установки MySQL потребует задать пароль пользователя root для подключения к базам данных.

Пароль root для MySQL

На этом установка всех необходимых компонентов закончена и мы переходим к настройке.

Настройка сервера

Для начала создадим каталог на жестком диске, где будут располагаться файлы сайтов. Например, пусть это будет папка /home/imya_polzovatelya/sites.

В директории sites я буду располагать поддиректории с файлами отдельных сайтов. Каждая поддиректория в sites будет представлять из себя хранилище файлов отдельного сайта.

В качестве примера настроим работу тестового сайта.

Для этого в каталоге sites я создаю каталог test, содержащий две поддиректории: logs — для хранения логов и www — для хранения файлов сайта.

Пару слов о том, что же такое логи. В ОС семейства Linux принято писать подробные и человекопонятные отчеты об ошибках. В случае возникновения непредвиденной ситуации Apache запишет в папку logs отчет из которого вы сможете понять, что именно пошло не так. Советую не забывать о полезности чтения логов.

Создание папки для нового хоста в Ubuntu

На скрине представлен внешний вид замечательного файлового менеджера ОС семейства Linux под названием Midnight Commander. Запустить его можно набрав в терминале комаду mc.

Теперь в папке www свежесозданного хранилища файлов сайта test необходимо создать текстовый файл index.php. В Midnight Commander для создания текстового файла можно воспользоваться комбинацией клавиш Shift + F4.

В файле index.php, для проверки, напишем следующие сроки:

<p>Привет, Мир!</p>

<?php echo phpinfo() ?>

Первая строка приведенного выше кода выводит на экран статический текст Привет, Мир! Вторая строка предназначена для проверки работоспособности PHP: если все в порядке функция phpinfo() выведет таблицу с информацией о версии PHP, установленной на сервере.

Настройка Apache

При работе в операционной системе на базе Linux необходимо помнить о замечательной особенности: в Linux существует и свято соблюдается понятие прав доступа и дальнейшее повествования бессмысленно без рассмотрения этой важной темы.

Права доступа

У каталогов и файлов ОС, построенной на базе Linux, существует три степени доступа для трех категорий пользователей.

Сначала познакомимся с существующими категориями пользователей.

1. Категория владелец файла или каталога. В нашем случае, при создании каталога sites, test, www, logs и файла index.php, мы действовали от имени пользователя, под которым вошли в операционную систему.

Увидеть имя пользователя, под которым вы сейчас работаете, можно в окне Терминала.

Определение имени пользователя Linux

На приведенном скриншоте имя пользователя olga.

Владельцем, созданных в сеансе активности пользователя olga каталогов и файлов, будет назначен пользователь olga.

Запустив файловый менеджер Midnight Commander в режиме суперпользователя командой sudo mc, вы получите доступ к работе со служебными файлами и каталогами. Однако, владельцем созданных файлов и каталогов в режиме суперпользователя будет назначен уже не пользователь olga, а суперпользователь root.

Работа в режиме суперпользователя идентифицируется знаком # в конце командной строки, в отличии от знака $ при работе в обычном режиме.

Пользователь с правами root-а

2. Следующая категория — группа владельца. Дело в том, что все пользователи ОС Linux распределены по группам. Рассматриваемая категория доступа относится к пользователям, входящим в туже группу, что и владелец.

3. Третья категория носит название все остальные. В данную категорию входят пользователи не попавшие в первую и вторую категории.

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

Свойства папок и файлов в Ubuntu

Но гораздо приятнее, лично для меня, воспользоваться Терминалом и посмотреть информацию о правах доступа посредством команды

ls -la put`_k_papke_ili_failu.

Права доступа в Ubuntu Linux

Выделенная на рисунке строка предоставляет полную информацию о правах доступа к папке test, которая расположена в каталоге /home/olga/sites/.

Расшифрую выделенную на скриншоте строку:

первая буква d информирует нам о том, что test — это директория;

rwxr-xr-x — обозначение степени доступа по три символа для каждой категории пользователей.

Теперь начинаем разбираться со степенями доступа.

В случае анализа прав доступа к директории первые три символа приведенной буквеннодефисной последовательности (rwx) характеризуют степень доступа категории владелец и означают следующее: категория владелец имеет право просматривать содержимое директории test (символ r), создавать новые файлы и подкаталоги в данной директории (w), переходить в директорию test (x).

В случае анализа прав доступа для файла: r — чтение файла, w — запись в файл, x — запуск файла.

Следующие три символа r-x характеризуют права одногруппников владельца на данную директорию. Символы r-x означают, что читать и переходить в данный каталог одногруппники владельца могут, но писать туда им запрещено, т. к. вместо w стоит прочерк.

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

Теперь внимание! С данными файлами будет работать программа Apache. Возникает законный вопрос — от имени какого пользователя работает Apache и какие права нужно установить на файлы и директории сайта, чтобы было безопасно и все работало.

Ответ на этот вопрос можно найти в файле конфигурации Apache: /etc/apache2/apache2.conf. Параметры User и Group задают пользователя и группу, от имени которых будет действовать Apache.

Пользователь, от имени которого запускается Apache в Ubuntu

Значение переменных ${APACHE_RUN_USER} и ${APACHE_RUN_GROUP} указаны в файле /etc/apache2/envvars:

Пользователь, от имени которого запускается Apache в Ubuntu

Из скриншота видно, что Apache будет работать от имени пользователя www-data, состоящего в группе www-data.

Для нашего сайта test, владельцем папок и фалов которого является пользователь olga, www-data будет относится к третей категории пользователей, а именно все остальные.

Но позвольте, ведь частенько возникает необходимость давать полный доступ (rwx) пользователю, от имени которого работает Apache, к файлам и папкам сайта. А значит нам потребуется выдать полный доступ третей категории пользователей (всем подряд), чего делать совершенно не хочется из соображений безопасности.

Поэтому я предлагаю пойти другим путем. Добавим пользователя www-data к группе владельца файлов и папок сайта.

Для начала проверим, какая группа у владельца сайта. Воспользуемся командой ls -la:

Определение группы пользователя Linux

Как видно из скриншота, группа владельца каталога с файлами сайта носит название olga.

Остается добавить пользователя www-data в группу olga. Сделать это можно командой:

sudo usermod -a -G olga www-data

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

groups www-data

Добавление в группу пользователя Linux

Теперь необходимо задать права для каталогов и файлов нашего сайта исходя из следующих соображений:

Владелец должен иметь возможность полного доступа к файлам и каталогам сайта (rwx). Действительно, мне же нужно создавать новые файлы сайта и редактировать существующие без всяких на то ограничений. Напомню, в ОС я работаю от имени пользователя olga.

Одногруппники, одним из которых является пользователь www-data, от чьего имени работает Apache, должны иметь возможность просматривать содержимое каталогов и файлов, а также запускать файлы (r-x). Однако, нужно иметь ввиду, что для некоторых папок сайта (например, тех куда Apache записывает новые файлы) требуются полные права (rwx).

Категории пользователей все остальные можно вообще не давать никаких прав (---).

Реализуем задуманное следующими командами:

sudo chmod -R 750 /home/olga/sites/

Данная команда дает полный доступ (rwx) для владельца директории sites (7), доступ на чтение и запуск (r-x) одногруппникам владельца (5) и запрещает доступ всем остальным (0 в конце).

Ключ -R говорит о том, что выполнить операцию смены прав доступа нужно рекурсивно, т. е. для всех файлов и подкаталогов внутри директории sites и для нее самой.

С правами доступа почти все :)

Займемся непосредственно настройкой Apache.

В Ubuntu существует некая особенность в настройке нового сайта. Конфигурационный файл для каждого из сайтов, запускаемых с нашего компьютера, должен быть свой. Хранятся они в папке /etc/apache2/sites-available.

Файл конфигурации хоста Apache

Я предлагаю создать файл шаблонной конфигурации, на основе которого будут создаваться конфиги всех остальных сайтов (файл template на скриншоте выше).

Содержимое файла template описывает правила работы Apache с одним конкретным сайтов (в случае примера это сайт test):

<VirtualHost *:80>
ServerName test
# ServerAlias example.com
ServerAdmin webmaster@example.com

DocumentRoot /home/olga/sites/test/www
<Directory /home/olga/sites/test/www>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ErrorLog /home//olga/sites/test/logs/error.log

LogLevel warn

ServerSignature On

</VirtualHost>

В первой строке указывается доменное имя, по которому данный сайт будет доступен.

Вторая строка — это синоним доменного имени, по которому осуществляется доступ к этому же сайту. В моем случае она закомментирована символом # и в настройках не участвует.

Ниже указывается адрес эл. почты администратора.

Далее мы переходим к настройкам правил работы Apache с файлами сайта, расположенными в каталоге /home/olga/sites/test/www

Строка с директивами Options -Indexes FollowSymLinks MultiViews задает опции работы Apache с указанной директорией:

-Indexes — запрещает показ в бразуере содержимого каталогов в случае отсутствия запрашиваемого файла.

FollowSymLinks MultiViews — разрешения следовать по символическим ссылкам и разрешает поддержку многих языков (пусть будет, хуже не станет).

AllowOverride All разрешает использовать файлы дополнительной конфигурации .htaccess.

Следующий далее набор директив разрешает доступ к файлам сайта.

ErrorLog /home/olga/sites/test/logs/error.log — задает путь к файлу логов ошибок.

Более подробную информацию по директивам Apache можно получить здесь (англ.).

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

Для выполнения описанного действия удобно использовать Midnight Commander, запустив его в режиме суперпользователя, т. к. мы будем заниматься редактированием служебных файлов (команда sudo mc).

Копирование содержимого одного файла в другой осуществляется комбинацией клавиш Shif+F5.

Копирование файла в Linux

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

a2ensite test

Данная команда создаст ссылку на файл конфигурации

Кстати, отключить надоевший хост можно командой:

a2dissite test

Теперь нам осталось выполнить всего два действия:

Перезапустить Apache командой /etc/init.d/apache2 restart и добавить название нашего свежеиспеченного хоста в файл /etc/hosts и перенаправление на IP-адрес 127.0.0.1 (об этом мы подробно говорили в первой части руководства).

После перезапуска Apache в каталоге /home/olga/sites/test/logs/ создастся файл лога ошибок error.log. Владельцем данного файла будет являться суперпользователь root. Поэтому, чтобы у нас была возможность просматривать его содержимое нужно расширить права доступа третей категории пользователей разрешив им чтение данного файла (r—), ведь я работаю от имени пользователя olga и файлы пользователя root без соответствующего разрешения прочесть не смогу:

sudo chmod -R 774 /home/olga/sites/test/logs/error.log

774 – означает:

  • root может читать, писать и запускать;
  • одногруппники могут читать, писать и запускать;
  • все остальные – только читать.

Вот и все, теперь можно запускать браузер, вводить URL http://test и наблюдать содержимое файла index.php, обработанного Apache.

P.S.: для работы большинства современных сайтов требуется модуль mod_rewrite. По умолчанию он не подключен. Подключить его можно командой:

a2enmod rewrite

По аналогии можно подключить и другие недостающие модули.

С уважением, Андрей Морковин.

У поста есть спонсор (как им стать):

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

MAXCACHE: 0.92MB/0.00032 sec