Автоматизация создания виртуальных хостов

Доброго времени суток!

В процессе разработке всегда хочется автоматизировать рутинные операции (или мне так кажется) и приступить непосредственно к действительно интересным вещам. Так как я являюсь веб-разработчиком, для меня такой операцией всегда было развертывание окружения. Сегодня я попытаюсь максимально упростить задачу создания нового хоста для нового проекта на локальной машине.

Если Вас замучило ручное создание хостов для Apache, а использовать готовый пакет типа XAMPP или Denwer нету желания/возможности/свой вариант, прошу под кат.


Конечно, что нам нужен Apache. Скачиваем и инсталлируем. Далее немного магии:

Mass virtual hosts


Первым делом выбираем папку где будут жить все наши проекты и делаем её доступной для Apache. Пусть это будет d:/sites (я использую Windows, так что все примеры будут для нее, но должно работать и в Linux):

<Directory d:/sites>
  Options Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>


Теперь автоматизируем процесс создания новых хостов. Для этой цели нужно включить модуль mod_vhost_alias для Apache и добавить всего 2 строчки в конфигурационный файл:

  NameVirtualHost *:80
  VirtualDocumentRoot d:/sites/%-2


Ключ %-2 указывает Apache взять предпоследнюю часть URL запроса и направить запрос к подпапке в d:/sites. Как бонус будут работать и поддомены. Несколько примеров:

  http://test.local -> d:/sites/test
  http://qwerty.local -> d:/sites/qwerty
  http://a.domain.local -> d:/sites/domain


Больше про возможные ключи можно прочесть на странице документации.

Замечание. При такой конфигурации хостов не будет работать mod_rewrite. Проблему исправить очень просто: нужно лишь указать «RewriteBase /». В результате должно получиться как-то так:
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /
  # Your rewrite rules go next
</IfModule>


Автоматическая конфигурация DNS



Самым лучшим решением будет прописать новую зону *.local в роутере (если имеется), потому-что hosts файлы не поддерживают wildcard (*). Если роутера нету, то проблему можно обойти с помощью дополнительного софта.

Windows

Чтобы каждый раз не прописывать новый хост вручную, можно установить локальный DNS прокси. Я использую Acrylic DNS Proxy. Программа миниатюрная и предельно проста в использовании.
  1. В свойствах соединения с интернетом меняем адрес DNS на 127.0.0.1
  2. Редактируем файл настроек Acrylic: Программы\Acrylic DNS Proxy\Config\Edit Configuration File. Нужно указать DNS сервера Вашего провайдера или любой другой доступный (например DNS Google 8.8.8.8), которые будет использовать Acrylic, когда доменное имя отсутствует в кэше.
  3. Редактируем Программы\Acrylic DNS Proxy\Config\Edit Custom Hosts File. Acrylic понимает звёздочку. Ура! Лично я использую *. local
  4. Очищаем кэш и перезапускаем Acrylic: Программы\Acrylic DNS Proxy\Config\Purge Acrylic Cache Data


Linux

Для этих же целей есть Dnsmasq (спасибо Anonym). Редактируем /etc/dnsmasq.conf. Для зоны *.local нужно дописать:

address=/local/127.0.0.1
listen-address=127.0.0.1

Сохраняем изменения и перезапускаем Dnsmasq.

Бонус: настройка email


Windows не имеет встроенного sendmail. Я использую крошечную утилитку Test Mail Server Tool, которая просто складывает письма в папку.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 10

    +6
    не понимаю зачем могут понидобиться эти пляски (на winodows), когда есть openserver
      0
      Ну и что, что он есть. Кто-то любит другие. Кто-то юзает ZendServer, например в кластере и т.д.
      Лично у меня никогда не доходили руки написать автохосты, потому что их вроде и создаешь редко, но всякий раз, при создании очередного, ругаешь себя за лень.
      +1
      Для пользователей Linux инструкция на этом заканчивается, нужно только дописать *.local в /etc/hosts

      Мне кажется или эта конструкция не должна работать? Ubuntu 11.04 — не работает, пользуюсь dnsmasq.
        0
        Спасибо. Почему-то всегда думал, что можно использовать звёздочку. Сейчас поправлю статью.
          0
          Можно, но не всегда и не везде. В частности, в Ubuntu 11.х она не работает.
        0
        О, спасибо, ушло в закладки.
          0
          mod_macro куда более удобен
            0
            Все равно придётся прописывать каждый новый домен вручную, перезапускать апач. Конечно, задать конфигурацию таким способом можно более гибко, но моя статья более ориентированна на разработку типичных проектов на одной-двух разных CMF/CMS, когда нужен просто новый хост.

            Достаточно только создать папку и можно сразу в бой :)
              0
              Да, вы правы, для домашнего решение хорошее
            0
            А вот этот простой код даст вам теже свойства на Digital Oucean.

            Only users with full accounts can post comments. Log in, please.