Настройка вебсервера под Debian

03.01.2011

Продолжаю настраивать свой сервер.

План пока такой: установить MySQL, PHP, вебсервер Lighttpd и заставить всё это работать вместе, чтобы я мог спокойно переехать на новую машинку. Кроме того нужно настроить беспроблемную отправку писем из скриптов, а вот приём почты мне пока не нужен — достаточно переадресации на gmail, но это тоже нужно настроить.

Далее почти все действия производятся от суперпользователя на сервере.

Установка PHP

В прошлом году вышла версия PHP 5.3.3 со встроенным FPM, но таких пакетов в официальном репозитории нет, и для Debian Lenny не будет, скорей всего. Поэтому придется или собирать PHP самому, или добавить дополнительный репозиторий от сообщества dotdeb.org, где PHP 5.3.3 уже собрали (как и многие другие пакеты для вебсерверов).

  1. echo 'deb http://php53.dotdeb.org lenny all' >> /etc/apt/sources.list
    Добавление репозитория.
  2. wget http://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg && rm dotdeb.gpg
    Регистрация публичного ключа, чтобы APT не ругался. Если честно, вообще не понимаю смысла этого действия, зачем нужны эти ключи? Кто знает, расскажите, пожалуйста, простыми словами.
  3. aptitude update
    Обновление информации о пакетах.
  4. aptitude install php5-fpm
    Ставим PHP с управлятором FastCGI.
  5. aptitude install php5-suhosin
    На всякий случай решил поставить защитный модуль для PHP, мало ли. Кстати, этот пакет порекомендовала Aptitude на предыдущем шаге.

Установка вебсервера Lighttpd

  1. aptitude install lighttpd
    Ничего сложного. Теперь настройка…

Настройка вебсервера и PHP

У меня уже есть домен (допустим, example.com) и я его уже прописал в панели управления DNS у Linode.com (как это сделать?). Поэтому после предыдущих шагов сервер уже можно сразу же проверить. Набираю в браузере домен и вижу заглушку:

Вебсервер уже работает!

Отлично. Но пока ещё сервер не знает про PHP и умолчальные настройки лично мне не нравятся. В частности я терпеть ненавижу дебильную моду размещать файлы сайтов в каталоге /var/www, я считаю, что для этой цели гораздо лучше подходит каталог пользователя (или пользователей).

Что ж, открываю в текстовом редакторе конфиг Лайти и редактирую его, сверяясь с документацией. Возможно я ошибаюсь (поправьте меня, если так) но в Lighttpd, похоже, есть какие-то встроенные модули (в частности mod_evhost), которые настраиваются в глобальном конфиге /etc/lighttpd/lighttpd.conf, и подключаемые с помощью команды lighttpd-enable-mod NAME_module, которые настраиваются отдельно.

Виртуальные хосты

Хочу чтобы при прописывании в DNS нового домена вебсервер сразу же мог его обрабатывать, если существует каталог с именем этого домена. Для этого подходит встроенный модуль mod_evhost, его нужно раскомментировать в секции server.modules lighttpd.conf, а чуть ниже настроить в этом же файле. У меня правило такое:

evhost.path-pattern = "/home/NAME/%0/"

Где NAME — имя пользователя, под которым работает сервер, запускается PHP и т. п. Естественно, я изменил и значения server.username и server.groupname на NAME.

Значения с процентиком расшифровываются в комментариях того же конфига, или можно их посмотреть в доках.

Так, перезапускаем сервер и проверяем…
invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd2011-01-03 08:22:58: (log.c.62) opening errorlog '/var/log/lighttpd/error.log' failed: Permission denied
2011-01-03 08:22:58: (server.c.899) Opening errorlog failed. Going down.
Ага, проблемка возникла. Это потому что сервер запустился под пользователем, у которого нет доступа к файлу. Сделаем доступ:
chown -R NAME:NAME /var/log/lighttpd
invoke-rc.d lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
Заработало! Создадаю в каталоге пользователя директорию с именем домена, делаю там файлик для проверки и снова открываю в браузере домен. Что вижу?

Содержимое каталога /home/NAME/domain.tld

Ну всё, значит работает как надо. Но как быть с поддоменами? Что если я захочу сделать поддомен? И ещё я хочу автоматический редирект с www на домен без атавизма.

Поддомены и www

Для переадресации с www нужен mod_redirect, который также необходимо раскомментировать в конфиге, а потом использовать конструкцию с подстановкой запрашиваемого имени хоста. Примерно так (тупо скопировал пример из документации):

# from any www.host to the host without www
$HTTP["host"] =~ "^www\.(.*)$" { url.redirect = ( "^/(.*)" => "http://%1/$1" )
}

