Установка Apache2, PHP5 и MySQL в Ubuntu 11.04

Когда-то давно я уже писал о всемогучем и всеми известном LAMP, эта статья тут. Сейчас думаю пора освежить свои знания. Давайте рассмотрим самую базовую и самую простую задачу, установить три компонента (Apache2, PHP5 и MySQL) на вашу свежую Ubuntu 11.04 и ораганизовать “быстрый” Web-сервер. Здесь стоит напомнить, что Apache2 это один из самых популярных серверов, с большими возможностями, такими как: кросплатформенность (свой первый Apache-сервер я завел под Windows), надёжность и гибкость конфигурации (httpd.conf и .htaccess), возможность подключать внешние модули для предоставления данных, механизм виртуальных хостов, интеграция с другим ПО и языками программирования и многое-многое другое. Прочиать больше вы можете конечно же в Wikipedia – Apache2. Как установить и настроить Apache2, PHP5 и MySQL в Ubuntu 11.04 (LAMP) читайте под катом.

LAMP

LAMP — это набор серверных программ. Данная реализация веб сервера является наиболее популярной в Интернете на сегодняшний день.

Компоненты LAMP:
Linux — ОС Linux;
Apache — Web-сервер;
MySQL — база данных;
PHP — язык программирования, используемый для создания веб-приложений.

Кстати есть еще одно название, очень популярное, это BAMP, где B это BSD система, т.е. Unix.

Установка LAMP в Ubuntu 11.04

Начнем с СУБД MySQL:

sudo su
apt-get install mysql-server mysql-client
sudo su
apt-get install mysql-server mysql-client

Система попросит вас ввести логин и пароль для учетной записи рута:
New password for the MySQL “root” user: < -- вашRootПарольДляMySQL Repeat password for the MySQL "root" user: <-- вашRootПарольДляMySQL

Убедитесь, что MySQL запущена:

ps -ef | grep mysql
mysql     5478     1  1 15:41 ?        00:00:00 /usr/sbin/mysqld
ps -ef | grep mysql
mysql     5478     1  1 15:41 ?        00:00:00 /usr/sbin/mysqld

Поставим Apache2:

apt-get install apache2
apt-get install apache2

Убедитесь, что Apache2 запущен:

ps -ef | grep apache2
root      5974     1  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5977  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5979  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5980  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
ps -ef | grep apache2
root      5974     1  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5977  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5979  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  5980  5974  0 15:43 ?        00:00:00 /usr/sbin/apache2 -k start

проверить работу вы можете пройдя по адресу http://localhost/

Установка PHP5:

apt-get install php5 libapache2-mod-php5
apt-get install php5 libapache2-mod-php5

Рестартуем Apache2:

/etc/init.d/apache2 restart
/etc/init.d/apache2 restart

Помним, что document root по умолчанию в Ubuntu получается вот тут /var/www/, там же лежит дефолтная HTML страничка, которую мы увидели по адресу http://localhost/.

Стандартная проверка PHP5 на работоспособность, это создания тестого php файла в document root, т.е. в /var/www/. Кстати, если вам, как и мне не нравится местрасположения дефолтной директории, ее можно будет сменить, но это чуток позже.

Создаем файл:

nano /var/www/info.php
nano /var/www/info.php

Туда пишем:

< ?php
phpinfo();
?>
< ?php
phpinfo();
?>

Любуемся результатом перейдя в браузере по адресу http://localhost/info.php

Поддержка MySQL в PHP5:

apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

И снова рестарт серверу:

/etc/init.d/apache2 restart
/etc/init.d/apache2 restart

И любуемся на результат, т.е. обновите страничку info.php и найдете теперь там раздел о поддержке MySQL.

Поздравляю, с установкой покончено, осталось только доставить один удобный елемент, это phpmyadmin, для удобной работы с базами данных:

apt-get install phpmyadmin
apt-get install phpmyadmin

По ходу установки вам зададут пару вопросов:
Web server to reconfigure automatically: < -- apache2 Configure database for phpmyadmin with dbconfig-common? <-- No

Далее смотрим на результат http://localhost/phpmyadmin
Логин это root, пароль вы задовали, когда ставили СУБД MySQL.

Если вы ничего не увидели, то сделайте символьную ссылку (я этого не делал):

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
sudo /etc/init.d/apache2 restart
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
sudo /etc/init.d/apache2 restart

Вот это PhpMyAdmin – программа управлениея базами данных, созданием, редактированием, бэкапами.

Конфигурация и настройка LAMP

1) httpd.conf
Вся конфигурация и настройка сервера Apache2 осуществляется через файл — httpd.conf httpd.conf — содержит директивы, управляющие работой сервера, работой виртуальных хостов и т.д.

