2018-02-26 15:12:37 -06:00
|
|
|
# -*- coding: utf-8; -*-
|
2015-11-15 20:22:01 -06:00
|
|
|
"""
|
|
|
|
Fabric script for the 'host' server
|
|
|
|
|
|
|
|
Please see the accompanying README for full instructions.
|
|
|
|
"""
|
|
|
|
|
2018-02-26 15:12:37 -06:00
|
|
|
from __future__ import unicode_literals, absolute_import
|
2015-11-15 20:22:01 -06:00
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
from fabric.api import *
|
|
|
|
from fabric.contrib.files import append, exists
|
|
|
|
|
2018-02-26 15:12:37 -06:00
|
|
|
from rattail_fabric import make_deploy, mkdir, make_system_user, cdvirtualenv, workon
|
|
|
|
from rattail_fabric import apt, pod, postgresql, python
|
2015-11-15 20:22:01 -06:00
|
|
|
|
|
|
|
|
|
|
|
# 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
|
2015-11-15 23:02:06 -06:00
|
|
|
apt.install('git', 'emacs-nox', 'emacs-goodies-el')
|
2015-11-15 20:22:01 -06:00
|
|
|
|
|
|
|
|
|
|
|
@task
|
|
|
|
def bootstrap_rattail():
|
|
|
|
"""
|
|
|
|
Bootstrap the Rattail software.
|
|
|
|
"""
|
2018-02-26 15:12:37 -06:00
|
|
|
from rattail_fabric.rattail import bootstrap_rattail
|
2015-11-15 20:22:01 -06:00
|
|
|
|
|
|
|
# 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 .')
|
|
|
|
|
2018-02-26 15:12:37 -06:00
|
|
|
# # 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 .')
|
|
|
|
|
2015-11-15 20:22:01 -06:00
|
|
|
# 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')
|
|
|
|
|
2015-11-15 23:02:06 -06:00
|
|
|
# POD
|
2015-11-15 20:22:01 -06:00
|
|
|
mkdir('/srv/pod')
|
|
|
|
if getattr(env, 'rattail_download_pod', False):
|
|
|
|
pod.install_pod()
|
|
|
|
else:
|
|
|
|
puts("Skipping POD download, per 'fabenv' settings.")
|
|
|
|
|
|
|
|
# website
|
2015-11-15 23:02:06 -06:00
|
|
|
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')
|
2015-11-15 20:22:01 -06:00
|
|
|
sudo('service apache2 restart')
|
2018-02-26 15:12:37 -06:00
|
|
|
|
|
|
|
|
|
|
|
##############################
|
|
|
|
# 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')
|