Skip to content

Instantly share code, notes, and snippets.

@pustovalov
Created September 30, 2016 20:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pustovalov/ea6314734413d9942ce339960c204b50 to your computer and use it in GitHub Desktop.
Save pustovalov/ea6314734413d9942ce339960c204b50 to your computer and use it in GitHub Desktop.
---
- hosts: 'all'
remote_user: 'root'
sudo: 'yes'
vars:
ruby_version: '2.3.1'
user: 'deploy'
home: '/home/{{ user }}'
rbenv_root: '{{ home }}/.rbenv'
name: 'spa_backend'
application: '{{ home }}/applications/{{ name }}'
tasks:
- name: 'apt | update'
action: 'apt update_cache=yes'
- name: 'apt | install dependencies'
action: 'apt pkg={{ item }}'
with_items:
- 'build-essential'
- 'libssl-dev'
- 'libyaml-dev'
- 'libreadline6-dev'
- 'zlib1g-dev'
- 'libcurl4-openssl-dev'
- 'git'
- 'nginx'
- 'postgresql'
- 'postgresql-contrib'
- 'libpq-dev'
- 'imagemagick'
- 'libmagickwand-dev'
- 'htop'
- 'nodejs'
- 'vim'
- name: 'account | create'
user: 'name={{ user }} shell=/bin/bash'
- name: 'account | copy authorized keys'
shell: 'mkdir -p {{ home }}/.ssh -m 700 && cp /root/.ssh/authorized_keys {{ home }}/.ssh && chown -R {{ user }}:{{ user }} {{ home }}/.ssh'
- name: 'account | copy ssh private key'
copy: 'src=keys/id_rsa dest={{ home }}/.ssh/id_rsa owner={{ user }} group={{ user }} mode=0600'
- name: 'account | copy ssh public key'
copy: 'src=keys/id_rsa.pub dest={{ home }}/.ssh/id_rsa.pub owner={{ user }} group={{ user }} mode=0644'
- name: 'rbenv | clone repo'
git: 'repo=git://github.com/sstephenson/rbenv.git dest={{ rbenv_root }} accept_hostkey=yes'
- name: 'rbenv | check ruby-build installed'
command: 'test -x {{ rbenv_root }}/plugins/ruby-build'
register: 'plugin_installed'
ignore_errors: yes
- name: 'rbenv | add bin to path'
shell: echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> {{ home }}/.bashrc
when: 'plugin_installed|failed'
- name: 'rbenv | init'
shell: echo 'eval "$(rbenv init -)"' >> {{ home }}/.bashrc
when: 'plugin_installed|failed'
- name: 'rbenv | clone ruby-build repo'
git: 'repo=git://github.com/sstephenson/ruby-build.git dest={{ rbenv_root }}/plugins/ruby-build accept_hostkey=yes'
when: 'plugin_installed|failed'
- name: 'rbenv | check ruby {{ ruby_version }} installed'
shell: 'RBENV_ROOT={{ rbenv_root }} PATH="$RBENV_ROOT/bin:$PATH" rbenv versions | grep {{ ruby_version }}'
register: 'ruby_installed'
ignore_errors: yes
- name: 'rbenv | install ruby {{ ruby_version }}'
shell: 'RBENV_ROOT={{ rbenv_root }} PATH="$RBENV_ROOT/bin:$PATH" rbenv install {{ ruby_version }}'
when: 'ruby_installed|failed'
- name: 'rbenv | set global ruby {{ ruby_version }}'
shell: 'RBENV_ROOT={{ rbenv_root }} PATH="$RBENV_ROOT/bin:$PATH" rbenv global {{ ruby_version }}'
when: 'ruby_installed|failed'
- name: 'rbenv | rehash'
shell: 'RBENV_ROOT={{ rbenv_root }} PATH="$RBENV_ROOT/bin:$PATH" rbenv rehash'
when: 'ruby_installed|failed'
- name: 'rbenv | create .gemrc'
lineinfile: 'dest={{ home }}/.gemrc owner={{ user }} group={{ user }} mode=0644 line="gem: --no-ri --no-rdoc" create=yes'
when: 'ruby_installed|failed'
- name: 'ruby | install bundler'
shell: 'RBENV_ROOT={{ rbenv_root }} PATH="$RBENV_ROOT/bin:$PATH" rbenv exec gem install bundler'
when: 'ruby_installed|failed'
- name: 'rbenv | change owner'
shell: 'chown -R {{ user }}:{{ user }} {{ rbenv_root }}'
when: 'ruby_installed|failed'
- name: 'postgresql | check user'
shell: 'psql -U postgres -c "\copyright"'
register: 'postgres_login'
ignore_errors: yes
- name: 'postgresql | set auth type'
copy: 'src=configs/pg_hba.conf dest=/etc/postgresql/9.3/main/pg_hba.conf owner=postgres group=postgres mode=0644'
when: 'postgres_login|failed'
- name: 'postgresql | restart service'
service: name=postgresql state=restarted
when: 'postgres_login|failed'
- name: 'postgresql | create shared directory'
shell: 'mkdir -p {{ application }}/shared/config -m 775 && chown -R {{ user }}:{{ user }} {{ home }}/applications'
when: 'postgres_login|failed'
- name: 'postgresql | copy database.yml'
template: 'src=configs/database.yml dest={{ application }}/shared/config/database.yml owner={{ user }} group={{ user }} mode=0644'
when: 'postgres_login|failed'
- name: 'postgresql | create database'
shell: 'createdb -U postgres -O postgres -E UTF8 -l en_US.UTF-8 {{ name }}_production'
when: 'postgres_login|failed'
- name: 'rails | copy settings.yml'
copy: 'src=configs/settings.yml dest={{ application }}/shared/config/settings.yml owner={{ user }} group={{ user }} mode=0644'
- name: 'nginx | check config'
command: 'test -f /etc/nginx/sites-enabled/{{ name }}.conf'
register: 'nginx_config_copied'
ignore_errors: yes
- name: 'nginx | createdir'
shell: 'rm /etc/nginx/sites-enabled/default; mkdir -p etc/nginx/sites-enabled/'
when: 'nginx_config_copied|failed'
- name: 'nginx | copy config'
template: 'src=configs/nginx.conf dest=/etc/nginx/sites-enabled/{{ name }}.conf owner=root group=root mode=0644'
when: 'nginx_config_copied|failed'
- name: 'nginx | restart service'
service: name=nginx state=restarted
when: 'nginx_config_copied|failed'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment