In the future, I hope to update this post to also include a complete list of steps for getting setup with python’s webpy over lighttpd.
1. Install web.py
1.1. Install webpy with apt-get
sudo apt-get install python-webpy
1.2. Install webpy using easy_install using python setuptools
1.2.1. Install python setuptools (easy_install)
# 1.2.1.1. Using apt-get:
sudo apt-get install python-setuptools
# 1.2.1.2. Manually retrieving easy_install from the web using wget
wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
# 1.2.2. Now get the web.py egg using python’s easy_install
# This will put the python ‘web’ module in your python environment path
sudo easy_install web.py
1.3. Install webpy straight from git
# Or, get webpy straight from git
git clone git://github.com/webpy/webpy.git ln -s `pwd`/webpy/web .
2. Write Your Web.py App
Choose a directory where you would like your web.py python application to live. If my username is ‘mek’ and I want to name my project ‘project’, I might make a directory /home/sajee/project.
2.1. Make a directory for your web.py app to live
# Replace the word project in the path below with your desired project name
mkdir ~/project
cd ~/project # move into the project directory you have created
2.2. Create your application file using web.py
# this will create our application file ~/project/main.py
touch main.py
2.3. Open your application with your favourite editor
# Substitute “emacs -nw” with an editor of your choice: vim, nano, etc
emacs -nw main.py
2.4. Paste the following in your app file and save
import web
app_path = os.path.dirname(__file__)
sys.path.append(app_path)
if app_path: # Apache
os.chdir(app_path)
else: # CherryPy
app_path = os.getcwd()
urls = (
‘/(.*)’, ‘hello’
)
# WARNING
# web.debug = True and autoreload = True
# can mess up your session: I’ve personally experienced it
web.debug = False # You may wish to place this in a config file
app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc() # needed for running with apache as wsgi
class hello:
def GET(self, name):
if not name:
name = ‘World’
return ‘Hello, ‘ + name + ‘!’
if __name__ == “__main__”:
app.run()
2.4. (Optional) Setup static directory for imgs, css, js, etc
# Having a static directory allows you to serve static content without
# your webpy application trying to steal focus and parse the request
# This is especially important using the default CherryPy server.
# We’ll also handle this case in our apache config within:
# /etc/apache2/sites-available
mkdir ~/project/static
3. Install Apache2
3.1. Install apache and wsgi dependencies
sudo aptitude install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cer
# I like to also install python-dev (optional) to make sure I have
# python’s latest support files
sudo apt-get install python-dev
3.2. Install apache mod_wsgi and enable mod_wsgi + mod_rewrite
sudo aptitude install libapache2-mod-wsgi
sudo a2enmod mod-wsgi;sudo a2enmod rewrite
Need help troubleshooting your apache/mod_wsgi installation?
4. Configure Apache2 With Your App
In the following steps, replace ‘project’ with the name of your project
4.1. Make Apache Directories for your project
sudo mkdir /var/www/project
sudo mkdir /var/www/project/production
sudo mkdir /var/www/project/logs
sudo mkdir /var/www/project/public_html
4.2. Create Symlinks
Creating symlinks to your project files is an important covention as, if there is a problem with one of your code bases, you can simply change your symlink to a stable codebase without having to modify your apache configuration.
ln -s ~/project/ production
ln -s ~/project/static public_html # If you created the static directory in step 2.4.
4.3. Replace you /etc/apache2/sites-available/default with:
ServerAdmin admin@project.com
DocumentRoot /var/www/project.com/public_html/
ErrorLog /var/www/project.com/logs/error.log
CustomLog /var/www/project.com/logs/access.log combined
WSGIScriptAlias / /var/www/project.com/production/main.py
Alias /static /var/www/project.com/public_html
AddType text/html .py
WSGIDaemonProcess www-data threads=15
WSGIProcessGroup www-data
Order deny,allow
Allow from all
Options +FollowSymLinks
Options -Indexes
4.4. Change the group and owner of files requiring write access to apache’s www-data
Careful in this step to only change the group and owner of directories or files that will require write access.
sudo chgrp -R www-data
sudo chown -R www-data
5.Try to run!
sudo /etc/init.d/apache2 restart # Open your browser and visit the url: http://localhost or 127.0.01
You will see Hello World on the browser.
Thank you for sharing. However, some additional clarifications are essential.
1) What is the exact name of the file to be replaced in /etc/apache2/sites-available/default? (under /etc/apache2/sites-available/ , there are two files: 000-default.conf and default-ssl.conf)
2) How ‘project’ directory (folder) would become ‘project.com’ stated in the replacement file?
3) Where is www-data? When I do your commands, the error says: missing operand after ‘www-data’
LikeLike