This assumes that if you have a Red Hat Enterprise Linux system, that is is registered to the Red Hat Network and that you have a valid entitlement.
Install software for this deployment:
As the title says, This site is aimed at people wishing to deploy Django on RHEL/CentOS 5 with Postgresql, no religious wars please. All of the packages mentioned in this article except for psychopg2 are available in the distribution itself.
The nice guys at the Extra Packages for Enterprise Linux have packaged up psycopg2. As this is the official repository for Red Hat and its derivatives, packages from this repo should -never- conflict
with packages from the distributions main tree.
Download and configure yum for this repository with this command:
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
Now use yum to install packages needed with the command:
yum install subversion postgresql-server postgresql-python httpd python-psycopg2
Become the postgres user
su - postgres
Connect to the
template1database with PostgreSQL user postgres:
psql -d template1 -U postgres
Yes, the default PostgreSQL user is postgres, and the linux user
postgres is different, these are not related changing one does not change the others.
From the SQL command line, change the PostgreSQL user postgres‘s password:
Quit the SQL command line:\q
Setting the password – which can differ from the password for the linux user
postgres – will allow you to connect to the PostgreSQL command line as the PostgreSQL user postgres (if necessary) after changing the authentication settings in the next step.
Comment or remove any existing lines at the end of the file, then append this:local all all password
Create a user on the postresql server. This is going to be the username and password to be entered in the settings.py file:
createuser -P -s -e yourusername
Enter password for new role:
Enter it again:
CREATE ROLE yourusername PASSWORD 'secretpassword' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN;
createdb --encoding=UNICODE yourdatabasename -O yourusername
Then restart the postgresql server with the command
service postgresql startInstall and configure Django:
The current trunk for Django has many changes (check out Jonathan Buchanan's post on the topic), most of which are very useful features or fixes for uncommon use.
Make a directory where you would like to keep the current svn (I usually make a django user specifically for this purpose), change to this directory, then check out the current trunk with the command:
We now symlink this newly made directory
ln -s `pwd`/django_trunk/django /usr/lib/python2.4/site-packages/djangoMaking django-admin usable:
The django-admin.py command is used quite commonly during Django development and testing. You could refer to it by its complete path, but its easier just to add this directory into your current $PATH environment variable.
In bash, i'd modify $HOME/.bashrc and add the line:
[root@hostname ~]# django-admin.py
Type 'django-admin.py help' for usage.
Where to store your files
Make the following directories
mkdir -p /var/vhosts/virtual.subverted.net/htdocs/media/
mkdir -p /var/vhosts/virtual.subverted.net/django/
Starting a project
Change into the django directory:
run the command
django-admin.py startproject yourprojectname
It should return nothing if done correctly, but a skeleton layout of a project should appear in the current directory.
If you installed with SElinux enabled, you will want to set the context on these files correctly, do so with the command:
chcon -R --reference /var/www/html/ /var/vhosts/virtual.subverted.net/
There are many political arguments surrounding the best web server to use, I don't care enough to get in to the arguments. There /etc/httpd/conf.d/hostname.conf file, following along with our virtual.subverted.net host, here is my configuration file:
CustomLog logs/virtual.subverted.net-access_log common
PythonPath "['/var/vhosts/virtual.subverted.net/django/'] + ['/var/vhosts/virtual.subverted.net/django/yourprojectname/'] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE yourprojectname.settings
The name of the file isn't important, but it must end in .conf to be processed by the main apache script.
You will also want to have another single file which instructs apache to use the namedvirtualhost option to make the above named virtual host "work"
Create a file called /etc/httpd/conf.d/allow-vhost.conf, and have it contain:
Restart the apache server with the command
service httpd restart
And you should be greeted with the "It worked!" welcome page (Shown earlier in this article)
This essentially means the apache is serving up the page correctly, the next step is to configure your settings.py to point to your database.
The settings.py file should have been autocreated when the django-admin startproject yourprojectname command was run.
It should be in the /var/vhosts/virtual/django/yourprojectname directory. Here is an excerpt from the configured settings.py on my system:
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'email@example.com'),
MANAGERS = ADMINS
DATABASE_ENGINE = 'postgresql_psycopg2' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'yourdatabasename' # Or path to database file if using sqlite3.
DATABASE_USER = 'yourusername' # Not used with sqlite3.
DATABASE_PASSWORD = 'secretpassword' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
--- snip --
The DATABASE_* settings are the lines that were modified to point to the database and username password that you should have created above.
Thats all we have time for now kids... Join us again next time. Bye for now.
If you have any corrections, let me know in the comments and I'll fix things above.