Skip to main content

How to install python and configure django on a CentOS 6.7 Linux server with CPanel?

I recently had a chance to play with CentOS 6.7 server. My task was to re-install(reconfigure) run a Django site on it. Actually it was done by my around 2 years before. Then some system admin guy updated the system (especially PHP related stuff), and essentially he screwed up my (ie. I worked tm.) django website. I had lost the track on installing those things. So I would like to share my experience on reaching the point.

First of all I tried to locate the apache config file. My initial thoughts were about this file.
/etc/apache2/apache.conf
I roamed here and there, to get some idea about the system.Here are my commands which I use these sort of tasks.
which httpd
which apache
which apache2
type httpd
locate apache.conf
locate httpd.conf
whatis httpd 
 Sure, You should use man pages to get more info of these commands like which,type and locate. Try `man man` to know what man is.

Anyway, I got some ideas regarding where the conf files lies, especially with the help of locate command

I also had used below command to find CentOS version.
cat /etc/redhat-release

Since, I found some more useful commands from the internet those helped me to get an hint to the problem.  The most useful one in my case was
/etc/init.d/httpd status
This command gave me the hint, the wsgi module was not in the new apache.

Advise

You should use either locate, whatis, type, which etc to get relevant info.
Using file would be nice to check the file exists or not. See
file /path/to/file

Install Python

Now, I checked version of python. It is 2.6.6 in that server. I decided to install Python-2.7 as the site was developed against it.

I did refer this article to get an idea
http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/

In my case these were the relevant parts.
# install essential dependencies
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel  sqlite-devel \
 readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

# Python 2.7.6:
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz
tar xf Python-2.7.6.tar.xz
cd Python-2.7.6
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
# altinstall make python available on as python2.7,
# leaving existing python,python2,python2.6
# so it won't break anything existing
make && make altinstall

# Install pip
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python2.7 ez_setup.py
easy_install-2.7 pip

# It's a good idea to install virtualenvwrapper
pip2.7 install virtualenvwrapper

If you are interested in virtualenvwrapper, you must read their docs. It's an excellent doc. See http://virtualenvwrapper.readthedocs.org/en/latest/

Install WSGI

 First of all, I refered this link,
cd ~
wget http://modwsgi.googlecode.com/files/mod_wsgi-3.2.tar.gz
gzip -dc mod_wsgi-3.2.tar.gz | tar xf -
cd mod_wsgi-3.2
./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/bin/python2.7
make && make install 
 

Include the configuration file


After compiling the module, 
I was given the path to where it was located (/usr/lib/httpd/modules/mod_wsgi.so).

I logged in to WHM
WHM -> Server Configuration -> Apache Setup -> Include Editor
to add the following line to load the module
LoadModule wsgi_module /usr/lib/httpd/modules/mod_wsgi.so

Connecting django app

In order to connect django app you have to create an apache conf file in 

mkdir -p /usr/local/apache/conf/userdata/std/2/fcabi/fcabi.net/

The above path may not be same for you. Try ls /usr/local/apache/conf/userdata/std/. It may be 2 or something like 2_2. In my case it was 2_2.

So I used some thing like this
mkdir -p /usr/local/apache/conf/userdata/std/2_2/username/mysite.com>/
In above username was the one I created with CPanel for this site and mysite.com was the address of my site.

Now, create config file
vi /usr/local/apache/conf/userdata/std/2_2/myuser/mysite.net/mysite.conf

ServerAdmin support@mysite.com
Alias /media/ /srv/Test/app/mysite/media/
Alias /static/ /srv/Test/app/mysite/static/
Alias /robots.txt /srv/Test/app/mysite/robots.txt
Alias /favicon.ico /srv/Test/app/mysite/static/images/favicon.ico

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

WSGIDaemonProcess mysite.com user=myuser group=mygroup
WSGIProcessGroup mysite.com
WSGIScriptAlias / /srv/Test/app/conf/apache/mysite.wsgi

<Directory /srv/Test/app/mysite/media>
Order deny,allow
Allow from all
</Directory>

<Directory /srv/Test/app/mysite/static>
Order deny,allow
Allow from all
</Directory>

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

On reading through above you get the idea of apache configuration. We specify various things like wsgi file, static directory, media directory etc. You must replace them with your own.

Now create the wsgi file. In my case wsgi was in
/srv/Test/app/conf/apache/mysite.wsgi 

In my case, the wsgi file is almost the same as the one provided by django
ie. the file in mysite/wsgi.py (in settings folder).

But a little modification to include virtualenv settings.

vi /srv/Test/app/conf/apache/mysite.wsgi
#
import os
import sys

# Activate venv
activate_this = '/home/{}/.virtualenvs/mysiteenv/bin/activate_this.py'.format('myuser')
execfile(activate_this, dict(__file__=activate_this))

os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

http://virtualenv.readthedocs.org/en/latest/userguide.html#using-virtualenv-without-bin-python

Look at the two lines after # Activate venv those lines determine the venv.
Since I use virtualenvwrapper.
I usually activate virtualenv  by either
workon mysiteenv
or
source env/bin/activate

Then I type which python which resulsts some thing like ~/.virtualenvs/mysiteenv/python. Now I replace python with activate_this.py. So ~/.virtualenvs/mysiteenv/activate_this.py.

Rebuild the config file and restart apache

It is nice check for syntax errors in apache config file first.
/usr/sbin/apachectl configtest
#or
/usr/sbin/apachectl -t
#or may be even
 
httpd -t
httpd configtest


You can use following commands to rebuild the configuration file.
/usr/local/cpanel/bin/build_apache_con

/usr/sbin/apachectl restart

That's it. I have provided enough information, links and debugging tips. Hope you enjoy it.

Popular posts from this blog

How i changed my keyboard's Space key to Space and Ctrl in Ubuntu 14.04

The thing i wanted was to change my keyboard's behavior like this. When i press Space alone it is Space key. If i pressed with some other key, it is Ctrl. That is Space+X gives Ctrl+X. Install needed libs sudo apt-get install libx11-dev libxtst-dev Get the source git clone https://github.com/r0adrunner/Space2Ctrl Install cd Space2Ctrl make sudo make install How to use? Start by typing this in a terminal s2cctl start And now Stop by s2cctl stop How do i use it? I added it to ~/.bash_login. So when i login to computer it works. Reference https://github.com/r0adrunner/Space2Ctrl

How to run android apk in your Google Chrome browser with Google's ARC

Google's plan on merging android with ChromeOS is on the way. What you need is 1. Google Chrome 41+. It works on PC,Linux,Mac. Or Chromebook on Chrome Version 41+. 2. You apk files to run 3. The ARC Welder app 1. To get chrome https://www.google.com/intl/en/chrome/browser/desktop/index.html In ubuntu/debian you can install *.deb file by sudo dpkg -i google*.deb In fedora/ RedHat Linux  rpm -ivh google*.rpm 2. To get your apk files Either use https://play.google.com/store/apps/details?id=mobi.infolife.appbackup Or some sites like http://apps.evozi.com/apk-downloader/ 3. Go to The ARC Welder app .And install it from Google Chrome browser. I used this game (2048) for testing. http://apps.evozi.com/apk-downloader/?id=com.digiplex.game This is the result i got. NB:- There is a limitation. It's is only possible to do one app at time I tested on Ubuntu 14.04 and Fedora 21. Reference:- https://developer.chrome.com/apps/getstart