Настройка вебсервера под Debian
03.01.2011 изучение Линукса хостинг
Продолжаю настраивать свой сервер.
План пока такой: установить MySQL, PHP, вебсервер Lighttpd и заставить всё это работать вместе, чтобы я мог спокойно переехать на новую машинку. Кроме того нужно настроить беспроблемную отправку писем из скриптов, а вот приём почты мне пока не нужен — достаточно переадресации на gmail, но это тоже нужно настроить.
Далее почти все действия производятся от суперпользователя на сервере.
Установка PHP
В прошлом году вышла версия PHP 5.3.3 со встроенным FPM, но таких пакетов в официальном репозитории нет, и для Debian Lenny не будет, скорей всего. Поэтому придется или собирать PHP самому, или добавить дополнительный репозиторий от сообщества dotdeb.org, где PHP 5.3.3 уже собрали (как и многие другие пакеты для вебсерверов).
- echo 'deb http://php53.dotdeb.org lenny all' >> /etc/apt/sources.list
Добавление репозитория. - wget http://www.dotdeb.org/dotdeb.gpg && apt-key add dotdeb.gpg && rm dotdeb.gpg
Регистрация публичного ключа, чтобы APT не ругался. Если честно, вообще не понимаю смысла этого действия, зачем нужны эти ключи? Кто знает, расскажите, пожалуйста, простыми словами. - aptitude update
Обновление информации о пакетах. - aptitude install php5-fpm
Ставим PHP с управлятором FastCGI. - aptitude install php5-suhosin
На всякий случай решил поставить защитный модуль для PHP, мало ли. Кстати, этот пакет порекомендовала Aptitude на предыдущем шаге.
Установка вебсервера Lighttpd
- 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.
Заработало! Создадаю в каталоге пользователя директорию с именем домена, делаю там файлик для проверки и снова открываю в браузере домен. Что вижу?
Ну всё, значит работает как надо. Но как быть с поддоменами? Что если я захочу сделать поддомен? И ещё я хочу автоматический редирект с 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 и всё.
Комментарии
Комментирование этой статьи закрыто.
Можно создать A-record *.domain.name и указать ip, тогда все поддомены будут указывать куда нужно.
Ого! Не знал, что можно ставить просто звёздочку. Век живи — век учись. Спасибо.
Для общего развития это хорошо, но для работы – нерациональная трата времени. Зачем настраивать всё ручками, если почти всё можно на порядок быстрее сделать через панель управления сервером?
Я хочу понимать. Да и сомневаюсь я в твоей оценке «на порядок». И вообще, не всё возможно сделать из панели.
откуда такая любовь к lighttpd? Его конфиг убог, да и модулей меньше чем у nginx и apache…
PS это не камень в твой огород, а просто вопрос.
+ к комменту sf. Nginx гораздо лучше, да и не остановился в развитии как лайти
Какая «такая любовь»? Это не любовь, просто выбор. Nginx и Lighttpd примерно на одном поле играют, у каждого есть недостатки и премущества. Выбор сделал несколько недель назад, не помню точно почему именно Лайти.
2kp: доры клепать пачками замучаешься через панель) скриптом – самое оно.
когда будешь переадресацию почты настраивать, прегодиться прописать DNS у провайдера. Ниже мой запрос.
Здравствуйте,
Пропишите пожалуйста прямой и обратный DNS для VDS: …. и IP ….
Это нужно для трансляции всей почты VDS на мой ящик mail.ru, иначе будет расцениваться как спам и почта не станет приходить.
Что-то бред какой-то.
Слушай, если так тяжка с финансами, чего на блог adsense не повесишь? 5к просмотров вполне ощутимую прибыль дадут
ололо
деб ставить легко, даже можно было не писать:)