wiki:InstallationGuidelinesApacheModWSGI

Version 28 (modified by Fran Boon, 14 years ago) ( diff )

--

Installation on Apache with WSGI

This is what is used to host the Demo site & Trac

Also see InstallationGuidelinesLinux

File Permissions

chown www-data /path/to/web2py/applications/admin/cache
chown www-data /path/to/web2py/applications/admin/cron
chown www-data /path/to/web2py/applications/admin/databases
chown www-data /path/to/web2py/applications/admin/errors
chown www-data /path/to/web2py/applications/admin/languages
chown www-data /path/to/web2py/applications/admin/languages/*
chown www-data /path/to/web2py/applications/admin/sessions
chown www-data /path/to/web2py/applications/eden/cache
chown www-data /path/to/web2py/applications/eden/cron
chown www-data /path/to/web2py/applications/eden/databases
chown www-data /path/to/web2py/applications/eden/errors
chown www-data /path/to/web2py/applications/eden/languages
chown www-data /path/to/web2py/applications/eden/languages/*
chown www-data /path/to/web2py/applications/eden/sessions
chown www-data /path/to/web2py/applications/eden/static/img/markers
chown www-data /path/to/web2py/applications/eden/uploads

Cron

If running on a UNIX variant (as would be recommended) then suggest using the Native Cron

vim /etc/crontab
0-59/1 * * * * www-data cd /var/www/web2py/ && python web2py.py -C -D 1 >> /tmp/cron.output 2>&1

cp /var/www/web2py/options_std.py /var/www/web2py/options.py
vim /var/www/web2py/options.py
extcron = True

Ubuntu

apt-get install libapache2-mod-wsgi
a2enmod rewrite
a2enmod deflate
a2enmod headers
a2enmod expires
vim /etc/apache2/mods-enabled/wsgi.conf
    # Enable to allow Basic Authentication for WebServices
    WSGIPassAuthorization On
vim /etc/apache2/sites-available/eden

Refer to the following URLs for WSGI configuration tuning:

  • http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess
  • http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Memory_Constrained_VPS_Systems
    <VirtualHost ip.ip.ip.ip:80>
      ServerName demo.eden.sahanafoundation.org
      ServerAdmin webmaster@eden.sahanafoundation.org
      DocumentRoot /var/www/web2py/applications 
    
      WSGIScriptAlias / /var/www/web2py/wsgihandler.py
      ## Edit the process and the maximum-requests to reflect your RAM 
      WSGIDaemonProcess web2py user=www-data group=www-data home=/var/www/web2py processes=5 maximum-requests=50
    
      RewriteEngine On
      RewriteCond %{REQUEST_URI}    !/eden/(.*)
      RewriteRule /(.*) /eden/$1 [R]
    
      ### admin only accessible via SSH Tunnel
      <Location "/admin">
        SSLRequireSSL
      </Location>
      ### appadmin requires SSL
      <LocationMatch "^(/[\w_]*/appadmin/.*)">
        SSLRequireSSL
      </LocationMatch>
      ### static files do not need WSGI
      <LocationMatch "^(/[\w_]*/static/.*)">
        Order Allow,Deny
        Allow from all
      </LocationMatch>
      ### everything else goes over WSGI
      <Location "/">
        Order deny,allow
        Allow from all
        WSGIProcessGroup web2py
      </Location>
    
      ErrorLog /var/log/apache2/demo_error.log
      LogLevel warn
      CustomLog /var/log/apache2/demo_access.log combined
    </VirtualHost>
    
ln -s /etc/apache2/sites-available/eden /etc/apache2/sites-enabled/eden
/etc/init.d/apache2 force-reload

WSGI Installation comments: http://blog.dscpl.com.au/2009/08/problems-with-example-web2py.html

Another set of Ubuntu docs: http://www.web2pyslices.com/main/slices/take_slice/14

Apache mod_deflate & mod_expires

Optimise by using GZip & Expires:

  ### static files do not need WSGI
  <LocationMatch "^(/[\w_]*/static/.*)">
    Order Allow,Deny
    Allow from all

    SetOutputFilter DEFLATE
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    Header append Vary User-Agent env=!dont-vary

    ExpiresActive On
    ExpiresByType text/html "access plus 1 day"
    ExpiresByType text/javascript "access plus 1 week"
    ExpiresByType text/css "access plus 2 weeks"
    ExpiresByType image/ico "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
  </LocationMatch>

InstallationGuidelines

Note: See TracWiki for help on using the wiki.