Стоит отметить, что окрыв файл /etc/apache2/httpd.conf вы обнаружете, что он пуст, так и есть, настройки сервера лежат в /etc/apache2/apache2.conf, меня это не напрягает, есть люди которых это выбешивает, и они переименовывают apache2.conf в httpd.conf. Кому как нравится.

2) .htaccess
Еще один важный конфигурационный файл .htaccess — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

.htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess в том или ином каталоге указывается в httpd.conf (директива AllowOverride).

Файл используется для настроек доступа катологов, авторизации и аутентификации а так же для изменения URL-адресов.

3) .htpasswd
.htpasswd — файл, содержащий пароли для доступа к ресурсу у веб-сервера Apache. Метод авторизации с использованием такого файла носит название базового (англ. basic authentication).

День в армии подошёл к концу и мне пора домой, продолжение следует…

Структура Web-сервера

У каждого уважающего себя Web-сервера должна быть правильная структура, я имею ввиду не структуру прикладной программы Apache, а структуру папок и катологов, виртуальных хостов, расположения логов и их ротация. Я приведу простой, но в то же время самый популярный пример схематично (мой хостер использует именно такую структуру)

Здесь всё просто, существует головной каталог /home/ в нем распологаются каталоги пользователей.

Условия:

  • Каждый пользователь получает доступ к каталогу по FTP и http протоколам
  • Каждый пользователь заперт в своем домашнем каталоге и не может подняться на уровень выше в условиях FTP & http
  • У каждого пользователя есть скрытая папка admin доступ к которой он может получить только по средствам аутентификации по логину и паролю
  • У каждого пользователя есть папка logs в которой ведуться все его логи.
  • Для Apache существует отдельная папка logs где ведуться логи
  • Раз в неделю должна производится роатация логов

На заметку:
Про FTP читайте тут.
Про ротацию логов я тоже уже писал.
Про аутентификацию для Apache можно читать здесь.

В файле /etc/apache2/apache2.conf вы можете подключить модули, настроить работу файлов .htaccess, указать от какого пользователя и какой группы запускать сервер, указать каталог ServerRoot, куда будут складироваться логи и где будут находится логи сервера, все строчки файла хорошо прокоментированны (англ.) но в сети вы можете найти подробные переводы, это не новость.

Я обращу внимание на настройки видимости .htaccess, откройте файл /etc/apache2/apache2.conf:

su root
nano /etc/apache2/apache2.conf
su root
nano /etc/apache2/apache2.conf

Найдите там следующие строки и проследите, что-бы они остались раскомментированными:

....
AccessFileName .htaccess
<files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</files>
....
....
AccessFileName .htaccess
<files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</files>
....

Как результат:

Логи расположены вот тут /var/log/apache2/.
Тут все банально, лог access.log содержит в себе всю инфу о соединения которые были установленны с сервером.
Лог error.log содержит в себе всю инфу об ошибках. Я уже говорил, что вы можете поменять расположения логов в файле apache2.conf.

/etc/apache2/sites-available/default – очень важный файл, в нем происходит настройка виртуальных хостов сервера.

Но об Виртуальных Хостах в Apache мы поговорим позже, сейчас я предлагаю избрать немного другой путь. И настроить локальный сервер для обслуживания нескольких сайтов без использования VirtualHost в Apache. Метод не самый правильный, но у него есть свои плюсы.

Вы можете сделать так, в вашей RootDocument, сделать папки /wordpress , /drupal/ , /joomla , /logs , /other и установить соостветсвующие сайты в эти директории.

Теперь обратившись в браузере по адресу: http://localhost/drupal/ вы увидите ваш сайт на Drupal, а перейдя по адресу http://localhost/wordpress/ вы увидите ваш сайт на WordPress. Это удобно, вы можете иметь бесконечное колличество сайтов, и работать с ними одновременно.

Вот как это будет выглядеть (кликабельно)

Apache2

Apache2

При этом у вас будет только один виртуальный хост. Настройки просты:

nano /etc/apache2/sites-available/default
nano /etc/apache2/sites-available/default

Вот минимальное содержание:

<virtualhost *:80>
        ServerAdmin localhost
        DocumentRoot /var/www/users/ #Тут лежат все сайты
        <directory></directory>
                Options FollowSymLinks
                AllowOverride None
        
 
        #Logs #Где лежат логи
        ErrorLog /var/www/users/logs/error.log
        CustomLog /var/www/users/logs/access.log combined
 
    Alias /doc/ "/usr/share/doc/"
    <directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </directory>
</virtualhost>
<virtualhost *:80>
        ServerAdmin localhost
        DocumentRoot /var/www/users/ #Тут лежат все сайты
        <directory></directory>
                Options FollowSymLinks
                AllowOverride None
        

        #Logs #Где лежат логи
        ErrorLog /var/www/users/logs/error.log
        CustomLog /var/www/users/logs/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </directory>
</virtualhost>

После конфигурации файла, перезапустите Apache и приступайте к работе.