Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.96 KB | None | 0 0
  1. from __future__ import with_statement # needed for python 2.5
  2. from fabric.api import *
  3.  
  4. # globals
  5. env.project_name = 'pastebin'
  6. #env.use_photologue = False # django-photologue gallery module
  7. env.bzr_branch = "bzr+ssh://bzr.clarkewell.net/django/pastebin.daviey.com"
  8.  
  9.  
  10.  
  11. # environments
  12.  
  13. def localhost():
  14. "Use the local virtual server"
  15. env.hosts = ['localhost']
  16. env.user = 'username'
  17. env.path = '/home/%(user)s/workspace/%(project_name)s' % env
  18. env.virtualhost_path = env.path
  19.  
  20.  
  21. def webserver():
  22. "Use the actual webserver"
  23. env.hosts = ['pastebin.daviey.com']
  24. env.user = 'dave'
  25. env.webserver_user = 'www-data'
  26. env.path = '/srv/%(project_name)s' % env
  27. env.virtualhost_path = env.path
  28. env.directory = env.path
  29. env.deploy_user = env.user
  30. env.activate = "source " + env.path + "/bin/activate"
  31. env.database_password = "<REDACTED>"
  32. # tasks
  33.  
  34. ##def test():
  35. ## "Run the test suite and bail out if it fails"
  36. ## result = local("cd %(path)s; python manage.py test" % env) #, fail="abort")
  37.  
  38. def setup():
  39. """
  40. Setup a fresh virtualenv as well as a few useful directories, then run
  41. a full deployment
  42. """
  43. require('hosts', provided_by=[localhost,webserver])
  44. require('path')
  45. sudo('aptitude install -y python-setuptools')
  46. sudo('easy_install pip')
  47. sudo('pip install virtualenv')
  48. sudo('aptitude install -y apache2-threaded')
  49. sudo('aptitude install -y libapache2-mod-wsgi') # beware, outdated on hardy!
  50. # we want to get rid of the default apache config
  51. #sudo('cd /etc/apache2/sites-available/; a2dissite default;', pty=True)
  52. sudo('mkdir -p %(path)s; chown %(user)s:%(user)s %(path)s;' % env, pty=True)
  53. #run('ln -s %(path)s www;' % env, pty=True) # symlink web dir in home
  54. with cd(env.path):
  55. run('virtualenv .;' % env, pty=True)
  56. run('mkdir logs; chmod a+w logs; mkdir releases; mkdir shared; mkdir packages;' % env, pty=True)
  57. #if env.use_photologue: run('mkdir photologue');
  58. run('cd releases; ln -s . current; ln -s . previous;', pty=True)
  59. #deploy()
  60.  
  61. def deploy():
  62. """
  63. Deploy the latest version of the site to the servers,
  64. install any required third party modules,
  65. install the virtual host and then restart the webserver
  66. """
  67. require('hosts', provided_by=[localhost,webserver])
  68. require('path')
  69. import time
  70. env.release = time.strftime('%Y%m%d%H%M%S')
  71. #upload_tar_from_git()
  72. upload_tar_from_bzr()
  73. #install_requirements()
  74. install_site()
  75. symlink_current_release()
  76. migrate()
  77. restart_webserver()
  78.  
  79. def deploy_version(version):
  80. "Specify a specific version to be made live"
  81. require('hosts', provided_by=[localhost,webserver])
  82. require('path')
  83. env.version = version
  84. with cd(env.path):
  85. run('rm releases/previous; mv releases/current releases/previous;', pty=True)
  86. run('ln -s %(version)s releases/current' % env, pty=True)
  87. restart_webserver()
  88.  
  89. def rollback():
  90. """
  91. Limited rollback capability. Simple loads the previously current
  92. version of the code. Rolling back again will swap between the two.
  93. """
  94. require('hosts', provided_by=[localhost,webserver])
  95. require('path')
  96. with cd(env.path):
  97. run('mv releases/current releases/_previous;', pty=True)
  98. run('mv releases/previous releases/current;', pty=True)
  99. run('mv releases/_previous releases/previous;', pty=True)
  100. restart_webserver()
  101.  
  102. # Helpers. These are called by other functions rather than directly
  103.  
  104. def virtualenv(command):
  105. with cd(env.directory):
  106. sudo(env.activate + ' && ' + command, user=env.deploy_user)
  107.  
  108.  
  109.  
  110. def upload_tar_from_git():
  111. "Create an archive from the current Git master branch and upload it"
  112. require('release', provided_by=[deploy, setup])
  113. local('git archive --format=tar master | gzip > %(release)s.tar.gz' % env)
  114. run('mkdir -p %(path)s/releases/%(release)s' % env, pty=True)
  115. put('%(release)s.tar.gz' % env, '%(path)s/packages/' % env)
  116. run('cd %(path)s/releases/%(release)s && tar zxf ../../packages/%(release)s.tar.gz' % env, pty=True)
  117. local('rm %(release)s.tar.gz' % env)
  118.  
  119. def upload_tar_from_bzr():
  120. require('release', provided_by=[deploy, setup])
  121. "Create an archive from the current bzr branch and upload it"
  122. local('bzr export %(release)s.tar.gz' % env)
  123. #run('mkdir -p %(path)s/releases/%(release)s' % env, pty=True)
  124. put('%(release)s.tar.gz' % env, '%(path)s/packages/' % env)
  125. run('cd %(path)s/releases/ && tar zxf ../packages/%(release)s.tar.gz' % env, pty=True)
  126. local('rm %(release)s.tar.gz' % env)
  127.  
  128.  
  129.  
  130. def install_site():
  131. "Add the virtualhost file to apache"
  132. require('release', provided_by=[deploy, setup])
  133. #sudo('cd %(path)s/releases/%(release)s; cp %(project_name)s%(virtualhost_path)s%(project_name)s /etc/apache2/sites-available/' % env)
  134. sudo('cd %(path)s/releases/%(release)s; cp vhost.conf /etc/apache2/sites-available/%(project_name)s' % env)
  135. sudo('cd /etc/apache2/sites-available/; a2ensite %(project_name)s' % env, pty=True)
  136.  
  137. def install_requirements():
  138. "Install the required packages from the requirements file using pip"
  139. #require('release', provided_by=[deploy, setup])
  140. run('cd %(path)s; pip install -E . -r ./releases/current/requirements.txt' % env, pty=True)
  141.  
  142. def symlink_current_release():
  143. "Symlink our current release"
  144. require('release', provided_by=[deploy, setup])
  145. with cd(env.path):
  146. run('rm releases/previous; mv releases/current releases/previous;')
  147. run('ln -s %(release)s releases/current' % env)
  148. #if env.use_photologue:
  149. # run('cd releases/current/%(project_name)s/static; rm -rf photologue; ln -s %(path)s/photologue;' % env, pty=True)
  150.  
  151. def migrate():
  152. "Update the database"
  153. require('project_name')
  154. virtualenv('cd %(path)s/releases/current/%(project_name)s; ../../../bin/python manage.py syncdb --noinput' % env)
  155.  
  156. def restart_webserver():
  157. "Restart the web server"
  158. sudo('/etc/init.d/apache2 reload', pty=True)
  159.  
  160. def createdb_pg():
  161. "Create the postgresql database"
  162. sudo('echo "CREATE USER %(project_name)s WITH PASSWORD \'%(database_password)s\';" | psql postgres' % env , user='postgres')
  163. sudo('createdb -O %(project_name)s %(project_name)s -T template1' % env , user='postgres')
  164.  
  165.  
  166. ##sudo('createuser -P pg_boogie1 ; createdb --encoding=UNICODE db_boogie1 -O pg_boogie1', user='postgres', pty=True)
  167. #sudo('createuser --no-superuser --no-createrole --createdb databasename --no-createdb', user='postgres')
  168. ##sudo('psql -U postgres', pty=True)
  169.  
  170. def createsuperuser():
  171. "Create a superuser"
  172. require('project_name')
  173. run('cd $(path)/releases/current/$(project_name); ../../../bin/python manage.py createsuperuser --username=dave --email=davewalker@ubuntu.com --noinput')
  174. run('cd $(path)/releases/current/$(project_name); ../../../bin/python manage.py resetpassword')
  175.  
  176. def resetadminpassword():
  177. "Reset admin user"
  178. require('project_name')
  179. run('cd $(path)/releases/current/$(project_name); ../../../bin/python manage.py resetpassword')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement