/
fabfile.py
130 lines (106 loc) · 3.49 KB
/
fabfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import os
from fabric.api import cd, env, put, run, sudo
import fabtools
cwd = os.getcwd()
all_users = ['docs', 'builder']
required_dirs = ['checkouts', 'etc', 'run', 'log']
def all():
install_packages('build')
install_packages('web')
install_packages('db')
users('docs')
checkout('docs')
setup_env('docs')
def build():
install_packages('build')
users('docs')
checkout('docs')
setup_env('docs')
def web():
install_packages('web')
users('docs')
checkout('docs')
setup_env('docs')
def db():
install_packages('db')
def install_packages(type):
sudo('apt-get update')
sudo('apt-get install -y python-setuptools')
sudo('easy_install pip')
sudo('pip install -U virtualenv')
if type == 'build':
sudo(
'apt-get install -y git-core python-dev '
'postgresql-client libpq-dev subversion graphviz '
'curl sqlite libxml2-dev libxslt-dev vim g++ python-numpy '
'python-scipy build-essential texlive-full libevent-dev '
'libmysqlclient-dev python-m2crypto libffi-dev'
)
sudo('pip install -U mercurial')
if type == 'db':
sudo('apt-get install -y solr-tomcat redis-server postgresql ')
if type == 'web':
sudo('apt-get install -y nginx')
def users(user=None):
if user:
users = [user]
else:
users = all_users
for user in users:
home = '/home/%s' % user
if not fabtools.user.exists(user):
sudo('adduser --gecos "" -q --disabled-password %s' % user)
if not fabtools.files.is_file('%s/.ssh/authorized_keys' % home):
sudo('mkdir -p %s/.ssh' % home)
put('keys/*.pub', '%s/.ssh/authorized_keys' % home, mode=700,
use_sudo=True)
sudo('chown -R %s:%s %s' % (user, user, home))
sudo('chmod -R 700 %s' % home)
sudo('mkdir -p /var/build')
sudo('chmod 777 /var/build')
# Docs > Syncer
#sudo('adduser docs builder')
def checkout(user=None):
if user:
users = [user]
else:
users = all_users
for user in users:
env.user = user
home = '/home/%s' % user
for dir in required_dirs:
run('mkdir -p %s/%s' % (home, dir))
if not fabtools.files.is_dir('%s/checkouts/readthedocs.org' % home):
with cd('%s/checkouts/' % home):
run('git clone git://github.com/rtfd/readthedocs.org.git')
if not fabtools.files.is_file('%s/bin/python' % home):
run('virtualenv %s' % home)
run(('%s/bin/pip install -U -r %s/checkouts/readthedocs.org/'
'deploy_requirements.txt') % (home, home))
def setup_env(user=None):
if user:
users = [user]
else:
users = all_users
for user in users:
env.user = user
home = '/home/%s' % user
put('files/bash_profile', '%s/.bash_profile' % home)
put('files/%s_supervisord.conf' % user,
'%s/etc/supervisord.conf' % home)
run('%s/bin/pip install -U supervisor ipython gunicorn' % home)
def fix_perms(user=None):
if user:
users = [user]
else:
users = all_users
for user in users:
env.user = user
home = '/home/%s' % user
sudo('chown -R %s:%s %s' % (user, user, home))
def setup_db():
env.user = "docs"
home = '/home/%s' % env.user
with cd('%s/checkouts/readthedocs.org/readthedocs' % home):
run('./manage.py syncdb --noinput')
run('./manage.py migrate')