Advertisement
Guest User

Untitled

a guest
May 21st, 2013
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 4.49 KB | None | 0 0
  1. vars.yml:
  2. ---
  3. project_name: myproject
  4. project_root: /var/projects/myproject
  5. project_repo: git@bitbucket.org:username/myproject.git
  6. system_packages:
  7.  - build-essential
  8.   - git
  9.   - libevent-dev
  10.   - nginx
  11.   - postgresql
  12.   - postgresql-server-dev-all
  13.   - python-dev
  14.   - python-setuptools
  15.   - redis-server
  16.   - postfix
  17.   - yui-compressor
  18. python_packages:
  19.  - pip
  20.   - virtualenv
  21. initfiles:
  22.  - backend
  23.   - gunicorn
  24.  
  25.  
  26. deploy.yml:
  27. ---
  28. - hosts: servers
  29.   vars_files:
  30.    - vars.yml
  31.   gather_facts: false
  32.   sudo: true
  33.   sudo_user: myproject
  34.  
  35.   tasks:
  36.   - name: Pull sources from the repository.
  37.     git: repo=${project_repo} dest=${project_root}/code/ version=${branch}
  38.     only_if: "$vm == 0"
  39.     notify:
  40.      - restart backend
  41.  
  42.   - name: Upload configuration.
  43.     copy: src=webapp_settings/local_settings.${nickname}.py dest=${project_root}/code/webapp/local_settings.py
  44.     only_if: "$vm == 0"
  45.  
  46.   - name: Upgrade the virtualenv.
  47.     pip: requirements=${project_root}/code/requirements.txt virtualenv=${project_root}/env/
  48.  
  49.   - name: Sync Django database.
  50.     shell: ${project_root}/env/bin/python ${project_root}/code/webapp/manage.py syncdb --migrate --noinput
  51.  
  52.   - name: Generate Django media.
  53.     shell: ${project_root}/env/bin/python ${project_root}/code/webapp/manage.py generatemedia
  54.  
  55.   handlers:
  56.     - include: handlers.yml
  57.  
  58. handlers.yml:
  59. ---
  60. - name: restart nginx
  61.   service: name=nginx state=restarted
  62.   sudo_user: root
  63.  
  64. - name: reload nginx
  65.   service: name=nginx state=reloaded
  66.   sudo_user: root
  67.  
  68. - name: restart backend
  69.   action: service name=${project_name}_backend state=restarted
  70.   sudo_user: root
  71.  
  72. provision.yml:
  73. ---
  74. - hosts: servers
  75.   vars_files:
  76.    - vars.yml
  77.   gather_facts: false
  78.   sudo: true
  79.  
  80.   tasks:
  81.   - name: Create the project directory.
  82.     file: state=directory path=${project_root}
  83.  
  84.   - name: Create user.
  85.     user: home=${project_root}/home/ name=${project_name} state=present
  86.  
  87.   - name: Update the project directory.
  88.     file: group=${project_name} owner=${project_name} mode=755 state=directory path=${project_root}
  89.  
  90.   - name: Create the code directory.
  91.     file: group=${project_name} owner=${project_name} mode=755 state=directory path=${project_root}/code/
  92.  
  93.   - name: Install required system packages.
  94.     apt: pkg=${item} state=installed update-cache=yes
  95.     with_items: ${system_packages}
  96.  
  97.   - name: Install required Python packages.
  98.     easy_install: name=${item}
  99.     with_items: ${python_packages}
  100.  
  101.   - name: Mount code folder.
  102.     mount: fstype=vboxsf opts=uid=${project_name},gid=${project_name} name=${project_root}/code/ src=${project_name} state=mounted
  103.     only_if: "$vm == 1"
  104.  
  105.   - name: Create the SSH directory.
  106.     file: state=directory path=${project_root}/home/.ssh/
  107.     only_if: "$vm == 0"
  108.  
  109.   - name: Upload SSH known hosts.
  110.     copy: src=known_hosts dest=${project_root}/home/.ssh/known_hosts mode=0600
  111.     only_if: "$vm == 0"
  112.  
  113.   - name: Upload SSH key.
  114.     copy: src=key dest=${project_root}/home/.ssh/id_rsa mode=0600
  115.     only_if: "$vm == 0"
  116.  
  117.   - name: Create the SSL directory.
  118.     file: state=directory path=${project_root}/home/ssl/
  119.  
  120.   - name: Upload SSL private key.
  121.     copy: src=files/ssl/myproject.pem dest=${project_root}/home/ssl/myproject.pem
  122.  
  123.   - name: Upload SSH public key.
  124.     copy: src=files/ssl/myproject.key.encrypted dest=${project_root}/home/ssl/myproject.key
  125.  
  126.   - name: Change permissions.
  127.     shell: chown -R ${project_name}:${project_name} ${project_root}
  128.  
  129.   - name: Install nginx configuration file.
  130.     copy: src=files/conf/nginx.conf dest=/etc/nginx/sites-enabled/myproject
  131.     notify: restart nginx
  132.  
  133.   - name: Install init scripts.
  134.     copy: src=files/init/${item}.conf dest=/etc/init/myproject_${item}.conf
  135.     with_items: ${initfiles}
  136.  
  137.   - name: Create database.
  138.     shell: ${project_root}/env/bin/python ${project_root}/code/webapp/manage.py sqlcreate --router=default | sudo -u postgres psql
  139.  
  140.   handlers:
  141.     - include: handlers.yml
  142.  
  143. - include: deploy.yml
  144.  
  145. - hosts: servers
  146.   vars_files:
  147.    - vars.yml
  148.   gather_facts: false
  149.   sudo: true
  150.  
  151.   tasks:
  152.   - name: Restart services.
  153.     service: name=myproject_${item} state=restarted
  154.     with_items: ${initfiles}
  155.  
  156. hosts:
  157. [remote:children]
  158. production
  159. staging
  160.  
  161. [servers:children]
  162. production
  163. staging
  164. local
  165.  
  166. [production]
  167. www.myproject.com: nickname=production vm=0 branch=master
  168.  
  169. [staging]
  170. staging.myproject.com nickname=staging vm=0 branch=develop
  171.  
  172. [local]
  173. local.myproject.com nickname=local vm=1 branch=develop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement