SlideShare una empresa de Scribd logo
1 de 36
GETTING
 STARTED
   WITH
MOD_WSGI
Graham Dumpleton
   PyCon Australia
     June 2010
WHAT IS WSGI?
• Specification
            for an interface between web servers and
 Python web applications or frameworks.

• Intended to promote web application portability across a
 variety of web servers.

• PEP   333 - http://www.python.org/dev/peps/pep-0333

• More   Information - http://www.wsgi.org
WHAT IS MOD_WSGI?

• An Apache module to support hosting WSGI applications in
 conjunction with the Apache web server.

• Interceptsrequests to designated URLs and passes requests
 off to the WSGI application specified in the target WSGI script
 file that the URL maps to.
HELLO WORLD
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
MAPPING A URL

• Mapping WSGI   application at root of web server.
 WSGIScriptAlias / /home/grumpy/example-1/hello.wsgi


• Mapping WSGI   application at sub URL of web server.
 WSGIScriptAlias /suburl /home/grumpy/example-1/hello.wsgi
FORBIDDEN




client denied by server configuration: /home/grumpy/example-1/hello.wsgi
DENY FROM ALL

• By   default Apache denies access to everything.
 <Directory />
 Order deny,allow
 Deny from all
 </Directory>


• Thus   we need to open up access to our script.
 <Directory /home/grumpy/example-1>
 Order deny,allow
 Allow from all
 </Directory>
FORBIDDEN




(13)Permission denied: access to / denied
DRWXR-X---
• Apache    server child processes runs as a special user.

• The Apacheuser must be able to search directories down to
 where the WSGI script file is located.

• User
     account home directories often have permissions of
 drwxr-x--- and access is thereby restricted.

• Make   directories accessable to others.
 chmod o+rx /home/grumpy


• Better   still, don’t put WSGI script files under home directories.
INTERNAL SERVER ERROR




        (13)Permission denied: mod_wsgi (pid=666, process='',
application='tests.example.com|'): Call to fopen() failed for '/home/
                    grumpy/example-1/echo.wsgi'.
-RW-R-----

• Apache   server child processes runs as a special user.

• The Apache   user must be able to read the WSGI script file.

•A user account umask of 0007 will result in files being created
 with permissions of -rw-r----- and access is thereby restricted.

• Make   files readable to others.
 chmod o+r /home/grumpy/example-1/hello.wsgi
SUCCESS
DJANGO APPLICATION
• Install   Django.

• Create     an empty project.
  mkdir /home/grumpy/example-2
  cd /home/grumpy/example-2

  django-admin.py startproject mysite


• Run   the Django development server.
  python mysite/manage.py runserver
SUCCESS
DJANGO WSGI SCRIPT

import os
import sys

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
DJANGO APACHE CONFIG

WSGIScriptAlias / /home/grumpy/example-2/apache/mysite.wsgi

<Directory /home/grumpy/example-2/apache>
Order deny,allow
Allow from all
</Directory>
INTERNAL SERVER ERROR




 raise ImportError("Could not import settings '%s' (Is it on sys.path?
    Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e))
  ImportError: Could not import settings 'mysite.settings' (Is it on
sys.path? Does it have syntax errors?): No module named mysite.settings
SYS.PATH
• Pythonmodules/packages are not imported relative to current
 working directory.

• Python modules/packages are not imported relative to the
 directory containing the WSGI script file.

• The  PYTHONPATH of the user who owns the WSGI script
 file is not consulted.

• Therefore
          must explicitly designate directories to search for
 Python modules/packages.
SYS.PATH.INSERT()

import os
import sys

root = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, root)

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
SUCCESS
VIRTUAL ENVIRONMENT

• Create     and activate virtual environment
  cd /home/grumpy/example-2
  virtualenv --no-site-packages environ
  source environ/bin/activate


• Install   Django and other required packages.
  easy_install Django
SUCCESS
INTERNAL SERVER ERROR




 ImportError: No module named django.core.handlers.wsgi
SYS.PATH.INSERT()

import os
import sys

root = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, root)

packages = os.path.join(root,
    'environ/lib/python2.6/site-packages'
sys.path.insert(0, packages)

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
SITE.ADDSITEDIR()
import os
import sys
import site

root = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, root)

