При разработки с помощью 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"