Project

General

Profile

Actions

MAUSDjangoApache » History » Revision 21

« Previous | Revision 21/29 (diff) | Next »
Jackson, Mike, 06 March 2012 14:51


Deploying the MAUS web-front end

This page describes how to deploy and run the MAUS web front-end.

  • The web front-end can either be run in the Django lightweight web server or under Apache 2.0. The latter is recommended for production environments.
  • The MAUS software is not required to use the MAUS web front-end. However, if you do not have MAUS then you will need to install Python 2.7 and related packages.

Deploy Python 2.7 and related packages

If you do not have and do not want to download the MAUS software (which comes with Python 2.7 and Python easy_install) then keep reading.

Otherwise, go down to the next section, "Deploy ImageMagick".

For full information on deploying Python 2.7, see http://www.python.org/getit/releases/2.7/

To install Python 2.7.2 via building from it's source code:

  • Log in as super-user e.g. using sudo su - or su.
  • Get Python 2.7 source distribution and unpack it,
    $ wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
    $ mv Python-2.7.2.tgz Python-2.7.2.tar.gz
    $ gunzip Python-2.7.2.tar.gz 
    $ tar -xf Python-2.7.2.tar 
    $ cd Python-2.7.2
    
  • Configure,
    $ ./configure
    
  • Build,
    $ make
    
  • Install,
    $ make install
    

Deploy Python setuptools

Now, install the Python setup tools (0.6c11) for Python 2.7. For full information, see http://pypi.python.org/pypi/setuptools.

  • Log in as super-user e.g. using sudo su - or su.
  • Get the setuptools egg,
    $ wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
    
  • Execute the egg,
    $ sh setuptools-0.6c11-py2.7.egg 
    

This will install the Python easy_install tool.

Deploy ImageMagick

The ImageMagick library is used to convert between image types in the MAUS web-front end. For full information see http://www.imagemagick.org/script/index.php

Check to see if you already have this as it is a commonly deployed tool,

$ /usr/local/bin/convert -h
Version: ImageMagick 6.7.4-0 2011-12-13 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP    

If so then go down to the next section on installing Django, MagickWand and PIL.

To install ImageMagick 6.7.4,

  • Log in as super-user e.g. using sudo su - or su.
  • Get and unpack ImageMagick,
    $ wget http://www.imagemagick.org/download/ImageMagick.tar.gz
    $ gunzip ImageMagick.tar.gz
    $ tar -xf ImageMagick.tar
    $ cd ImageMagick-6.7.4-0/
    
  • Configure,
    $ ./configure
    
  • Make,
    $ make
    
  • Install,
    $ make install
    
    • This places libraries in /usr/local/lib.
  • Cache the libraries,
    $ ldconfig /usr/local/lib
    
    • This avoids problems with libraries not being found by Python's magickwand library.
  • Check,
    $ /usr/local/bin/convert -h
    Version: ImageMagick 6.7.4-0 2011-12-13 Q16 http://www.imagemagick.org
    Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
    Features: OpenMP    
    

Deploy Django, MagickWand and Pyton Image Library Python packages

Install these Python packages using easy_install:

  • If you do NOT have and do NOT want to download the MAUS software and have deployed Python 2.7 as a super-user then, first log in as super-user e.g. using sudo su - or su.
  • Run,
    $ easy_install django
    $ easy_install magickwand
    $ easy_install pil
    
Check MagickWand,
$ python
$ import magickwand
$ from magickwand.image import Image
...
  • If you get an error like,
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "build/bdist.linux-i686/egg/magickwand/image.py", line 2, in <module>
      File "build/bdist.linux-i686/egg/magickwand/api/__init__.py", line 1, in <module>
        #
      File "build/bdist.linux-i686/egg/magickwand/api/lib.py", line 11, in <module>
      File "/home/user/maus/third_party/install/lib/python2.7/ctypes/__init__.py", 
      line 353, in __init__ self._handle = _dlopen(self._name, mode)
    OSError: libMagickWand.so.5: cannot open shared object file: 
     No such file or directory
    
  • then run ldconfig as described in the instructions for ImageMagick above.

Deploy Apache 2.2