packages = os.path.join(root,
    'environ/lib/python2.6/site-packages'
site.addsitedir(packages)

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
ACTIVATE THIS
import os
import sys

root = os.path.join(os.path.dirname(__file__), '..')
sys.path.insert(0, root)

activate_this = os.path.join(root,
    'environ/bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))

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

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
SITE-PACKAGES
• Using sys.path.insert() allows directory to be placed first,
 but .pth files do not get processed.

• Using
      site.addsitedir() results in .pth files being processed, but
 new directories get placed last.

• Using activate_this.py results in .pth files being processed and
 sys.path reordered such that new directories get placed first.

• Value
      of sys.prefix is however altered by activate_this.py and
 no certainty over whether this may cause later issues.
SUCCESS
DJANGO ADMIN PAGES

• Add ‘django.contrib.admin’ to   INSTALLED_APPS in the file
 ‘mysite/settings.py’.

• Add  (r'^admin/', include(admin.site.urls)) to 'urlpatterns’ in the
 file ‘mysite/urls.py’.

• Configure ‘DATABASES’ in     the file ‘mysite/settings.py’.

• Synchronise   database model.
 python mysite/manage.py syncdb
SUCCESS
NOT FOUND
STATIC MEDIA FILES

• Django’s
         static media files are only served automatically by the
 Django development server and not when using Django
 WSGIHandler object.

• Mustmanually map any static media files to appropriate sub
 URL in Apache.
ALLOW FROM ALL
WSGIScriptAlias / /home/grumpy/example-2/apache/mysite.wsgi

<Directory /home/grumpy/example-2/apache>
Order deny,allow
Allow from all
</Directory>

Alias /media/ /home/grumpy/example-2/media/

<Directory /home/grumpy/example-2/media/>
Order deny,allow
Allow from all
</Directory>
SUCCESS
SUMMARY OF MAIN POINTS

• Need   to tell Apache what resources it should allow access to.

• Apache   user needs access to WSGI script file/directory.

• Application   user needs read access to source code.

• Application   user needs to be able to write to data directories.

• Python   needs to know where to search for modules/packages.
ONLINE RESOURCES
• The   mod_wsgi documentation.

 http://www.modwsgi.org

 http://code.google.com/p/modwsgi/wiki/WhereToGetHelp
 http://code.google.com/p/modwsgi/wiki/VirtualEnvironments
 http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

• Personal   blog posts.

 http://blog.dscpl.com.au

Más contenido relacionado

Similar a Getting Started with mod_wsgi: A Guide to Configuring Apache for Python Web Apps

Deploying
DeployingDeploying
Deployingsoon
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and MaintenanceJazkarta, Inc.
 
“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.Graham Dumpleton
 
Deploying Django with Ansible
Deploying Django with AnsibleDeploying Django with Ansible
Deploying Django with Ansibleandrewmirskynet
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabricandymccurdy
 
Manage WordPress with Awesome using wp cli
Manage WordPress with Awesome using wp cliManage WordPress with Awesome using wp cli
Manage WordPress with Awesome using wp cliGetSource
 
Provisioning with Puppet
Provisioning with PuppetProvisioning with Puppet
Provisioning with PuppetJoe Ray
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture IntroductionHaiqi Chen
 
Deployment with Fabric
Deployment with FabricDeployment with Fabric
Deployment with Fabricandymccurdy
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleStein Inge Morisbak
 
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2Yros
 
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context ConstraintsAlessandro Arrichiello
 
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cli
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cliWordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cli
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cliGetSource
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis OverviewLeo Lorieri
 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopMark Rackley
 
Vagrant WordCamp Hamilton
Vagrant  WordCamp HamiltonVagrant  WordCamp Hamilton
Vagrant WordCamp HamiltonPaul Bearne
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesAlfresco Software
 

Similar a Getting Started with mod_wsgi: A Guide to Configuring Apache for Python Web Apps (20)

Deploying
DeployingDeploying
Deploying
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.
 
Django
DjangoDjango
Django
 
Deploying Django with Ansible
Deploying Django with AnsibleDeploying Django with Ansible
Deploying Django with Ansible
 
Python Deployment with Fabric
Python Deployment with FabricPython Deployment with Fabric
Python Deployment with Fabric
 
WPDay Bologna 2013
WPDay Bologna 2013WPDay Bologna 2013
WPDay Bologna 2013
 
Oracle API Gateway Installation
Oracle API Gateway InstallationOracle API Gateway Installation
Oracle API Gateway Installation
 
Manage WordPress with Awesome using wp cli
Manage WordPress with Awesome using wp cliManage WordPress with Awesome using wp cli
Manage WordPress with Awesome using wp cli
 
Provisioning with Puppet
Provisioning with PuppetProvisioning with Puppet
Provisioning with Puppet
 
Django Architecture Introduction
Django Architecture IntroductionDjango Architecture Introduction
Django Architecture Introduction
 
Deployment with Fabric
Deployment with FabricDeployment with Fabric
Deployment with Fabric
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
 
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
 
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cli
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cliWordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cli
WordCamp Vancouver 2012 - Manage WordPress with Awesome using wp-cli
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
Introduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint WorkshopIntroduction to Client Side Dev in SharePoint Workshop
Introduction to Client Side Dev in SharePoint Workshop
 
Vagrant WordCamp Hamilton
Vagrant  WordCamp HamiltonVagrant  WordCamp Hamilton
Vagrant WordCamp Hamilton
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 

Más de Graham Dumpleton

Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Graham Dumpleton
 
Data analytics in the cloud with Jupyter notebooks.
Data analytics in the cloud with Jupyter notebooks.Data analytics in the cloud with Jupyter notebooks.
Data analytics in the cloud with Jupyter notebooks.Graham Dumpleton
 
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Graham Dumpleton
 
OpenShift, Docker, Kubernetes: The next generation of PaaS
OpenShift, Docker, Kubernetes: The next generation of PaaSOpenShift, Docker, Kubernetes: The next generation of PaaS
OpenShift, Docker, Kubernetes: The next generation of PaaSGraham Dumpleton
 
Automated Image Builds in OpenShift and Kubernetes
Automated Image Builds in OpenShift and KubernetesAutomated Image Builds in OpenShift and Kubernetes
Automated Image Builds in OpenShift and KubernetesGraham Dumpleton
 
PyCon US 2013 Making Apache suck less for hosting Python web applications
PyCon US 2013 Making Apache suck less for hosting Python web applicationsPyCon US 2013 Making Apache suck less for hosting Python web applications
PyCon US 2013 Making Apache suck less for hosting Python web applicationsGraham Dumpleton
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2Graham Dumpleton
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsGraham Dumpleton
 
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
PyCon US 2012 - Web Server Bottlenecks and Performance TuningPyCon US 2012 - Web Server Bottlenecks and Performance Tuning
PyCon US 2012 - Web Server Bottlenecks and Performance TuningGraham Dumpleton
 
DjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicDjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicGraham Dumpleton
 

Más de Graham Dumpleton (11)

Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.
 
Not Tom Eastman
Not Tom EastmanNot Tom Eastman
Not Tom Eastman
 
Data analytics in the cloud with Jupyter notebooks.
Data analytics in the cloud with Jupyter notebooks.Data analytics in the cloud with Jupyter notebooks.
Data analytics in the cloud with Jupyter notebooks.
 
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
Hear no evil, see no evil, patch no evil: Or, how to monkey-patch safely.
 
OpenShift, Docker, Kubernetes: The next generation of PaaS
OpenShift, Docker, Kubernetes: The next generation of PaaSOpenShift, Docker, Kubernetes: The next generation of PaaS
OpenShift, Docker, Kubernetes: The next generation of PaaS
 
Automated Image Builds in OpenShift and Kubernetes
Automated Image Builds in OpenShift and KubernetesAutomated Image Builds in OpenShift and Kubernetes
Automated Image Builds in OpenShift and Kubernetes
 
PyCon US 2013 Making Apache suck less for hosting Python web applications
PyCon US 2013 Making Apache suck less for hosting Python web applicationsPyCon US 2013 Making Apache suck less for hosting Python web applications
PyCon US 2013 Making Apache suck less for hosting Python web applications
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
 
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
PyCon US 2012 - Web Server Bottlenecks and Performance TuningPyCon US 2012 - Web Server Bottlenecks and Performance Tuning
PyCon US 2012 - Web Server Bottlenecks and Performance Tuning
 
DjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicDjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New Relic
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 

Getting Started with mod_wsgi: A Guide to Configuring Apache for Python Web Apps

  • 1. GETTING STARTED WITH MOD_WSGI Graham Dumpleton PyCon Australia June 2010
  • 2. WHAT IS WSGI? • Specification for an interface between web servers and Python web applications or frameworks. • Intended to promote web application portability across a variety of web servers. • PEP 333 - http://www.python.org/dev/peps/pep-0333 • More Information - http://www.wsgi.org
  • 3. WHAT IS MOD_WSGI? • An Apache module to support hosting WSGI applications in conjunction with the Apache web server. • Interceptsrequests to designated URLs and passes requests off to the WSGI application specified in the target WSGI script file that the URL maps to.
  • 4. HELLO WORLD def application(environ, start_response): status = '200 OK' output = 'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]
  • 5. MAPPING A URL • Mapping WSGI application at root of web server. WSGIScriptAlias / /home/grumpy/example-1/hello.wsgi • Mapping WSGI application at sub URL of web server. WSGIScriptAlias /suburl /home/grumpy/example-1/hello.wsgi
  • 6. FORBIDDEN client denied by server configuration: /home/grumpy/example-1/hello.wsgi
  • 7. DENY FROM ALL • By default Apache denies access to everything. <Directory /> Order deny,allow Deny from all </Directory> • Thus we need to open up access to our script. <Directory /home/grumpy/example-1> Order deny,allow Allow from all </Directory>
  • 9. DRWXR-X--- • Apache server child processes runs as a special user. • The Apacheuser must be able to search directories down to where the WSGI script file is located. • User account home directories often have permissions of drwxr-x--- and access is thereby restricted. • Make directories accessable to others. chmod o+rx /home/grumpy • Better still, don’t put WSGI script files under home directories.
  • 10. INTERNAL SERVER ERROR (13)Permission denied: mod_wsgi (pid=666, process='', application='tests.example.com|'): Call to fopen() failed for '/home/ grumpy/example-1/echo.wsgi'.
  • 11. -RW-R----- • Apache server child processes runs as a special user. • The Apache user must be able to read the WSGI script file. •A user account umask of 0007 will result in files being created with permissions of -rw-r----- and access is thereby restricted. • Make files readable to others. chmod o+r /home/grumpy/example-1/hello.wsgi
  • 13. DJANGO APPLICATION • Install Django. • Create an empty project. mkdir /home/grumpy/example-2 cd /home/grumpy/example-2 django-admin.py startproject mysite • Run the Django development server. python mysite/manage.py runserver
  • 15. DJANGO WSGI SCRIPT import os import sys os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
  • 16. DJANGO APACHE CONFIG WSGIScriptAlias / /home/grumpy/example-2/apache/mysite.wsgi <Directory /home/grumpy/example-2/apache> Order deny,allow Allow from all </Directory>
  • 17. INTERNAL SERVER ERROR raise ImportError("Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)) ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Does it have syntax errors?): No module named mysite.settings
  • 18. SYS.PATH • Pythonmodules/packages are not imported relative to current working directory. • Python modules/packages are not imported relative to the directory containing the WSGI script file. • The PYTHONPATH of the user who owns the WSGI script file is not consulted. • Therefore must explicitly designate directories to search for Python modules/packages.
  • 19. SYS.PATH.INSERT() import os import sys root = os.path.join(os.path.dirname(__file__), '..') sys.path.insert(0, root) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
  • 21. VIRTUAL ENVIRONMENT • Create and activate virtual environment cd /home/grumpy/example-2 virtualenv --no-site-packages environ source environ/bin/activate • Install Django and other required packages. easy_install Django
  • 23. INTERNAL SERVER ERROR ImportError: No module named django.core.handlers.wsgi
  • 24. SYS.PATH.INSERT() import os import sys root = os.path.join(os.path.dirname(__file__), '..') sys.path.insert(0, root) packages = os.path.join(root, 'environ/lib/python2.6/site-packages' sys.path.insert(0, packages) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
  • 25. SITE.ADDSITEDIR() import os import sys import site root = os.path.join(os.path.dirname(__file__), '..') sys.path.insert(0, root) packages = os.path.join(root, 'environ/lib/python2.6/site-packages' site.addsitedir(packages) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
  • 26. ACTIVATE THIS import os import sys root = os.path.join(os.path.dirname(__file__), '..') sys.path.insert(0, root) activate_this = os.path.join(root, 'environ/bin/activate_this.py') execfile(activate_this, dict(__file__=activate_this)) os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
  • 27. SITE-PACKAGES • Using sys.path.insert() allows directory to be placed first, but .pth files do not get processed. • Using site.addsitedir() results in .pth files being processed, but new directories get placed last. • Using activate_this.py results in .pth files being processed and sys.path reordered such that new directories get placed first. • Value of sys.prefix is however altered by activate_this.py and no certainty over whether this may cause later issues.
  • 29. DJANGO ADMIN PAGES • Add ‘django.contrib.admin’ to INSTALLED_APPS in the file ‘mysite/settings.py’. • Add (r'^admin/', include(admin.site.urls)) to 'urlpatterns’ in the file ‘mysite/urls.py’. • Configure ‘DATABASES’ in the file ‘mysite/settings.py’. • Synchronise database model. python mysite/manage.py syncdb
  • 32. STATIC MEDIA FILES • Django’s static media files are only served automatically by the Django development server and not when using Django WSGIHandler object. • Mustmanually map any static media files to appropriate sub URL in Apache.
  • 33. ALLOW FROM ALL WSGIScriptAlias / /home/grumpy/example-2/apache/mysite.wsgi <Directory /home/grumpy/example-2/apache> Order deny,allow Allow from all </Directory> Alias /media/ /home/grumpy/example-2/media/ <Directory /home/grumpy/example-2/media/> Order deny,allow Allow from all </Directory>
  • 35. SUMMARY OF MAIN POINTS • Need to tell Apache what resources it should allow access to. • Apache user needs access to WSGI script file/directory. • Application user needs read access to source code. • Application user needs to be able to write to data directories. • Python needs to know where to search for modules/packages.
  • 36. ONLINE RESOURCES • The mod_wsgi documentation. http://www.modwsgi.org http://code.google.com/p/modwsgi/wiki/WhereToGetHelp http://code.google.com/p/modwsgi/wiki/VirtualEnvironments http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode • Personal blog posts. http://blog.dscpl.com.au

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n