А с поддоменами ещё проще, надо изменить шаблон для evhost таким образом:
evhost.path-pattern = "/home/NAME/%0/%3/". И тогда, допустим, tmp.example.com будет соответствовать пути /home/NAME/example.com/tmp. Однако, в настройках DNS example.com должна быть A-запись для tmp. Как включать домены мгновенно я не знаю, но уверен, что это возможно. Надеюсь, опытные сисадмины подскажут, как это делается.

Запуск PHP-скриптов

Если теперь создать php-файлик в одном из каталогов, запустить его не получится — вылезет ошибка 403. Потому что ещё предстоит настроить сопряжение PHP и вебсервера. PHP, как я уже писал выше, поставил версии 5.3.3 в FPM, так что сперва именно этот FPM и PHP надо настроить.

PHP-FPM может слушать запросы через UNIX-сокеты и через TCP/IP, и я выбрал первый вариант, но не особо осознанно. В сети много мнений за и против, у меня же недостаточная квалификация, чтобы понять преимущества того или иного решения. Поэтому очень интересно было бы узнать мнение шарящих в теме людей! Жду вас в комментариях.

Изменил только имя пользователя и группу, ну и сокет вместо IP:PORT, остальные настройки пока оставил умолчальные. Наверно это нехорошо, но менять что-то без понимания не лучше. Пусть пока так.

Чтобы Лайти заработал с PHP нужно включить модуль fastcgi и настроить его. Делается это примерно так:

lighttpd-enable-mod fastcgi
vim /etc/lighttpd/conf-enabled/10-fastcgi.conf
И содержимое этого конфига у меня пока вообще простейшее:
server.modules += ("mod_fastcgi")
fastcgi.server = ( ".php" =>
(( "socket" => "/tmp/php-socket",
))
)

Перезапускаем всё…
invoke-rc.d php5-fpm restart
invoke-rc.d lighttpd restart

Теперь должны запускаться PHP-скриптики. У меня по крайней мере всё работает вроде :) PHP пока в минимальной конфигурации, даже CURL нет, но решил что лучше постепенно доустанавливаю всё что нужно.

Просмотр каталогов

А ещё я закомментировал в конфиге Лайти просмотр содержимого каталогов. Как-то неуютно мне от этой опции, тем более тогда при доступе по IP он покажет вообще всё, а это ай-я-яй.

Что осталось?

Настроить MySQL и отправку писем. С MySQL я пока работал исключительно через панель управления, буду учиться делать это из консоли. С почтой вообще пока дуб дубом. Будем изучать. Но об этом в следующей заметке…

P.S. Тем, кто воспринимает этот цикл статей как руководство к действию следует знать: я маленько извращенец и почти всегда выбираю какой-то свой особый путь. Наступал на многие грабли, но они остались за кадром, так что будьте готовы преодолевать трудности. Для большинства людей также заморачиваться нет смысла, проще поставить стандартный LAMP и всё.

Комментарии

  1. # Rulexec

    Однако, в настройках DNS example.com должна быть A-запись для tmp. Как включать домены мгновенно я не знаю, но уверен, что это возможно.

    Можно создать A-record *.domain.name и указать ip, тогда все поддомены будут указывать куда нужно.

  2. # Тормоз

    Ого! Не знал, что можно ставить просто звёздочку. Век живи — век учись. Спасибо.

  3. # kp: 

    Для общего развития это хорошо, но для работы – нерациональная трата времени. Зачем настраивать всё ручками, если почти всё можно на порядок быстрее сделать через панель управления сервером?

  4. # Тормоз

    Я хочу понимать. Да и сомневаюсь я в твоей оценке «на порядок». И вообще, не всё возможно сделать из панели.

  5. # sf: 

    откуда такая любовь к lighttpd? Его конфиг убог, да и модулей меньше чем у nginx и apache…
    PS это не камень в твой огород, а просто вопрос.

  6. # lex

    + к комменту sf. Nginx гораздо лучше, да и не остановился в развитии как лайти

  7. # Тормоз

    Какая «такая любовь»? Это не любовь, просто выбор. Nginx и Lighttpd примерно на одном поле играют, у каждого есть недостатки и премущества. Выбор сделал несколько недель назад, не помню точно почему именно Лайти.

  8. # tserj: 

    2kp: доры клепать пачками замучаешься через панель) скриптом – самое оно.

  9. # tserj: 

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

    Здравствуйте,

    Пропишите пожалуйста прямой и обратный DNS для VDS: …. и IP ….

    Это нужно для трансляции всей почты VDS на мой ящик mail.ru, иначе будет расцениваться как спам и почта не станет приходить.

  10. # Тормоз: 

    Что-то бред какой-то.

  11. # Георгий: 

    Слушай, если так тяжка с финансами, чего на блог adsense не повесишь? 5к просмотров вполне ощутимую прибыль дадут

  12. # Artoha

    ололо
    деб ставить легко, даже можно было не писать:)

Комментирование этой статьи закрыто.

Интересное Покупки ТехникаРазное Отдых Статьи Строительство Услуги Общество Хобби Культура Советы Уют