Джентльменский набор web-разработчика («Денвер»): интервью с создателем
На вопросы редакции отвечает Дмитрий Котеров, автор системы «Денвер» (http://denwer.ru), сооснователь и руководитель разработки проекта http://moikrug.ru (компания Яндекс), автор книг «PHP5» и «Самоучитель PHP4».
КомпьютерПресс: Здравствуйте, Дмитрий! Расскажите нашим читателям, что такое «Денвер».
Дмитрий Котеров: Джентльменский набор web-разработчика («Д.н.w.р», читается как «Денвер») — это набор дистрибутивов (Apache, PHP, MySQL, Perl и т.д.) и программная оболочка, используемые web-разработчиками (программистами и дизайнерами) для отладки сайтов на «домашней» (локальной) Windows-машине без необходимости выхода в Интернет. «Денвер» в основном применяется там, где ведется одновременная работа над несколькими независимыми проектами — например в web-студиях.
В настоящий момент проект имеет только русскую локализацию и известен лишь в России. Система весьма популярна: в стране каждый день порядка 300 человек инсталлируют «Денвер» на ту или иную машину.
КП:Какова история создания «Денвера»?
Д.К.: Я профессионально заинтересовался web-программированием в 1999 году. В те времена еще были популярны ОС Windows 95 и 98, в Интернет заходили по модему, а мобильные телефоны имели считаные единицы.
Мы собирали команду, и всем нужно было настраивать удобную среду для удаленной работы над сайтами, которые в дальнейшем выкладывались в Интернет. Я обнаружил, что разобраться с установкой и конфигурированием Apache, PHP3, Perl, MySQL может (а главное, хочет) далеко не каждый, поэтому люди начинают работать неэффективно — вплоть до того, что для проверки внешнего вида страницы закачивают ее по модему (через FTP) к хостинг-провайдеру и по 20 секунд ждут завершения всех этих операций.
В Рунете к тому времени не было ни одной сколько-нибудь простой публикации, содержащей описание процесса установки по шагам, поэтому я решил восполнить этот пробел. Статья называлась «Apache + Perl + PHP3 + MySQL для Windows 95/98: руководство по установке», и совершенно неожиданно для меня она вдруг стала очень популярной. Тысячи сайтов копировали ее текст на свои страницы (иногда даже без указания авторства). Появилось также множество сторонних «вариаций на тему». Кстати, эта публикация до сих пор входит в пятерку самых популярных страниц сайта http://dklab.ru, хотя информация в ней давно устарела.
За три года после публикации статьи я ответил на порядка 3 тыс. писем читателей, сама статья тоже дорабатывалась раз пятьдесят. Это было замечательное время! Но, к сожалению, постепенно я перестал справляться с потоком писем (а большинство из них были однотипны). Кроме того, статья разрасталась, а значит, становилась все сложнее и сложнее, что прямо противоречило ее смыслу — дать простому разработчику возможность легко сконфигурировать необходимые ему инструменты. Я понял, что многие процессы, описанные в ней, можно автоматизировать, одновременно убив двух зайцев: помочь пользователю быстро установить все необходимое на свою машину и уменьшить поток писем. Так зародилась идея «Денвера».
КП:Как выглядела самая первая версия «Денвера»?
Д.К.: Примерно полгода «Денвер» представлял собой обычный zip-архив размером порядка 1,5 Мбайт, включающий урезанные версии Apache, Perl, PHP, MySQL и phpMyAdmin, а также скрипты на Perl для поддержки совместного запуска/остановки компонентов и работы с несколькими виртуальными хостами одновременно. Его можно было скопировать в произвольную директорию на диске и сразу же начать работать (оказалось, что все компоненты системы возможно сконфигурировать так, чтобы они функционировали только с относительными файловыми путями).
15 марта 2002 года вышла первая официальная версия «Денвера». В ней уже был простейший инсталлятор (кстати, оставшийся практически неизменным до сих пор), который только и делал, что копировал файлы туда, куда ему укажет пользователь, а также предлагал добавить ярлыки в «Автозагрузку» для более удобного запуска «Денвера».
КП: Есть мнение, что разработчик должен уметь сам конфигурировать систему, с которой работает. Как вы к этому относитесь?
Д.К.: Чтобы ответить на данный вопрос, нужно вначале развеять одно распространенное заблуждение. Как показывают мои наблюдения, люди, знакомые с «Денвером», делятся на два лагеря: одни понимают, что это такое, а другие — нет. Первые «Денвер», как правило, используют. Вторые же занимают такую позицию: «Денвер» вреден, потому что программист должен разбираться в настройках компонентов самостоятельно, а также иметь свободу в их выборе.
К счастью, вторая точка зрения в действительности не имеет к «Денверу» никакого отношения. Дело в том, что, вопреки бытующему мнению, «Денвер» не ограничивает разработчика ни в выборе компонентов, ни в их настройке. Вы можете в любой момент обновить PHP или подредактировать httpd.conf так, как привыкли к этому. Система лишь предоставляет программисту настройки по умолчанию, которые заведомо работают, и с них можно начинать.
Профессиональные программисты, использующие «Денвер» в работе, конечно же, изменяют его конфигурацию ничуть не меньше, чем это делают те, кто ставит компоненты «вручную». Более того, «Денвер» всячески стимулирует пользователя к тому, чтобы он что-то изменял в нем самостоятельно. Все основные компоненты системы могут быть обновлены из своих исходных дистрибутивов просто методом «копирования поверх». Это касается PHP, Apache, MySQL…
КП: В чем ключевые отличия «Денвера» от аналогов?
Д.К.: Самая главная особенность «Денвера» — это то, что он представляет собой не только набор дистрибутивов, но и программную оболочку, упрощающую работу с несколькими проектами одновременно. Проекты могут быть независимы и расположены на разных виртуальных хостах, каждый из которых имеет собственную директорию документов. Такая схема особенно полезна web-студиям, ведущим параллельную разработку сразу нескольких сайтов.
Очень важна принципиальная простота процедуры заведения нового проекта. Вы просто создаете директорию с именем проекта /home/ИмяПроекта/www, после чего перезапускаете «Денвер» и получаете виртуальный хост с именем http://ИмяПроекта. Удаляете директорию — удаляется и виртуальный хост, как будто его и не было. Если в CVS-репозитории вашей студии несколько сотен сайтов и вы периодически работаете с некоторыми из них, то с использованием «Денвера» процесс «развертывания» сайта из CVS становится для вас чрезвычайно легким.
Для каждого проекта в /home «Денвер» использует отдельный виртуальный хост, причем правила именования нежесткие и могут быть изменены пользователем в файле httpd.conf. А именно — «Денвер» использует один из виртуальных хостов httpd.conf в качестве шаблона, по которому строятся все остальные виртуальные хосты. Правила построения подробно документированы и очень просты (например, конструкция $& в шаблоне заменяется на путь к директории документов проекта, а конструкция %& — на полное имя виртуального хоста). Разные хостинг-провайдеры имеют различную схему расположения файлов в /home, и в «Денвер» уже включены инструкции для поиска по пяти наиболее популярным схемам (задается в httpd.conf). Например,
DocumentRootMatch “/home/(?!cgi)(.*)/public_html”
DocumentRootMatch “/var/www/html/(?!cgi)(.*)/(?!cgi)(.*)”
заставляет «Денвер» искать проекты в директории /home или /var/www/html, не учитывая при этом имена CGI-директорий (новые инструкции также могут быть добавлены пользователем). Тот, кто знаком с регулярными выражениями, должен легко понять эти правила.
КП: В последнее время все большую популярность приобретают так называемые мобильные приложения, которые человек носит с собой на флэш-накопителе. Это очень удобно: можно вставить его в любую машину и сразу же начать работать. Возможна ли работа «Денвера» в таком режиме?
Д.К.: Да, конечно. Две наиболее интересные особенности «Денвера» — это его незначительный объем (около 3 Мбайт) и полная автономность. Иными словами, «Денвер» ничего не изменяет в системе вне своей директории (за исключением разве что файла hosts, который сообщает Windows о зарегистрированных виртуальных хостах), а его директория может быть расположена на диске в любом месте — он все равно запустится. В частности, можно запускать «Денвер» с флэш-накопителя.
Более того, можно даже установить два «Денвера» в разные директории, и они не будут конфликтовать! Правда, если вы хотите запускать их одновременно, а не по очереди, придется поменять порт Apache с 80 на 81 (чтобы исключить возможность конфликтов). Это делается в httpd.conf.
КП: А вы используете «Денвер» в своей работе?
Д.К.: Конечно, ведь в нем поддерживается удобная работа с множеством проектов, а также из-за его автономности и мобильности. Вообще, у меня установлено четыре копии «Денвера»: один — для работы, второй — для авторских проектов http://dklab.ru, http://orphus.ru и т.д., третий — отладочный (тот, что выкладывается на официальный сайт), а четвертый — для предрелизного тестирования пакетов расширений.
КП: Опишите, пожалуйста, особенности использования «Денвера» в команде из нескольких разработчиков. Возможно ли это вообще?
Д.К.: Не просто возможно, а даже рекомендуется! Денвер для того и создавался, чтобы каждый программист мог работать с собственной копией сайта, синхронизируя изменения с другими членами команды при помощи CVS или Subversion.
Однако базу данных проекта, над которым идет совместная работа, удобно держать все-таки в единственном экземпляре. Это связано с тем, что изменения в схеме базы данных гораздо труднее версионизировать, и каждый разработчик просто физически не сможет заниматься отслеживанием изменений в базе.
Таким образом, в команде из нескольких разработчиков удобно применять следующую схему:
- единая база данных проекта, доступная каждому разработчику по сети;
- у каждого разработчика установлена собственная копия «Денвера» с файлами проекта;
- файлы проекта синхронизируются между разными разработчиками с использованием CVS или Subversion.
Конечно, если вы работаете удаленно, доступ к единой базе данных по сети будет отнимать немало времени, что усложняет разработку. В этом (и только этом) случае можно все-таки рассмотреть возможность использования каждым разработчиком собственной копии базы данных (для отладки), но тогда надо применять какие-либо инструменты для автоматического отслеживания изменений в структуре БД.
КП: Можно ли применять «Денвер» в качестве web-сервера в своей локальной сети? Разместить на нем домашнюю страничку, например?
Д.К.: Я негативно отношусь к использованию системы таким образом. Все-таки «Денвер» — это инструмент разработки, а не средство создания хостинга. Дело еще и в том, что ОС Windows плохо приспособлена для хостинга с применением Apache, PHP, MySQL. К тому же «Денвер» запускается с правами администратора машины (хотя предусмотрена возможность запускать его с пониженными привилегиями), а потому малейшая уязвимость в сайте, открытом «наружу», ставит под угрозу безопасность всей машины. Учитывая все это, по умолчанию «Денвер» доступен только с той машины, где он установлен, и открыть локальный сайт для всеобщего просмотра без дополнительных настроек нельзя.
КП: Что планируется в будущих версиях «Денвера»?
Д.К.: Планов очень много. Самый важный из них — выход проекта за пределы Рунета, то есть английская локализация системы. В новые версии будет также добавлена поддержка SSL, обновлены все основные компоненты (Apache 2.2, PHP5, MySQL5 и т.д.). Вероятно, появится графический (внешне более привлекательный) инсталлятор. Кроме того, ведутся работы (правда, очень вялотекущие) в направлении создания защищенного хостинг-сервера на базе «Денвера». Это связано с желанием пользователей использовать платформу Apache+PHP на своих Windows-машинах в районных сетях.
КП: А когда пользователям ожидать очередного обновления «Денвера», ведь в текущей сборке даже основные компоненты (Apache, PHP, MySQL, phpMyAdmin и т.д.) уже устарели?
Д.К.: Очередное серьезное обновление планируется на середину-конец октября. Однако я бы еще раз хотел подчеркнуть две вещи. Во-первых, «Денвер» — это инструмент разработки, поэтому постоянная актуальность компонентов для него может быть даже вредна. Ведь у хостинг-провайдеров, на которых будут работать результирующие сайты, обновление программного обеспечения происходит довольно медленно и одна из важнейших задач программиста — заставить работать сайт даже на старых версиях PHP и MySQL. Во-вторых, если вам все же нужна самая последняя версия какого-то из компонентов (например, PHP или MySQL), вы можете просто скачать официальный дистрибутив и развернуть его поверх в соответствующую директорию в рамках «Денвера». (Перед этим на всякий случай сделайте бэкап). В общем, мы сознательно не гонимся в «Денвере» за самыми последними версиями компонентов, так как это в целом не полезно для процесса разработки.
КП: Появится ли версия «Денвера» для Linux?
Д.К.: Что касается выхода «Денвера» для Linux, то я не думаю, что это когда-либо произойдет. «Денвер» — это прежде всего инструмент разработки, а мое мнение заключается в том, что для разработки самой удобной платформой является Windows (для нее гораздо больше других инструментов и утилит).
Кстати, я хотел бы удержать сейчас читателя от возгласа: «Да в Linux и так все есть, поставил пакеты из RPM — вот тебе и Apache, и PHP, и MySQL!» Это мнение неверно и проистекает из непонимания того, чем же является «Денвер» на самом деле. Названные компоненты вы, конечно же, таким способом установите, но при этом вы не получите:
- их связную конфигурацию (с обходом всех подводных камней);
- систему управления виртуальными хостами и работы с множеством проектов;
- автономность и независимость системы (вы не сможете, например, легко запустить на одной машине два «самодельных “Денвера”» сразу, а также записать его на флэш-накопитель).
КП: Станет ли «Денвер» со временем платным или навсегда останется открытым проектом?
Д.К.: Для пользователей из России «Денвер» будет оставаться бесплатным, а что касается других стран, то вопрос пока открыт...
КП: Используется ли «Денвер» при работе над сервисом «МойКруг» компании «Яндекс»?
Д.К.: Да, используется, хотя и далеко не всеми разработчиками. Кто-то привык работать в Windows, а кто-то — в Linux или даже в Mac OS. У нас достаточно свободные условия по выбору инструментария: для меня главное, чтобы программист сталкивался с минимумом рутинной работы.
Кстати, «МойКруг» постоянно расширяется, поэтому я все еще надеюсь привлечь талантливых PHP-программистов в свою команду разработки. Работа очень интересная, творческая, планов и хороших идей масса. «МойКруг» — это крупнейшая в России социальная сеть для поиска и поддержания деловых контактов, и у проекта впечатляющие перспективы (я считаю, что «серьезная сторона» человеческой натуры никогда не перестанет интересовать людей). К тому же «Яндекс» обеспечивает приличную заработную плату и комфортные условия труда, так что если кого-то это заинтересует, то можно оставить заявку по адресу: http://moikrug.ru/hire/.
Пакет «Денвер» можно взять с прилагаемого к журналу CD или скачать с сайта http://www.denwer.ru (ко времени выхода журнала на сайте могут появиться уже более свежие версии).