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.
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.
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
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.
If you are interested in virtualenvwrapper, you must read their docs. It's an excellent doc. See http://virtualenvwrapper.readthedocs.org/en/latest/
After compiling the module,
I was given the path to where it was located (/usr/lib/httpd/modules/mod_wsgi.so).First of all I tried to locate the apache config file. My initial thoughts were about this file.
/etc/apache2/apache.confI 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 httpdSure, 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 statusThis 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 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 mysiteenvor
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.