Setting Up Snowy on DreamHost

Introduction

This guide is for installing Snowy in a shared hosting environment like DreamHost, where you must install your own Python, Django, and other dependencies locally. It is geared toward using FastCGI and Apache, and is based on http://wiki.dreamhost.com/Django , so please read that if anything here seems off.

Assumptions In This Guide

You can of course deviate from any of these, but here are the assumptions I'm making as I write this guide:

  • You have a working DreamHost domain with shell access

  • Apache looks in ~/mydomain.com/ for website files
  • You also have ~/media.mydomain.com/ sub-domain set up
  • You will install Snowy to ~/django-projects/snowy
  • FastCGI is enabled for mydomain.com

Setup

In a typical DreamHost setup, the first thing you need to do is install Python 2.6 and many modules in your home directory. In this example, we will use $HOME as the installation prefix (so install files will end up in ~/bin/, ~/lib, ~/share, etc). Before installing anything, it is probably easiest to modify your .bash_profile like so:

export PATH=$HOME/bin:$PATH
export PYTHONPATH=$HOME/django-projects:$HOME:$PYTHONPATH

The second line implies that we are going to install Snowy to ~/django-projects/snowy.

The first time after creating this, you'll need to run source ~/.bash_profile.

Now we have various tarballs we need to download and install to have an appropriate Python environment, starting with Python 2.6. Here's what I installed...I do not remember the order, but it was probably something like:

  • Python-2.6.2
  • setuptools-0.6c9
  • MySQL-python-1.2.3c1
  • python-dateutil-1.4.1
  • pytz-2009j
  • libxml2-python-2.6.21
  • pysqlite-2.5.5
  • Django-1.1

TODO: Test this again on a fresh dreamhost user/domain to record exact steps

Sorry for the lack of details at this time, but I'm guessing I did something like the following (after extracting all the tarballs to ~/tarballs):

cd ~/tarballs/Python-2.6.2 && ./configure --prefix=~ && make && make install
cd ~/tarballs/setuptools-0.6c9 && sh setuptools-0.6c9-py2.4.egg --prefix=~
cd ~/tarballs
easy_install MySQL-python-1.2.3c1
easy_install python-dateutil-1.4.1
easy_install pytz-2009j
easy_install libxml2-python-2.6.21
easy_install pysqlite-2.5.5
easy_install Django-1.1

Okay, now in theory you have a sufficiently prepared environment. Please double-check that the python command loads a Python 2.6 console. If it doesn't, add alias python=python2.6 to ~/.bash_profile.

Lastly, to set up the admin media properly:

ln -s $HOME/tarballs/Django-1.1/django/contrib/admin/media $HOME/media.mydomain.com/admin_media

Setting up FastCGI

cd ~/mydomain.com
wget http://svn.saddi.com/py-lib/trunk/fcgi.py

Then create the file ~/mydomain.com/dispatch.fcgi with the following contents:

import sys
sys.path = ['/home/YOURDREAMHOSTUSERNAME','/home/YOURDREAMHOSTUSERNAME/django-projects','/home/YOURDREAMHOSTUSERNAME/django-projects/snowy'] + sys.path
from fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'snowy.settings'
WSGIServer(WSGIHandler()).run()

Set up permissions:

chmod 755 ~/mydomain.com/dispatch.fcgi ~/mydomain.com/fcgi.py

Edit ~/mydomain.com/.htaccess :

RewriteEngine On
RewriteBase /
RewriteRule ^(dispatch\.fcgi/.*)$ - [L]
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]

Note that if you are putting your install in a subdirectory like ~/mydomain.com/snowy , you will edit ~/mydomain.com/snow/.htaccess, and RewriteBase should be set to /snowy, not /.

Setting up Snowy

I recommend getting Snowy from git. This allows you to see any changes you've made to your local checkout (and maybe send them back to us as patches). Also, you can switch to any arbitrary version for testing purposes. Upgrading to a new release could be as easy as git pull --rebase && git checkout SNOWY_1_2 (for example).

cd ~/django-projects
git clone git://git.gnome.org/snowy
cd snowy
cat INSTALL  # Yes, you really should read this ;-)

I don't want to repeat the contents of INSTALL here, since then I'd have to maintain two documents. ;-) Read them and follow them. Just don't run python manage.py runserver , and when you're ready to admin your install, go to http://mydomain.com/admin . Here is my local_settings.py (in this example I'm using sqlite:

# Local Django settings for snowy project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

DATABASE_ENGINE = 'sqlite3'    # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = '/home/YOURDREAMHOSTUSERNAME/django-projects/snowy/snowy.db'

ADMIN_MEDIA_PREFIX = 'http://media.mydomain.com/admin_media/'

DEFAULT_FROM_EMAIL = 'registration@mydomain.com'

# Fill in this information from
# http://recaptcha.net/api/getkey?app=snowy
RECAPTCHA_ENABLED = False
RECAPTCHA_PUBLIC_KEY = ''
RECAPTCHA_PRIVATE_KEY = ''

Make sure to:

chmod 600 local_settings.py

If for some reason you really are using sqlite, please make sure that you put the .db file somewhere inaccessible to your web users.

Projects/Snowy/Install/Dreamhost (last edited 2013-11-22 20:53:50 by WilliamJonMcCann)