rattail-fabdemo/servers/host/fabfile.py
2018-02-26 15:12:37 -06:00

144 lines
4 KiB
Python

# -*- coding: utf-8; -*-
"""
Fabric script for the 'host' server
Please see the accompanying README for full instructions.
"""
from __future__ import unicode_literals, absolute_import
import os
from fabric.api import *
from fabric.contrib.files import append, exists
from rattail_fabric import make_deploy, mkdir, make_system_user, cdvirtualenv, workon
from rattail_fabric import apt, pod, postgresql, python
# Set the 'live' role to the canonical hostname for this server.
#env.roledefs = {'live': ['host.example.com']}
deploy = make_deploy(__file__)
@task
def bootstrap_all():
"""
Bootstrap all aspects of the server.
"""
bootstrap_system()
bootstrap_rattail()
@task
def bootstrap_system():
"""
Bootstrap the base system.
"""
apt.dist_upgrade()
# postgresql
apt.install('postgresql')
# python
apt.install('libpython-dev', 'libpq-dev')
python.install_pip()
python.install_virtualenvwrapper()
deploy('python/premkvirtualenv', '/srv/envs/premkvirtualenv')
sudo('mkvirtualenv BASELINE')
# apache
apt.install('apache2', 'libapache2-mod-wsgi')
deploy('apache/wsgi.conf', '/etc/apache2/conf-available/wsgi.conf')
sudo('a2enconf wsgi')
sudo('a2enmod ssl')
sudo('service apache2 restart')
# misc
apt.install('git', 'emacs-nox', 'emacs-goodies-el')
@task
def bootstrap_rattail():
"""
Bootstrap the Rattail software.
"""
from rattail_fabric.rattail import bootstrap_rattail
# rattail user and core files
bootstrap_rattail()
# virtual environment
python.mkvirtualenv('rattail')
with cdvirtualenv('rattail'):
mkdir('src')
with workon('rattail'):
python.pip('psycopg2')
# rattail source
with cdvirtualenv('rattail', 'src'):
if not exists('rattail'):
sudo('git clone https://rattailproject.org/git/rattail.git')
with cdvirtualenv('rattail', 'src/rattail'):
sudo('git pull')
sudo('pip install --editable .')
with workon('rattail'):
sudo('pip install --upgrade rattail[db,auth]')
# tailbone source
with cdvirtualenv('rattail', 'src'):
if not exists('tailbone'):
sudo('git clone https://rattailproject.org/git/tailbone.git')
with cdvirtualenv('rattail', 'src/tailbone'):
sudo('git pull')
sudo('pip install --upgrade --editable .')
# # rattail-demo source
# with cdvirtualenv('rattail', 'src'):
# if not exists('rattail-demo'):
# sudo('git clone https://rattailproject.org/git/rattail-demo.git')
# with cdvirtualenv('rattail', 'src/rattail-demo'):
# sudo('git pull')
# sudo('pip install --upgrade --editable .')
# config
with cdvirtualenv('rattail', 'app'):
deploy('rattail/rattail.conf.template', 'rattail.conf')
# database
postgresql.create_user('rattail', password=env.password_postgresql_rattail)
postgresql.create_db('rattail', owner='rattail')
with cd('/srv/envs/rattail'):
sudo('bin/alembic --config=app/rattail.conf upgrade heads', user='rattail')
sudo('bin/rattail --config app/rattail.conf initdb --with-admin', user='rattail')
# POD
mkdir('/srv/pod')
if getattr(env, 'rattail_download_pod', False):
pod.install_pod()
else:
puts("Skipping POD download, per 'fabenv' settings.")
# website
with cdvirtualenv('rattail', 'app'):
mkdir('sessions', owner='rattail:rattail')
deploy('rattail/web.conf', 'web.conf')
deploy('rattail/rattail.wsgi', 'rattail.wsgi')
deploy('rattail/rattail.localhost.conf', '/etc/apache2/sites-available/000-default.conf')
sudo('service apache2 restart')
##############################
# fabenv
##############################
try:
import fabenv
except ImportError as error:
warn("Couldn't import fabenv: {}".format(error))
# Set some default env attrs in case fabenv isn't prepped.
if not hasattr(env, 'password_postgresql_rattail'):
setattr(env, 'password_postgresql_rattail', 'password')