Looks like a good start. Here's what I use. Not as well organized. It sets 
up a fresh Ubunutu 10.04 and installs Cherokee, UWSGI, Postgres, Web2py, 
Postfix and my project from Bitbucket. I also have "deploy" for pushing out 
changes. There doesn't seem to be any collection of Fabric recipes anywhere 
which is unfortunate.

Any feedback is appreciated.


from fabric.api import *

# globals
pw = 'password'
db = 'main'
web2pyversion = 'R-1.92.1'
domain = 'domain.com'
app = 'init'
app_path = '/var/web2py/applications/init'

# environments
def prod():
env.hosts = ['0.0.0.0']
env.user = 'root'

def test():
env.hosts = ['0.0.0.0']
env.user = 'root'

# tasks
def setup():
setup_ubuntu()
setup_pgsql()
setup_postfix()
setup_uwsgi()
setup_cherokee()
setup_web2py()
setup_project()

def deploy():
sudo('cd %s; hg pull' % (app_path), user='www-data')
run('cd %s; hg update' % (app_path))
sudo('chown -R www-data:www-data %s' % (app_path))
restart_cherokee()

# utilities
def setup_ubuntu():
sudo('/usr/sbin/locale-gen en_US.UTF-8; /usr/sbin/update-locale 
LANG=en_US.UTF-8')
sudo('ln -sf /usr/share/zoneinfo/US/Pacific /etc/localtime')
sudo('apt-get update')
sudo('apt-get -y upgrade -y')
sudo('apt-get -y install -y zip unzip tar wget build-essential python-dev 
python-software-properties libxml2-dev mercurial')
sudo('rm /etc/hosts')
sudo("""echo '127.0.0.1 localhost.localdomain localhost
174.143.140.9 web1.domain.com web1
' >> /etc/hosts""" )

def setup_uwsgi():
sudo('cd /var; wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz')
sudo('cd /var; tar xvf uwsgi-latest.tar.gz')
sudo('cd /var; mv uwsgi-0* uwsgi')
sudo('cd /var/uwsgi; python uwsgiconfig.py --build')
sudo('cd /var/uwsgi; cp uwsgi /usr/local/bin/')

def setup_pgsql():
sudo('apt-get -y install postgresql python-psycopg2 postgresql-contrib')
sudo('psql -c "ALTER USER postgres WITH ENCRYPTED PASSWORD \'%s\';"' % (pw), 
user='postgres')
sudo('psql -c "CREATE DATABASE %s WITH OWNER postgres"' % (db), 
user='postgres')
sudo('/etc/init.d/postgresql-8.4 restart')

def new_db():
sudo('psql -c "DROP DATABASE %s"' % (db), user='postgres')
sudo('psql -c "CREATE DATABASE %s WITH OWNER postgres"' % (db), 
user='postgres')
sudo('/etc/init.d/postgresql-8.4 restart')

def setup_web2py():
#sudo('cd /var; wget http://web2py.com/examples/static/web2py_src.zip')
#sudo('cd /var; unzip web2py_src.zip')
sudo('rm -R /var/web2py')
sudo('cd /var; hg clone https://web2py.googlecode.com/hg/ web2py')
sudo('chown -R www-data:www-data /var/web2py')
sudo('cd /var/web2py; hg update %s' % (web2pyversion), user='www-data')
sudo("""echo '<uwsgi>
<pythonpath>/var/web2py/</pythonpath>
<module>wsgihandler</module>
<socket>/tmp/uwsgi.sock</socket>
<master/>
<processes>4</processes>
<memory-report/>
</uwsgi>
' >> /var/web2py/cherokee-config.xml""")

def setup_cherokee():
sudo('add-apt-repository ppa:cherokee-webserver')
sudo('apt-get update')
sudo('apt-get install -y cherokee rrdtool libcherokee-mod-rrd 
libcherokee-mod-libssl')
sudo('rm -rf /etc/cherokee')
sudo('mkdir /etc/cherokee')
put('cherokee.conf', '/etc/cherokee/cherokee.conf')
sudo('mkdir /etc/cherokee/ssl')
sudo('cd /etc/cherokee/ssl; dd if=/dev/random of=rand.dat bs=1024 count=1')
sudo('cd /etc/cherokee/ssl; openssl genrsa -out cakey.key -rand rand.dat 
2048')
sudo('cd /etc/cherokee/ssl; openssl req -batch -new -key cakey.key -out 
cakey.csr')
sudo('cd /etc/cherokee/ssl; openssl x509 -req -days 1780 -set_serial 1 -in 
cakey.csr -signkey cakey.key -out cakey.pem')
sudo('cd /etc/cherokee/ssl; cat cakey.key cakey.pem > server.pem')
sudo('cd /etc/cherokee/ssl; rm -f rand.dat')
sudo('chown -R www-data:www-data /etc/cherokee')
sudo('/etc/init.d/cherokee restart')

def restart_cherokee():
sudo('/etc/init.d/cherokee restart')

def setup_postfix():
sudo('DEBIAN_FRONTEND=noninteractive apt-get install -y postfix')
#postconf -e 'myhostname = web1.domain.com'
#postconf -e 'mydestination = web1.domain.com, domain.com, 
localhost.localdomain, localhost'
#postconf -e 'smtpd_recipient_restrictions = 
permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
#postconf -e 'inet_interfaces = all'
sudo('/etc/init.d/postfix restart')

def setup_project():
sudo('rm -rf %s' % (app_path))
sudo('cd /var/web2py/applications; hg clone 
https://pbreit:%[email protected]/pbreit/%s' % (pw, app))
sudo('rm %s/models/1_settings.py' % (app_path))
sudo('mv %s/private/1_settings_prod.py %s/models/1_settings_prod.py' % 
(app_path, app_path))
sudo('chown -R www-data:www-data %s' % (app_path))
sudo('mv %s/private/routes.py /var/web2py/routes.py' % (app_path))
sudo('cd /var/web2py; python -c "from gluon.main import save_password; 
save_password(\'%s\',80)"' % (pw))

Reply via email to