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

    После переезда с 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
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 23
    • +4
      О, ну конечно в Арче все кардинально по-другому, и опции в апаче другие небось совсем? :)
      Кроме имен пакетов и некоторых путей, разве что. Так ведь и всю статью можно заменить на
      Стираем всё и копируем всё отсюда — wiki.archlinux.org/index.php/...


      Честно — не понял смысла статьи.

      И да, sudo ведь изменит права для echo, но перенаправление-то не сработает, м?
      • –1
        Ссылка у вас на вики арча какая-то нерабочая. Однако, подозреваю, что там руководство по настройке LAMP. У меня же не совсем.

        Не совсем понял о каком перенаправлении речь. Можно пояснить?
        • +1
          "..." в конце ссылки предполагало вставку названия нужного продукта: MySQL, Apache, PHP, Nginx. Да, можно и статью на руководство по настройке LAMP.

          Об этом перенаправлении вывода, у вас оно вроде одно в статье:
          sudo echo "<?php phpinfo(); ?>" > /srv/http/index.php

          Не сработает же.
          • –1
            Серьёзно не сработает? Просто я перед тем, как писать, проверял. Как пример.

            image
            • 0
              Отлично, потому что на папке Documents вам, очевидно, разрешена запись, в отличии от /srv/http.
              А теперь попробуйте, пожалуйста, выполнить ту команду, что вы привели.
              • +1
                Потому, что у твоего юзера есть право записи в Documents, а в /srv/http может не оказаться.
                И не важно используешь судо или нет, в месте назначения — только права твоего юзера.
                Правильным в данном случае будет так:
                echo "<?php phpinfo(); ?>" | sudo tee /srv/http/index.php > /dev/null
                • 0
                  Уже изменил. Не на ваш вариант, правда, но тоже на работающий.
              • 0
                А, всё. мне объяснили. Сейчас поправлю в топике команду. Спасибо.
          • +1
            «sudo nano» звучит как-то однобоко что ли (так и хочется похоливарить по поводу vi).
            Я бы заменил на «редактируем файл..»
            • –2
              Знающие люди сами поймут, что туда вставлять, незнающим nano лучше всего.
            • +1
              Если уж Arch и nginx — то зачем Apache?
              • 0
                В первую очередь, как бы глупо или банально это не звучало, из-за .htaccess.
              • 0
                Есть же конверторы правил .htaccess -> nginx.
                • +1
                  А можно ссылку хоть на один корректно-работающий?
                  • 0
                    Добрый день. Совсем забыл про ваш комментарий, извиняюсь.
                    Меня в свое время очень выручил этот:
                    www.anilcetin.com/convert-apache-htaccess-to-nginx/
                    • 0
                      Спасибо, посмотрю что к чему. И ещё — php умеет через unix-сокет работать?
                      • 0
                        php-fpm точно через например /tmp/php-fpm.sock
                        • 0
                          Спасибо. Не без бубна, но удалось избавиться от апача.
                • 0
                  Меняем «Listen 80» на «Listen 81», поскольку 80 порт будет слушать nginx.

                  пусть апач на 80 порту висит и слушает 127.0.0.1 тогда уж, а то по 81 порту начнут запрашивать тяжелый контент и капец апачу.
                  сам так «развлекался»
                  • 0
                    То есть если разные адреса, но один порт — конфликта нет? Извинюясь, если ламерский вопрос.
                    • 0
                      Конфликта не будет. Адреса разные.
                      • 0
                        Вообще, если нет ничего в htaccess (или можно перенести в nginx все) я бы в завершение всего php повесил бы на сокеты, да и sql тоже
                        • 0
                          Спасибо за инфо.
                          Да я выше написал, что переехал на nginx. И php-fpm соответственно теперь через сокет.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое