22 March 2012

[Arch Linux] Настраиваем связку Apache, Nginx, PHP и Percona DB

Website development
После переезда с Ubuntu на Arch появилась необходимость настроить данную связку, однако, в отличие от Ubuntu, под Arch подобного мануала всё-в-одном не нашлось. Собрав идеи с разных руководств, включая те, что были написаны под Ubuntu, и решил написать на хабр такой цельный гайд.

Сразу хочу сказать, что это базовая установка, без виртуальных хостов в количестве n-штук, просто настройка для локальной разработки.

XAMPP мне не подошёл просто по идейным соображениям.

Итак, приступим.



Предполагается, что yaourt у вас уже установлен и вы хотя бы немного умеете им пользоваться, а также настроено выполнение root-команд от своего пользователя (ставим пакет sudo, потом раскомментируем строчку "%wheel ALL=(ALL) ALL" в файле /etc/sudoers и релогинимся; при выполнении команд с sudo пароль вводим от своего пользователя, а не от root'a).

Также перед непосредственно установкой, убедитесь, что у вас подключены extra- и community-репозитории.
Для этого:

sudo nano /etc/pacman.conf

И проверяем, чтобы секции этих репозиториев выглядели аналогично.

[extra]
#SigLevel = PackageOptional
Include = /etc/pacman.d/mirrorlist
[community]
#SigLevel = PackageOptional
Include = /etc/pacman.d/mirrorlist

И синхронизируем списки пакетов.

sudo pacman -Sy



Вначале поставим Apache и PHP и, соответственно, немного поправим конфиги.


sudo pacman -S apache php-apache
yaourt mod-rpaf

Теперь нам надо отредактировать /etc/httpd/conf/httpd.conf: включить 2 модуля для апача — rpaf и php5, плюс для rpaf добавить конфигурацию и ещё по-мелочи.

sudo nano /etc/httpd/conf/httpd.conf

  1. Меняем «Listen 80» на «Listen 81», поскольку 80 порт будет слушать nginx.
  2. В секцию LoadModule добавляем 2 строчки.
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    LoadModule php5_module modules/libphp5.so
  3. Можете поменять электропочту в строке «ServerAdmin», хотя это опциональный пункт. Я обычно по привычке меняю.
  4. Чуть ниже идёт закомментированная строчка «ServerName» — раскомментируем и заменяем на «ServerName 127.0.0.1:81»
  5. Проверяем, чтобы в секции "<IfModule mime_module>" не была закомментирована строчка «TypesConfig conf/mime.types»
  6. Также расскомментируем строчку «MIMEMagicFile conf/magic»
  7. В секции "<IfModule dir_module>" заменяем приводим строчку с параметром «DirectoryIndex» к такому виду:
    DirectoryIndex index.php
  8. И наконец в конце файла дописываем.
    Include conf/extra/php5_module.conf
    RPAFenable On
    RPAFproxy_ips 127.0.0.1 10.0.0.1
    RPAFsethostname On
    RPAFheader X-Forwarded-For


Сохраняем файл (Ctrl + O) и выходим (Ctrl + X).

Теперь нам осталось второй конфигурационный файл Апача чуть-чуть изменить.

sudo nano /etc/httpd/conf/ports.conf

Меняем «Listen 80» на «Listen 81».

На этом с настройкой Apache мы закончили. Переходим к PHP.


sudo nano /etc/php/php.ini

  1. Настраиваем «post_max_size». Обычно, 60M хватает вполне, а то и много меньше — смотрите по ситуации. Аналогично настраиваем «upload_max_filesize» и «max_file_uploads».
  2. Включаем модули. Какого-то единственного решения тут не может быть, однако моего варианта под большинство нужд должно хватить (http://pastebin.com/cZwepL0T). Если какие-то дополнительные модули нужны, которых нет в списке — в первую очередь ищем в yaourt.
  3. Советую расскомментировать и настроить «date.timezone» (http://php.net/date.timezone).
  4. Раскомментируем строку «session.save_path = „/tmp“.


Сохраняем файл (Ctrl + O) и выходим (Ctrl + X).

Перезапускем apache.
sudo rc.d restart httpd

Далее для проверки создадим файл index.php. (Здесь вводим пароль не от своего пользователя, а от root'a.)

su -c "echo '<?php phpinfo(); ?>' > /srv/http/index.php"

После этого, если вы зайдёте по адресу http://localhost:81/, вы должны увидеть страничку с полной информацией о PHP и Apache. Что-то типа такого.



Переходим к установке и настройке NGINX


Установим последнюю (dev-ветка) версию. Если же хотите стабильную — то просто вместо команды ниже напишите „sudo pacman -S nginx“.

yaourt nginx-devel

И приведём вид конфига к следующему виду.

sudo nano /etc/nginx/conf/nginx.conf

Стираем всё и копируем всё отсюда — http://pastebin.com/2S8KnqkH.

И перезапускаем nginx.

sudo rc.d restart nginx

Теперь, можно заходить по 80 порту и вы тоже должны увидеть информацию о php, как это было раньше (http://localhost).

И последний этап — установка PerconaDB


Как известно, сама по себе MySQL далеко не самая шустрая БД, так что я обычно устанавливаю форк — PerconaDB. Поподробнее о фичах можете почитать на официальном сайте, от себя разве что скажу, что обратная совместимость с MySQL полная, так что неожиданных проблем не будет.

sudo pacman -S percona-server

И настроим пароль для административного пользователя PerconaDB.

mysql_secure_installation

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



p.s. если есть какие-то предложения по улучшению материала — пишем в комментариях.
p.p.s. не покидает меня ощущение, что секция „gzip_types“ в конфиге nginx'a не совсем оптимальна — так что тоже выслушаю предложения.

Забыл написать про автозагрузку служб при старте ОС


sudo nano /etc/rc.conf

И в самом низу файла в массив „DAEMONS“ дописываем:

@nginx @httpd @mysqld
Tags:archlinuxphpmysqlnginxapache
Hubs: Website development
+1
14.4k 65
Comments 23
Popular right now
Top of the last 24 hours