Search code examples
pythondjangoapacheubuntuf2py

Django + Apache deployment on Ubuntu


I scanned tons of links on this topic, devoted to the deployment of Django and Apache on Ubuntu server. Finally, I found this link Django Deployement Installation to Ubuntu 12.04 Server which brought me further than any other guide. So, now, I'm at this point - I installed all software and dependencies, enabled mod_WSGI, installed Python environment and Django, started a new project etc. I called my domain name 'dynamics'. So, my dynamics file in /etc/apache2/sites-available folder now looks like this:

<VirtualHost *:80>
 ServerAdmin root@dynamics
 ServerName dynamics

 Alias /site_media/ /srv/my_project/app/webapp/site_media/
 Alias /static/ /srv/my_project/venv/lib/python2.7/site-packages/django/contrib/admin /static/
 Alias /robots.txt /srv/my_project/app/webapp/site_media/robots.txt
 Alias /favicon.ico /srv/my_project/app/webapp/site_media/favicon.ico

 CustomLog "|/usr/sbin/rotatelogs /srv/my_project/logs/access.log.%Y%m%d-%H%M%S 5M" combined
 ErrorLog "|/usr/sbin/rotatelogs /srv/my_project/logs/error.log.%Y%m%d-%H%M%S 5M"
 LogLevel warn

 WSGIDaemonProcess dynamics user=itsme group=itsme processes=1 threads=15 maximum-  requests=10000 python-path=/srv/my_project/venv/lib/python2.7/site-packages python- eggs=/srv/my_project/run/eggs
 WSGIProcessGroup dynamics
 WSGIScriptAlias / /srv/my_project/app/conf/apache/django.wsgi

 <Directory /srv/my_project/app/webapp/site_media>
  Order deny,allow
  Allow from all
  Options -Indexes FollowSymLinks
 </Directory>

 <Directory /srv/my_project/app/conf/apache>
  Order deny,allow
  Allow from all
 </Directory>

 </VirtualHost>

But, when I start apache and go to localhostI see Not found error, if I instead try to go to http://dynamics/ I'm redirected to google search page. I think I need to make some extra configurations, but I do not know which ones. Probably, I need to specify ServerRoot in apache.conf (but again with all this django folders I do not know where I should exactly point to).

EDIT Now, it is even worse. I tried to reinstall apache, but when I go to localhost, browser wants to load a page like a file. So, what I did step by step:

1. sudo apt-get remove apache2 # remove to install from scratch
2. sudo apt-get update
3. sudo apt-get install apache2
4. sudo a2dissite default # disable the default site
5. create dynamics file in /etc/apache2/sites-available
6. dynamics file contains these lines:

<VirtualHost *:80>
 ServerAdmin root@dynamics
 ServerName dynamics
 DocumentRoot /home/username/Sites/dynamics
 <Directory /home/username/Sites/dynamics/>
   Options Indexes FollowSymLinks MultiViews
   AllowOverride Node
   Order allow,deny
   allow from all
 </Directory>
</VirtualHost>
7. /etc/apache2/apache2.conf contains `ServerName dynamics`. 

If I also specify SeverRoot to /home/username/Sites/dynamics I get hundreds of errors, when I restart apache, so I do not specify it. Problems:

1. If I go to `http://dynamics`, I'm redirected to google search page
2. If I go to localhost, the browser wants to load a page like a file

So, after reinstallation I even one step back. I can't even make a virtual host. During this process I encountered one thing - if you do sudo apt-get remove or sudo apt-get purge, in spite of what they say, I still see apache config files untouched - just as they were before uninstallation. So, I now have one extra question:

1. How to uninstall completely apache. All guides and tips that I followed left apache config files just as they were.

EDIT

Well, I reinstalled apache from the very start, added a virtual host dynamics (firstly, without any link with django), then I followed Daniel Roseman advice - corrected hosts file a little bit. And not, at least, this part works. I can add index.html file to dynamics folder and if I go to http://dynamics/ I see this page rendered. BUT, all my attempts to build a django project and run in at the same URL http://dynamics ended in failure. Every time I get this error 'Not found'. Tons of guides, hundreds of blogs and oceans of manuals seem to be completely useless to make (I think) the simplest possible task - just to run a django project on Apache.

EDIT

I will start a bounty question. Now, I just want to formalize everything beforehand. The question is How to deploy Django and Apache on Ubuntu? Requirements:

Strongly required:
1. Ubuntu 12.04
2. Python 3.3.4
3. Apache 2.2.22
4. mod_wsgi

Not so strongly: 5. If someone will make a running test-case, that wiil be cool. So, my final aim is to make a tiny web-project where I could use f2py to call fortran subroutines. If that connection is possible to do in this environment, I will be totally over the moon. And lets say I want to have a concrete virtualhost called dynamics. So, I want to store all project's files in this directory /home/victor/dynamics/. I need a step by step instruction, not just shreds of tips. And hope this instruction, if someone will manage to make it, will be incredibly popular among django newbeis like me.


Solution

  • You need to run sudo a2ensite dynamics to enable the dynamics conf (or you can manually symlink it to sites-enabled), then restart Apache with sudo /etc/init.d/apache2 restart.

    Edit Looks like the other problem is that you're trying to associate your virtualhost with a domain name that doesn't exist and isn't associated with your machine, ie dynamics. If you want to access it like that, you'll need to edit your /etc/hosts to point that name to your localhost: add this line to that file:

    127.0.0.1    dynamics
    

    Don't forget, this is just a hack for your machine. For real deployment, you'd need a proper domain name that is resolvable via DNS.