Nginx + local.dev domains = pow by hands (Wham!)?

854200b88a176fbf3c7cef07b00e32f872ab44da4af3819b5c385f48b3d97da0

Многие слышали про pow – легкий сервер для развертывания локальных приложений с “нулевой” конфигурацией.
Но на самом деле не такой легкий, да и почему бы не попробовать своих костылей, как альтернативу?!


Comic-pow

Что же дает нам pow:
  • доступ к приложениям по домену *.dev, без перебирания портов
  • сервер без модулей для apache/nginx и кучи gem‘ов
  • полная поддержка rbenv и bundler
Хорошо, подпустим поближе..
  1. Напрочь забивается 80й порт.. как вариант повесить pow на другой порт, но не совсем подходящее решение.
  2. Злое кеширование. При некоторых обстоятельствах статика перестает обновляться, а то и вообще отдаваться. Приходится останавливать.. вычищать кеш.. запускать по новой… осадочек..
  3. Для упрощенного управления можно поставить gem: powder или powify, а так же веб-обёртку(powser) или ui-обёртку(anvil) для этого дела.. а зоопарк то растёт..
  4. Сервер использует так называемую утилиту pf для перенаправления пакетов. Это можно даже плюсом назвать.

И всё же.. как-то много телодвижений для запуска проектов под *.dev доменом.
bam
Альтернатива = dnsmasq + nginx.

Для начала управляемся с dnsmasq:

 1 # 1.1 Установка
 2  brew install dnsmasq
 3  mkdir -pv $(brew --prefix)/etc/
 4 
 5  # 1.2 Конфигурирование
 6  echo 'address=/.dev/127.0.0.1' > $(brew --prefix)/etc/dnsmasq.conf
 7  sudo mkdir -v /etc/resolver
 8  sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dev'
 9 
10  # 1.3 Запуск
11  sudo cp -v $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
12  sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

Теперь все обращения по доменам *.dev будут направляться на dns-сервер к 127.0.0.1.
Дальше конфигурируем nginx следующим образом:

 1 server {
 2   listen 80;
 3   set $site_static 'false';
 4 
 5   if ($host ~* ^(.*).dev$) {
 6     set $site $1;
 7   }
 8 
 9   if (-d /var/www/$site/) {
10     set $site_static 'true';
11   }
12 
13   location / {
14     if ($site_static = 'true') {
15       root /var/www/$site;
16     }
17 
18     if ($site_static = 'false') {
19       proxy_pass http://unix:/tmp/sockets/$site.sock;
20     }
21   }
22 }

Теперь если мы захотим развернуть статический сайт – создаем симлинк в /var/www/.

К прим.: /var/www/domainnameforstatic и получаем доступ по http://domainnameforstatic.dev

Для остальных – разворачиваем необходимое приложение с указанием расположения unix-сокета в /tmp/sockets/.

К прим.: /tmp/sockets/domainnameforapp.sock и получаем доступ по http://domainnameforapp.dev

Каждый инструментарий полон изысканных извращений. Посему решение подойдет не для всех, да и pow может в полной мере устраивать кого-то.
il_570xN.689753729_tfgn

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s