Apache 2.2 (http://httpd.apache.org/) is an HTTP server. For full deployment information, see http://httpd.apache.org/docs/current/install.html

If you do not want to use Apache 2 but are happy to use the stand-alone lightweight Django web server then go down to Deploy the MAUS Django web front-end.

  • Log in as super-user e.g. using sudo su - or su.
  • Download,
    $ wget http://mirrors.ukfast.co.uk/sites/ftp.apache.org//httpd/httpd-2.2.22.tar.gz
    
  • Extract,
    $ gzip -d httpd-2.2.22.tar.gz 
    $ tar xvf httpd-2.2.22.tar
    $ cd httpd-2.2.22
    
  • Configure,
    $ ./configure
    
    • This uses a default deployment directory of /usr/local/apache2.
  • Compile,
    $ make 
    
  • Install,
    $ make install 
    
  • Start-up server,
    $ /usr/local/apache2/bin/apachectl -k start
    
    • If you get an error like,
      (98)Address already in use: make_sock: could not bind to address [::]:80
      (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
      no listening sockets available, shutting down
      Unable to open logs
      
    • Then edit /usr/local/apache2/conf/httpd.conf,
      $ xemacs /usr/local/apache2/conf/httpd.conf 
      
    • and change,
      Listen 80 
      
    • to a port that is not in use e.g.
      Listen 9090
      
    • and start Apache,
      $ /usr/local/apache2/bin/apachectl -k start
      
  • Browse to http://localhost:8080 (or whatever port you specified above) and you should see It works!"

Useful files:

  • Configuration: /usr/local/apache2/conf/httpd.conf
  • Error log: /usr/local/apache2/logs/error_log

mod_wsgi deployment

mod_wsgi (http://code.google.com/p/modwsgi/) is an Apache module allowing the hosting of Python applications which suppport Python's WSGI (Web Server Gateway Interface). For full deployment information, see http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide, http://code.google.com/p/modwsgi/wiki/InstallationInstructions and http://code.google.com/p/modwsgi/wiki/InstallationIssues

  • Download latest release (July 2010),
    $ wget http://modwsgi.googlecode.com/files/mod_wsgi-3.3.tar.gz
    
  • Extract,
    $ gunzip mod_wsgi-3.3.tar.gz 
    $ tar -xf mod_wsgi-3.3.tar
    $ cd mod_wsgi-3.3
    
  • Set Python library path.
    • If you have Python 2.7 installed and it is your default Python then skip this step.
    • If you are using Python 2.7 in the MAUS software then set LD_PYTHON_PATH to the location of its libraries e.g. if using Python bundled with MAUS, set:
      $ export LD_LIBRARY_PATH=/home/user/maus/third_party/install/lib/
      
  • Configure,
    • If you have Python 2.7 installed and it is your default Python then run,
      $ ./configure --with-apxs=/usr/local/apache2/bin/apxs
      
    • If you are using Python 2.7 in the MAUS software you need to provide the path, so run,
      $ ./configure --with-apxs=/usr/local/apache2/bin/apxs
        --with-python=/home/user/maus/third_party/install/bin/python2.7
      
    • If you get an error like:
      /home/user/maus/third_party/install/bin/python2.7: error while loading 
      shared libraries: libpython2.7.so.1.0: cannot open shared object file: 
      No such file or directory
      
    • Then set the LD_LIBRARY_PATH as above.
    • If you get an error like:
      checking for apxs2... no
      checking for apxs... no
      checking Apache version... ./configure: line 1704: apxs: command not found
      ./configure: line 1704: apxs: command not found
      ./configure: line 1705: apxs: command not found
      ./configure: line 1708: /: is a directory
      
      checking for python... /home/user/maus/third_party/install/bin/python
      ./configure: line 1877: apxs: command not found
      configure: creating ./config.status
      config.status: error: cannot find input file: Makefile.in
      
    • Then you forgot to provide the path to Apache's apxs command,
  • Compile,
    $ make
    
  • Install,
    $ make install
    
  • A mod_wsgi.so library is installed in /usr/local/apache2/modules.
  • Configure Apache, edit /usr/local/apache2/conf/httpd.conf,
    $ xemacs /usr/local/apache2/conf/httpd.conf 
    
  • and add,
    LoadModule wsgi_module modules/mod_wsgi.so
    
  • Set the LD_LIBRARY_PATH in the Apache environment.
    • If you have Python 2.7 installed and it is your default Python then skip this step.
    • If you are using Python 2.7 in the MAUS software then set LD_PYTHON_PATH to the location of its libraries e.g. if using Python bundled with MAUS, then:
      • Edit /usr/local/apache2/bin/envvars and add a line to set the Python library path e.g.
        LD_LIBRARY_PATH="/home/user/maus/third_party/install/lib/:$LD_LIBRARY_PATH" 
        
      • Ensure that the permissions in this path allow group and world read and execute permission (755) e.g.:
        $ ls -l /home
        drwxr-xr-x 26 user group 4096 Mar  6 10:08 user
        
    • If not then set these,
      $ chmod go+rx /home/user
      
  • Restart Apache,
    $ /usr/local/apache2/bin/apachectl restart
    
  • If all is well you should see, in /usr/local/apache2/logs/error_log a line like,
    [Tue Feb 07 18:50:37 2012] [notice] Apache/2.2.22 (Unix) mod_wsgi/3.3 
    Python/2.7.2 configured -- resuming normal operations
    
  • If you see an error like,
    [Tue Feb 07 18:46:40 2012] [notice] SIGHUP received.  Attempting to restart
    httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: Cannot 
    load /usr/local/apache2/modules/mod_wsgi.so into server: 
    libpython2.7.so.1.0: cannot open shared object file: No such file or directory
    
    • then you have to set the LD_LIBRARY_PATH as above.
  • If you see an error like,
    Could not find platform independent libraries <prefix>
    Could not find platform dependent libraries <exec_prefix>
    Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
    ImportError: No module named site
    
    • then it is likely you did not set the file permissions for the directory in which Python is as described above.
  • Clean up,
    $ make clean
    

To check your installation (following http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation),

  • List server information,
    $ /usr/local/apache2/bin/httpd  -V
    Server version: Apache/2.2.22 (Unix)
    ...
    Server MPM:     Prefork
      threaded:     no
        forked:     yes (variable process count)
    Server compiled with....
     -D APACHE_MPM_DIR="server/mpm/prefork" 
    ...
    
    • Important information is the version and prefork settings,
  • List compiled-in modules,
    $ /usr/local/apache2/bin/httpd  -l
    Compiled in modules:
    ...
      prefork.c
    
    • You should see prefork.c.
  • List dynamically-loaded modules,
    $ /usr/local/apache2/bin/httpd  -M
     mpm_prefork_module (static)
     ...
     wsgi_module (shared)
     ...
    
    • You should see wsgi_module.
    • If this fails with,
      httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: 
      Cannot load /usr/local/apache2/modules/mod_wsgi.so into server: 
      libpython2.7.so.1.0: cannot open shared object file: No such file or directory
      
    • Then set your LD_LIBRARY_PATH as above and try again,
      $ export LD_LIBRARY_PATH="/home/user/maus/third_party/install/lib/:$LD_LIBRARY_PATH" 
      $ /usr/local/apache2/bin/httpd -M
      Loaded Modules:
      ...
      
  • List modules linked to by mod_wsgi:
    $ ldd /usr/local/apache2/modules/mod_wsgi.so
    ...
    libpython2.7.so.1.0 => /home/user/maus/third_party/install/lib/libpython2.7.so.1.0 
    (0x00110000)
    ...
    
    • You should see the link to your Python library.

Deploy the MAUS Django web front-end

  • Check-out the MAUS Django code,
    $ bzr branch -v lp:~michaelj-h/maus-apps/devel maus-apps
    
  • Set up environment,
    $ cd maus-apps
    $ ./configure
    $ ./install.sh
    
  • Copy a couple of sample images,
    $ cp images/* media/raw
    
  • Log in as super-user e.g. using sudo su - or su.
  • Edit Apache 2.2 environment, so it has access to the MAUS and MAUS web-front end environments (in particular all the Python libraries that have been easy_installed):
    $ xemacs -nw /usr/local/apache2/bin/envvars
    
  • Add, changing to use your own paths,
    source /home/user/maus/env.sh 
    source /home/user/maus-apps/env.sh
    
  • Ensure that the permissions in to your paths allow group and world read and execute permission (755) e.g.:
    $ ls -l /home
    drwxr-xr-x 26 user group 4096 Mar  6 10:08 user
    
    • If not then set these,
      $ chmod go+rx /home/michaelj
      
  • Edit Apache 2 configuration,
    $ xemacs -nw /usr/local/apache2/conf/httpd.conf
    

    Add,
    WSGIScriptAlias / ${MAUS_WEB_DIR}/apache/django.wsgi  
    
    # Location of django.wsgi 
    <Directory ${MAUS_WEB_DIR}/apache> 
    Order deny,allow  
    Allow from all  
    </Directory> 
    
  • where:
    • / specifies the root URL - so all URL requests will be directed to Django.
    • /... - location of WSGI file within the MAUS Django project.
  • Restart Apache 2.2,
    $ /usr/local/apache2/bin/apachectl restart
    
  • Test,

For general information on Django deployment under Apache 2.2/mod_wsgi, see https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/ and http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango.

Updated by Jackson, Mike over 11 years ago · 21 revisions