dnsmasq: своя DNS-зона для локальной разработки Django 30.03.2013

При разработки с помощью Django (да любого другого современного веб-фреймворка) часто приходиться запускать встроенный сервер :), URL у которого может быть таким http://127.0.0.1:8000. Если разрабатывается один сайт - это не большая проблема. Но если параллельно отлаживаются несколько сайтов, то возникает пара незначительных проблем. Браузеры кешируют картинки, стили одного сайта, а при запуске локального сервере для другого сайта можно наблюдать эти же картинки и побитые стили (если имена файлов совпадают). Хотя это и лечится принужденным обновлением кеша, но доставляет определенные неудобства. Также сбрасываются куки и приходится на каждом проекте заново логинится. Еще хотелось бы для каждого проекта лаконичный домен, типа hollywood.test или project.test.

Для решения этих 'проблем' можно для каждого нового проекта вносить записи в /etc/hosts или поднять локальный, облегченный DNS-сервер - dnsmasq.

dnsmasq - легковесный DNS, DHCP, TFTP (BOOTP, PXE) сервер.

Установка

# под Arch Linux
yaourt -S dnsmasq

# под Ubuntu
sudo apt-get install dnsmasq 

Добавим в настройки dnsmasq зону *.test, доступную только на локальной машине.

# sudo vim /etc/dnsmasq.conf

address=/test/127.0.0.1
listen-address=127.0.0.1

Перезапустим dnsmasq

# для Arch Linux
sudo systemctl restart dnsmasq

# для Ubuntu 
sudo /etc/init.d/dnsmasq restart

Сообщим dns-resolver о новом dns-сервере, добавив 127.0.0.1 в начало файла

# для Arch Linux
# sudo vim /etc/resolv.conf.head

nameserver 127.0.0.1
nameserver 8.8.8.8

# для Ubuntu
# sudo vim /etc/resolv.conf

nameserver 127.0.0.1
nameserver 8.8.8.8

После этого нужно перезапустить сетевое подключение

# для Arch Linux (если используется netcfg)
sudo netcfg -r network_profile

# для Arch Linux (если используется netctl)
sudo netctl restart network_profile

# для Ubuntu
sudo /etc/init.d/networking restart

Проверим результат

ping hollywood.test

Из 'побочных эффектов', после установки dnsmasq, замечено уменьшение времени при резолвинге (dns-resolve) запросов к внешнему DNS-серверу - dnsmasq умеет кешировать dns-запросы, по умолчанию размер кеша равен 150.

Статус работы dnsmasq можно проверить

# по логам
tail /var/log/messages

# командой
sudo killall -s USR1 dnsmasq

Чтобы локальный сервер был доступен по адресу, например, hollywood.test нужно запустить локальный сервер на 80-ом порте. Под *nix для использования этого порта нужны root-привилегии.

Разрешим своему пользователя запускать локальный django-сервер на 80-ом порте, для этого добавим в /etc/sudoers следующею строку:

# sudo visudo

proft ALL=NOPASSWD: /usr/bin/djrs

Создадим скрипт djrs и дадим ему права 766:

# sudo vim /usr/bin/djrs

#!/usr/bin/env bash
python manage.py runserver 80

Добавим alias для быстрого запуска сервера:

# vim ~/.zshrc
# vim ~/.bashrc

alias rs="sudo djrs"
Цитата
Кратчайший путь не тот, который идет по возможно прямому направлению, а тот, где попутные ветры надувают наши паруса: так учит наука мореплавания…
Фридрих Ницше
Категории
Архив