четверг, 27 февраля 2014 г.

Simple way to make Django's devserver to serve port 80 without running it under root or dedicated web-server.

Способ запустить django devserver от пользователя и заставить его отвечать по порту 80.

In some cases we need to make devserver to answer on local domain address with standart http port 80. Linux don't allow to user to use ports below 1024.

The way to do that is not trivial, but simple. At first, make changes to /etc/hosts

127.0.0.1 ourdomain.com

Tha point is that we need to redirect http requests to django from classic devserver's 8000 port to standart http port # 80. Simpliest way to me is to using xinetd.
sudo yum install xinetd -y

Create rule in /etc/xinetd.d
    sudo vi /etc/xinetd.d/8000-to-80-redirect

Fill it:
 service 8000-to-80-redirect
  {
   type = UNLISTED
   disable = no
   socket_type = stream
   protocol = tcp
   user = root
   wait = no
   port = 80
   redirect = 127.0.0.1 8000
   log_type = FILE /tmp/8000-to-80-redirect.log
  }
Enable and run xinetd
sudo systemctl enable xinetd
sudo systemctl start xinetd

Check:
sudo systemctl status xinetd

Run django server (redundancy to see teh Magic):
django-admin.py runserver 127.0.0.1:8000

Type in browser
ourdomain.com

Enjoy! :)