áĽáá áłááá á ááááŠá á¨áŁáĄá áá°áá áŞáŤá ááá°ááŤáľ ááááááľ áĽá ááťá á¨áá˝á á¨ááŤááť áá˝ááá˝á ááťá áá á¨áĽáᢠáĽá á áááá áááł ááá á°á¨á á á°á¨á áááŞáŤ á áááááᢠáá áĽá¨á°á¨á°á° áĽááłá áłáá¨áł á¨áá á°á ááŤááť áá˝áá áááá ἠá ááááá áá á, áĽá á áá¨á¨áťá á°ááśášá ááá ἠáá á¨áĽá, áááá ááá áĽáŤá´ áĽá¨á°á á°áĽáŠ áá. ááááŁáľ á áá á˝áá áĽáá á ááľ á°á áá á áá°áľ áĽáá˛áŤááĽá áá¨áłá áĽá˝ááá.
á ááááŞáŤ áá¨áąáľ á¨áááŁá ááá á á¤áľá¤áľá¤á˝ á áŠá á áááľ á áááá(áá˝) áá á áľááľá á¨á°áááš á¨áĽááááá˝ áááá ááá¨ááá ansible ááš á¨áá á áááá˝ áá°áĽááłáᢠáĽáá ááá á áľááľ á¨ááᣠáááá ááŤá á áá˝áá áĽá á¨áá°áá áŞáŤáá á¨áĽá¨ááľ áá áá°ááŤáľ á áśáá°áᣠááľáľá áĽá ááá˝ á¨áłáĽá ááŞá˘ á¨ááŤááť áá˝áá áááťá á áľááá áá ááľá¨á áĽáá°áááá áĽá áĽáá´áľ áĽáá°áá አááá á ááĽááľá˘ áá áá ᨠGitHub á á°ááá á¨ááŤááť áá˝ááá˝ ááá áĽáá° "áááĽá á á ááľáŁ áá°áŤáá˘" áŤáá¨áŠáľá˘
áá áŤáľááááá?
á áľááľá áĽáá°á°ááááŠáľ á¨ááŤááť áá˝áá áááťá áá ááľá¨á áĽáá°áááá áĽá áĽáá´áľ áĽáá°ááŤá°áááľ ááá á ááĽááľ. á¨ááŤáľááááá áĽáááľá. á Rails áá°áá áŞáŤ á ááŤáł á¨áľáááľ ááŹáá˝á áĽááááááᥠnginxᣠpostgresql (redisᣠááá°)ᢠá á°á¨ááŞá, á¨á°áá°á á¨áŠá˘ áľáŞáľ áŤáľááááá. á rbenv (rvm, asdf ...) á áŠá ááŤá á¨á°áťá áá. áá áá áá áĽáá° áľá á°á áá ááŤááľ áááá ááĽá ááłáĽ áá, áľááá á¨á°áᨠá°á áá ááá á áĽá ááĽáśášá áááá áŤáľáááááłá. á¨áá á áá, á¨áĽáá áŽáľ áá° á áááአááľáá, á nginx, postgres, ááá° áá áŽá˝á áá áłáľ áĽá áĽááá á áá á áááááśá˝ áááá áŤáľáááááłá.
á áá¤áąá, á¨áĽááááá˝ á á°á á°á¨á°á áĽáá°áá¨á°áá áá.
- áĽáá° áľá áááĄ
- á¨áľáááľ ááŹáá˝á ááŤá
- á á˛áľ á°á áá ááá áŠ, ááĽáśá˝á áŤáá áŠ, ssh ááá
- á¨áľáááľ ááŹáá˝á (nginx ááá°) áŤáá አáĽá áŤááą
- á áá¨á ááą ááľáĽ á°á áá áĽáááĽáŤáá (áá˛áŤáá á¨ááἠááł ááá á áá˝áá)
- áĽáá° á á˛áľ á°á áá áááĄ
- rbenv áĽá ruby ââáŤá
- ááááŤáá á ááŤá áá
- á¨áá°áá áŞáŤ áŽáľ á ááľáá áá
- á¨áá á ááááá á ááľááá áá
á á°á¨ááŞá á¨áá¨á¨áťááš á°á¨ááá˝ áŤááľáłáá á áá áá áá¨ááá áá˝áá, á˘áŤááľ á¨áłáĽá ááľáĽ áŽáľá áá° áááá፠áááŤáá˝ áááá áĽ, á á°áłáŤ áááł áá°ááŤáľ áá áááąá á á˛áááá ááá¨á, áá áŽá˝á á¨á°á፠áá፠áá áłáľ, puma áĽáá°áá ááľááá, ááá°. áá áá á Asible á áá áá áá¨ááá áá˝áá, áá ááá?
á¨ááá ááá á
Asible áĽáĽá
á áá
ááá á¨ááŤááť áá˝áá
ááááĄá áአá ááŁáĽ á áá áá áá ááľá¨á áĽááłáá áľ áĽá áĽáá´áľ ááľá¨á áĽááłáá áľ á¨áááá˝ á¨yml ááá ááᢠááá á¨ááŤá°áá á¨ááááŞáŤáá á¨ááŤááť áá˝áá áĽááá ááĄ-
---
- name: Simple playbook
hosts: all
áĽáá
á ááá á¨áĽá á¨ááł áá˝áá á°á ááˇá áĽáááá Simple Playbook
áĽá áááą áááá á áľá°áááá˝ áá¨ááá á áá áľ. á¨áľá áá / ááťá á áá˝á áá፠ááľáĽ áááľááá á áĽáá˝ááá playbook.yml
áĽá áááŽáĽ ááááŠ:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
á¨ááá áááá áá á¨ááááą á áľá°áááá˝á áĽáá°áááá
á°áááŻáᢠá áአááľáĽ ááááá á ááŁá¸á
á á°ááłáłá áá፠ááľáĽ áĽááá á
123.123.123.123
á áľá°áááá á ááá á¨áááááá á áá
ááááľ áá (á¨áĽáá á¨áŞáá¤áľ á áľá°ááá
ááá¨áŤáŁ ááá localhost ááááἠáľá˝ááá˝á) áĽá á áľá áľá áĽááľááá áááᢠinventory
.
á ááá˝áľ ááá ááááľ ááá¨á áľá˝ááá
áĄ-
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
áá°á°ááá¸á á áľá°ááá á¨ssh ááłá¨áť áŤááľáŁ á¨ááŤá ansible ááááá áĽá á¨áááľ áľáááąá áá¨á áá°á áľáŁáᢠ(ááŁáŞ TASK [á¨áá°áĽá°áĽ áĽáááłáá˝]) á¨á፠á áá áľá á áááá á áá ááᣠáá°áŁá (PLAY RECAP)á˘
á ááŁáŞ, áááááą áá° áľáááą á¨ááĄá áľá á¨á°á áá áľá áá ááá. ááááŁáľ á á áľá°ááá áá áááá áá˝ááᢠá ááŤááť á°áĽá°á ááá ááľáĽ á¨áááľ_á°á áá áááŞáŤá á°á á áá á¨áľááá á°á áá áĽáá°áááá áááá˝ áá˝ááᢠáĽáá˛áá áľá á¨áááľ áľáááľ áá¨á áĽá áá ááĽááľá á ááľááá áááá áá˝áá áĽá áĽáąá ááá°áĽá°áĽ áá ááŁá¨á á¨ááĽááľáᢠáá á°ááŁá áĽáá˛á áá°áá¨á áá˝áááĄ-
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
á¨á¨ááł áá˝ááá áĽáá°áá áááľáŹáľ áááአáĽá áááááą áĽá¨á°áŤ áááá áŤá¨áááĄá˘ (á¨áľá á°á áááá á¨ááášáŁ á¨á áŤá ááĽáśá˝á áááááľ áľáááááá áááŞáŤ áááá˝ áŤáľáááááłáᢠá á°ááą áá áĽáá°á°ááááĄ- become set to âtrueâ/âyesâ to activate privilege escalation.
ááá áĽáá°áá áá á áá ááá˝ áŁáááá).
ááááŁáľ ᨠPython á áľá°ááááá áááľá áŁáááťá á¨á°á¨á°á° áľá á°áľ áá°ááľááłá ᣠá¨á፠áĽááľá áĽáŤáľá áááášáľ áá˝áá-
ansible_python_interpreter: /usr/bin/python3
á áľáĽáá áááśá á¨áľ áĽááłáá
ááá
áľá˝ááá
whereis python
.
á¨áľáááľ ááŹáá˝á ááŤá
ᨠAnsible áá°á á áľáááľ á¨á°ááŤáŠ á¨áľáááľ ááŹáá˝ áá áááľáŤáľ áĽá áááá˝á áŤáŤáľáłá ᣠáľáááá á ááááá ááááŤáľ á¨áŁá˝ áľááŞááśá˝á ááá á¨ááĽáá ᢠá áá áľáááąá ááááá áĽá á¨áľáááľ ááŹáá˝á áááŤá á¨áĽááá
áááá˝ ááľáĽ á ááąá áĽááááááᢠá áĽá VPS áá áĄáĄááą ááááľ á ááᣠáľááá
áĽá áááá áĽá
áá˝á áááŤá apt-get
и
á¨ááŤááť áá˝ááá˝áá á ááááŞáŤááš á°ááŁáŤáľ áĽáá¨áááĄ-
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
tasks:
- name: Update system
apt: update_cache=yes
- name: Install system dependencies
apt:
name: git,nginx,redis,postgresql,postgresql-contrib
state: present
á°ááŁá á áľááá á áŠá
á ááááŽá˝ áá áá°áŤ á¨áá˝á á°ááŁá ááᢠáľáŤáá á áááἠááľáłááťá ááľáĽ á ááááá ááá¨áłá°á áĽááľáá˝á áľá áĽáá°á ááá. áĽá áá ááľá¨á áĽááłáá áľ á¨á ááľ á¨á°áá°á ááá á ááŁáĽ á áá áá áĽááááááᢠá áá
ááłá áá apt: update_cache=yes
- á ááľ áááá á áá áá á¨áľáááľ ááŹáá˝á áááá áááᢠááá°áá áľáĽáá áľáá˝ á¨á°ááłá°á ááᢠá¨ááŹáá˝á áááá áá°áá˘á ááá áĽááľá°ááááá áĽá áĽááą áá¸á áĽáááá state
ááá á áá áľá˘ present
áááľá áĽááá
á áĽá
áá˝ ááŤá áĽááááᢠá á°ááłáłá áááŠáŁ áĽáá˛á°ááá¸á ááá á ááá á ááá¨á áĽáá˛áŤáááá¸á áááááŤá¸á áĽáá˝ááá state
. áĽáŁáá áἠáá á ááá˛áľ á¨áľá
á¨-ááŹáľáá áá áááľáŤáľ á áá á¨ááááá á¨ááľáľááŹáľql-contrib áĽá
á áŤáľáááááᢠáĽáá°ááᣠáá
á ááá
áĽá ááľá¨á á ááĽá
ᤠá áŤáą á á
á áá
á á áŤá°áááá˘
á¨á¨ááł áá˝ááá áĽáá°áá áááľáŹáľ áááአáĽá áĽá ááš ááŤáá áŤá¨áááĄá˘
á áłá˛áľ á°á áááá˝á ááá á.
á¨á°á áááá˝ áá áááľáŤáľáŁ Ansible áĽáá˛á ááá á áá - á°á ááᢠá ááľ á°á¨á᪠á°ááŁá áĽáá¨áá (á á¨ááá áá á áá áááá áłáľ ááľáááá á¨áłáááľá á¨ááŤááť á°áĽá°áŠá áááá˝ á¨á áľá°áŤá¨áśáš ááᣠá°á á áłá¸á)
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
á á˛áľ á°á áá áĽáááĽáŤááᣠáźá áĽá á¨ááá áá á ááá ááľá˘ áĽá á¨á፠áá° áĽá á˝ááŽá˝ áĽáááŁááᢠáá°ááŤáŠ á áľá°áááá˝ á¨á°á áá áľáá˝ á¨á°áᨠááá áŤááŁá¸ááľ? áĽá á¨ááá ááá á á¨ááł á°áĽá°á ááľáĽ ááá˝ á áá á˝áá ááľáĽ áá¨áá¸áľ á áŁá ááĽá ááłáĽ ááᢠááááá á¨á°á áá áľá áĽá á¨ááá áá áá° á°ááááŽá˝ áĽááľááá á áĽá áá° ááŁáĽá áá¨á¨áť áá á¨ááá ááá áĽáá´áľ áááľá á áĽááłááĽá á áłáŤááá˘
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
áľáἠáĽáá á ááá˝á á áá áá á°ááááŽá˝ á ááŤááť á°áĽá°á ááľáĽ á°ááá ááá˘
á ááá˝áľ áááἠááľáĽ á¨á°ááááŽá˝á áĽá´áśá˝ áĽáá áááá-
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
áĽáŁáá áááŞáŤáá áŤáľá°áá [all:vars]
- á¨áááĽáá á¨á˝áá áĽááł á°ááááŽá˝ (vars) áá¸á áĽá áááá á áľá°áááá˝ (ááá) á°ááťá áĽáá°áá ááááŤáá˘
ááľáá áľáŠá¨áľ á¨ááľáĽ ááᢠ"{{ user_password | password_hash('sha512') }}"
. ááአansible á°á ááá á áŠá ááŤá á áá°áá áá user_add
á áĽá
áĽáá°ááŤá°áááľ. áĽá áááá áá¨ááá˝ á ááĽáł áŤáľáááŁá¸áá, áááŤá áá á¨ááá ááá áá° áá˝ á áľááľáá áááἠáŤááĽá, áá
áľááá á¨ááŤá°ááá áá.
á°á ááá˝áá áá° áąáś áĄáľá áĽáá¨ááᢠáááᣠá¨áá á ááľ ááá áá á á áŤá°áááááá áĽáá°áá á áááľ áĄáľá áááŠá áá¨ááἠá ááĽááĄ-
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
ááá ááá á áŁá ááá ááᣠáĄáľáá˝á áááá á á¨áĄáľá ááá á ááᣠá ááŁáĽ á¨á ááľ áá á áŁá á°ááłáłá ááᢠá¨á፠áá
áá áĄáľá áá°á ááá ááááἠá á áá (groups: "sudo"
).
áŤáááá áá á°á á
áá áááŁáľ áĽááľáá˝á á¨ssh áááá áá°áá
á°á áá áá¨á á áá ááá˘
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
- name: Deploy SSH Key
authorized_key:
user: "{{ user }}"
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
á áá
ááłá áá á˛ááá áľáŠá¨áľ á¨ááľáĽ áá "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- ᨠid_rsa.pub áááá áááśá˝ ááááĽáŁá (áľáá á¨á°áᨠááá áá˝áá) áááľá á¨ssh ááá ááá ááá áĽá á á áááአáá áá°á ááá á¨á°áááą áááá˝ áááá ááľáĽ áá°ááááá˘
áá
áŚáľáąá á á áááá á¨ááá á á°ááŁáŤáľ á ááá á á ááľ áĄáľá ááľáĽ áá¨ááá áá˝áá, áĽá áá
á áĄáľá á¨áá á á áá áĽááłáŤáľá á¨ááá á¨ááŤááť á°áĽá°á á á°áá á á˘áŤáľááἠáĽáŠ áááá. ááá
ááá, Ansible á áá
áá ááááŞáŤ áá á á°á áá°á á¨ááá ááá
á áá°á¨áľ áááá˝ á á°áᨠáááá˝ áá፠ááľáĽ áááἠá ááŁá¸á ᣠááĽáŤááłááą áá á°ááłáłá áľá áŤáá á¨á°áᨠáá፠á á ᣠá á°ááŁáŽá˝ ᣠáááὠᣠá áĽááśá˝ ᣠááá° áá፠ááľáĽá˘
á¨ááá ááá
á áĽááá ááĄ- ./ansible/roles/user/tasks/main.yml
(ááá á ááľ áá á¨ááŤááťá áá á˛ááá á¨ááŤáá áĽá á¨áá°áá á¨á áá ááá ááᤠááá˝ áá áááá˝ á¨áĽáą áá áááá áá˝ááá˘) á áá á¨á°á ááá áá á¨á°áŤáŤá áááá á°ááŁáŤáľ áá°áá
ááá ááľá°ááá áá˝áááĄ
# Create user and add him to groups
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
- name: Deploy SSH Key
authorized_key:
user: "{{ user }}"
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
á ááá á¨ááŤááť áá˝áá ááľáĽ á¨á°á áááá áá ááá áá áááá˝ á ááĽááľáĄ
---
- name: Simple playbook
hosts: all
remote_user: root
gather_facts: no
tasks:
- name: Update system
apt: update_cache=yes
- name: Install system dependencies
apt:
name: git,nginx,redis,postgresql,postgresql-contrib
state: present
roles:
- user
áĽáá˛áá áľáááąá á¨ááá˝ á°ááŁáŤáľ áá á ááľ áááá ááááŤáłá ááá áá˝áá ᣠáá
áá áááľá¨á áĽááłáá áĽáá°áá áá°á¨á áá˝ááᢠtasks
ááľáĽ á¨á°ááášá áľ pre_tasks
.
nginx á áááá áá
á áľááľáá Nginx á ááŤá á ááĽáᤠáĽáąá áááá áĽá ááľáŹáľ á ááĽáᢠá áá ááľáĽ áá˛áŤáá áĽááľááá. á¨ááá ááá á áĽááá ááĄ-
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
á áá áááá˝á áĽá á áĽááśá˝á áĽáááááá. á ááŤá¨áá¸á áŤáá ááŠááľ áááášá á ááĽáł áá áłáľ ááťáá ᣠáá áĽáá°ááᢠáĽá á áĽááśá˝ ᨠj2 á áĽáŤ áááŤá¸á áááŁá áĽá á°ááłáłá áŁá áááľ áĽáá á ááá˝á á áá áá á°áááá áĽá´áśá˝á áá áá áá˝ááá˘
nginx á áĽááááľ main.yml
ááá. ááá
áĽá á¨áľáááľ ááá á áá-
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
áĽáá
áá nginx áááá á áá áľ áááľ áĽáť áłááá (áá
á áĽááááŤáá) áĽáť áłááá áá˛áŤáá ááááľ á áá áľ áĽááááá˘
á áá á¨ááááŞáŤ áááá˝á áĽááááĽáĽáĄ-
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
- name: Copy the nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
backup: yes
- name: Copy template my_app.conf
template:
src: my_app_conf.j2
dest: /etc/nginx/sites-available/my_app.conf
owner: root
group: root
mode: '0644'
áááá ᨠnginx áá
á ááá áĽáááĽáŤáá (á ááĽáł á¨á áááአáááľáąáľ áá˝áá, ááá áĽáŤáľá ááá). áĽá áĽáá˛áá ááá°áá áŞáŤá˝á á¨áá
á¨áľ ááá á áŁá˘áŤáá˝_á¨ááá áá፠ááľáĽ (áá
á áľááá á áá°áá ááá áá á áá áá)ᢠá ááááŞáŤá ááłá áá áááá˝á ááá
áłáľ á¨á
á áááá áĽáá áááá (ááá ááľáĽ ááá á áá áľ /ansible/roles/nginx/files/nginx.conf
). á ááá°áá ááľáĽ, á¨á°ááááŽá˝á áĽá´áśá˝ á áá°áŤáľ á áĽááąá áĽáááá áŁáá. á áĽááľ ááľáĽ ááá á áá áľá˘ /ansible/roles/nginx/templates/my_app.j2
). áĽá áĽáá°áá
áŤá ááá áááľá áá˝áá-
upstream {{ app_name }} {
server unix:{{ app_path }}/shared/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name {{ server_name }} {{ inventory_hostname }};
root {{ app_path }}/current/public;
try_files $uri/index.html $uri.html $uri @{{ app_name }};
....
}
áá° ááľáá˘áŤáá˝ áľáŠá¨áľ ááľáĄ {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
- áĽááá
áĽá´áśáťá¸á á¨áá
áłáľ á ááľ á á áĽááľ ááľáĽ á¨áá°áŠ ááá á°ááááŽá˝ áá¸áᢠáá°ááŤáŠ á¨á áľá°áááá˝ áĄáľáá˝ á¨ááŤááť áá˝áá á¨á°á áá áá
á áá ááᢠáááłáᣠá¨áĽá áááá áááá˝áá áá¨á áĽáá˝ááááĄ-
[production]
123.123.123.123
[staging]
231.231.231.231
[all:vars]
user=my_user
user_password=123qweasd
[production:vars]
server_name=production
app_path=/home/www/my_app
app_name=my_app
[staging:vars]
server_name=staging
app_path=/home/www/my_stage
app_name=my_stage_app
á áá á¨á¨ááł áá˝ááá˝áá á¨áááá ááááąá á áľá°áááá˝ á¨á°ááášáľá á°ááŁáŤáľ áŤá¨ááááᢠáá á á°ááłáłá áá áááá
áľ á áľá°ááá
ᣠá°ááááŽáš á¨á ááŤá˝ááš áááŤáŤá ᣠáĽá á áááá˝ áĽá á¨ááŤááť áá˝áááľ ááľáĽ áĽáť áłááá á nginx áá
áŽá˝ ááľáĽá˘ {{ inventory_hostname }}
á áĽá áááá ááľáĽ áááá˝ á áŤáľáááá - áá
ááĽá á áľá°áááá˝ á¨áĽá áááá ááá áĽáá˛ááááľ á¨ááá ᣠáá áá ááľ áĄáľá áĽáť ââáŤáṠᣠáá
á áá¨á°áá áľáĽáá áá¨ááá áá˝áá á˘
ansible-playbook -i inventory ./playbook.yml -l "staging"
ááá á ááŤá áá°ááŤáŠ áĄáľáá˝ á¨á°áᨠá¨áĽá áááá áááá˝ ááአáá. ááá áĽá á¨á°ááŤáŠ á áľá°áááá˝ áŤáááľ áááąá á ááŤá¨áŚá˝ ááááľ áá˝ááá˘
nginxá áá° áááá áĽááááľá˘ á¨áá á¨áľ áááášá á¨ááá áĽá á áá á sitest_enabled áá° my_app.conf á¨áŁá˘áŤáá˝_á¨ááá á˛áááá ááá á á ááĽáᢠáĽá nginx áĽáá°áá áŤáľáááŠ.
... # old code in mail.yml
- name: Create symlink to sites-enabled
file:
src: /etc/nginx/sites-available/my_app.conf
dest: /etc/nginx/sites-enabled/my_app.conf
state: link
- name: restart nginx
service:
name: nginx
state: restarted
ááá ááá áĽáá ááá áá - áĽáá°áá ááťá á¨áá˝á áááá˝ á¨áá°á á á ááŁáĽ ááᢠáá á ááľ ááĽáĽ á á. á áĽáŤááłááą áá nginx á áĽáá°áá ááľááá ááá áááł á¨áááᢠáĽá áĽáá°áá áŤá áľáááá˝á áĽáá°ááá˝á á áľá°ááááᥠâáĽáá˛á á áľááâᣠá ááŁáĄ á¨á áá âáá áááł ááá¨á áááŁáâ á¨áá áááľááᢠáĽá áĽááá áá áá á áľááá áĽáá´áľ áĽáá°áá°áŤ ááᢠáĄáľá ááľááá áŤá ᣠááá á¨áľáááľ ááŹá ááľááá á¨á°áŤá ᣠá¨á፠ansible áá áá áŤáŁáŤá áĽá á°ááŁáŠá áŤáááŁáᢠáĽáá˛áá áááá˝ á á áááአáá áŤáá áá áá á áá á¨ááááą á¨áá á áááá áĄáᢠáá áá áá áá áĽá nginx á áĽáá°áá ááľááá á¨ááá˝áá á¨ááááŞáŤ ááááš á¨á°áá¨áŠ áĽáť ááᢠááá á¨ááááá˘áŤ áááŞáŤ á ááĄ-
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
- name: Copy the nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
backup: yes
register: restart_nginx
- name: Copy template my_app.conf
template:
src: my_app_conf.j2
dest: /etc/nginx/sites-available/my_app.conf
owner: root
group: root
mode: '0644'
register: restart_nginx
- name: Create symlink to sites-enabled
file:
src: /etc/nginx/sites-available/my_app.conf
dest: /etc/nginx/sites-enabled/my_app.conf
state: link
- name: restart nginx
service:
name: nginx
state: restarted
when: restart_nginx.changed
á¨ááááŞáŤá áááá˝ ááľáĽ á ááą á¨á°áá¨á¨, á
áá áá áŤá áĽá á°ááááá áááááŁá restart_nginx
. áĽá áá
á°áááá á¨á°áááá áĽáť á áááááą áĽáá°áá ááááŤá.
áĽá á áĽáááĽ, ᨠnginx ááá áá° ááá á¨á¨ááł áá˝áá áá¨á áŤáľáááááłá.
postgresql á áááááľ áá
postgresqlá á nginx áĽááłá°á¨ááá á˛áľá°ááľ á áá áá ááááľ á ááĽáᣠáĽáá˛áá áłáłá¤áá áĽá áłáłá¤áá áŤáą áááááľ á¨ááá ááá áľá á°á áá ááá á á ááĽáá˘
áá áĽááá á /ansible/roles/postgresql/tasks/main.yml
:
# Create user in postgresql
- name: enable postgresql and start
systemd:
name: postgresql
state: started
enabled: yes
- name: Create database user
become_user: postgres
postgresql_user:
name: "{{ db_user }}"
password: "{{ db_password }}"
role_attr_flags: SUPERUSER
- name: Create database
become_user: postgres
postgresql_db:
name: "{{ db_name }}"
encoding: UTF-8
owner: "{{ db_user }}"
á°ááááŽá˝á áá° ááá˝áľ áĽáá´áľ áĽáá°áá¨áá á áááá˝áᣠáá
á áľááľá áĽá áá á°á¨ááááᣠáĽáá˛áá á¨postgresql_db áĽá postgresql_user áááá˝ á ááŁáĽá˘ á°á¨á᪠áá¨á á á°ááą ááľáĽ ááá áá˝áá. á áŁá á¨ááŤáľá°áľáľ áááŞáŤ áĽáá
á á become_user: postgres
. áĽáááłá áá á ááŁáŞ á¨ááľáľááŹáľ á°á áá áĽáť áá° postgresql áłáłá¤á áĽá á á áŤáŁá˘á áĽáť áá á¨áá°áá°áᢠáá
áááŞáŤ áá
áá á°á áá áááá áľáááá˝á áĽááľááá˝á ááá
áľááá (á áĽááἠááłá¨áť áŤáá)á˘
áĽáá˛áá á á˛áľ á°á áá á¨ááἠááłáá áĽáá˛á°ááľ áááááľ ááľáá áá° pg_hba.conf áá¨á ááááĽá áá˝ááᢠáá
ᨠnginx áá
á¨áľá áĽáá°áá¨áá á á°ááłáłá ááááľ áá¨ááá áá˝ááá˘
áĽá á áĽááἠᣠá¨áľá á¨-ááá ááá áá° ááá á¨á¨ááł áá˝áá áá¨á áŤáľáááááłáá˘
á rbenv á áŠá áŠá˘á á ááŤá áá
Ansible rbenv áá áááľáŤáľ áááá˝ á¨ááľá, ááá áá á ááľ git áá¨ááť ááááá á ááľá¨á á°ááá. áľááá
, áá
á˝áá á áŁá áá°á á áŤááá áááá. áá áĽááá áááľ /ansible/roles/ruby_rbenv/main.yml
áĽá ááááľ áĽáááááĄ-
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
ááĽááá á áááá˝ á áá ááá á°á áá áľá áááľáŤáľ á¨be_user áááŞáŤá áĽáá°áá áĽáá ááááᢠRbenv á á¤áą áá፠ááľáĽ áľáá°áŤá áĽá á ááá á áá á°á¨á á áá°ááᢠáĽá repo áĽá destá á áááá˝ áá¨ááťáá áááááľ á¨git áááá áĽáá ááááá˘
á ááá á rbenv init á bashrc ááľáĽ ááááἠáĽá rbenv áá° PATH áá¨á á ááĽáᢠááá á ᨠlineinfile ááá á áá-
- name: Add rbenv to PATH
become_user: "{{ user }}"
lineinfile:
path: ~/.bashrc
state: present
line: 'export PATH="${HOME}/.rbenv/bin:${PATH}"'
- name: Add rbenv init to bashrc
become_user: "{{ user }}"
lineinfile:
path: ~/.bashrc
state: present
line: 'eval "$(rbenv init -)"'
á¨á፠ruby_build á ááŤá áŤáľáááááłá:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
áĽá á áá¨á¨áťá áŠá˘á ááŤá. áá á¨áá¨áááá á rbenv á áŠá áá ᣠáááľá ᣠá ááá á bash áľáááá˘
- name: Install ruby
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
rbenv install {{ ruby_version }}
args:
executable: /bin/bash
á¨áľááá áľááá áĽá á áá áĽáá°áááá áĽááááŤáá. áááᣠáĽáá áá á ááĽááá ansible áľáĽááášá á¨ááľáŹáą á ááľ á bashrc ááľáĽ áŤááá áŽáľ á áá°áŤáᢠáá áááľ rbenv á á°ááłáłá áľááŞááľ ááľáĽ á ááĽáł áááá˝ á áá áľ áááľ ááá˘
á¨áááĽáá á˝áá á¨áźá áľááá á¨á á á á ááá ááá á áááľ áááł áľáááá áá. áááľá áá á¨áŠá˘ áľáŞáľ ááŤáá á áááŤáá á áŤáľ á°á áá¨ááἠá ááťááᢠáĽá áĽáŤáłá˝áá ááľá¨á áĽáá˝ááá-
- name: Install ruby
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
if ! rbenv versions | grep -q {{ ruby_version }}
then rbenv install {{ ruby_version }} && rbenv global {{ ruby_version }}
fi
args:
executable: /bin/bash
á¨ááá¨á áĽá á ááŤá áĽáť áááĄ-
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
áĽá áĽáá°áá á¨áá áá ruby_rbenv áá° ááá á¨ááŤááť áá˝áá á¨ááá˘
á¨á°áአáááá˝á˘
á á á ááá áááአáĽáá
áá ááá
áá˝ááᢠá ááá á, á¨áá¨á áŤááľáľáŤáá ááľáŹáľ áĽáť áá áĽá áŽáąá á áŤáą áááá áŁá, á áľááááášá áááŤáá˝ ááá አáĽá á áááŹá˝áá áŤáľááአ(ááá ááá á áľááá á¨á°ááá¨). ááá áĽáá áŤááľáłá áĽá áá á°á¨á᪠á¨ááááŞáŤ áááá˝á ááááá, áááłá database.yml
ááá .env
áá áĽáá° áááá˝ áĽá á áĽááśá˝ á nginx áááá ᥠáá˝ááᢠá ááľ á¨áá
ááá áĽáť ááᢠáááá˝á á¨áá
áłáľá á ááľ ááĽááą á¨áá፠ááá
á ááá á áŤáľáááááłá ᣠáĽáá°áá
áŤá ááá
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
áĽá á ááľ áá፠áĽáť áĽáááááá áĽá á áľááá á¨áá á áľááá á¨áá áááá˝á áááĽáŤáá˘
ááťá á¨áá˝á áŽááľ
á°ááááŽá˝ áĽáá° á¨á°á ááá ááá áá áŤá ááľáĽáŤá áá¨ááá˝á ááá áĽáá°áá˝á á áľááľáá á ááá°ááᢠá¨áá áá .env
ááá°áá áŞáŤá ááá, áĽá database.yml
á¨á፠á¨á áá áĽáá°áá
áŤá ááłá ááἠááá á áá áľá˘ á¨ááłáŠ áááá˝ áá°á á
áĽáŠ áááá. ááá ááá áĽá
á áá áááá
áá°ááááŽá˝ ááá áĽááá á /ansible/vars/all.yml
(áĽáá
áá°ááŤáŠ á¨á áľá°áááá˝ áĄáľáá˝ á¨á°ááŤáŠ áááá˝á ááá á áá˝ááᣠáá áĽáá° ááá˝áľ áááᥠproduction.ymlᣠstaging.ymlᣠááá°)á˘
áááľá á áŤááŁá¸á ááá á°ááááŽá˝ áá°á á á¨yml á ááŁáĽ á áá áá áá°áá
ááá áá°ááá á ááŁá¸ááĄ
# System vars
user_password: 123qweasd
db_password: 123qweasd
# ENV vars
aws_access_key_id: xxxxx
aws_secret_access_key: xxxxxx
aws_bucket: bucket_name
rails_secret_key_base: very_secret_key_base
á¨á፠á áá áá ááá á áá¨á°áá áľááá áááľá á ááťáááĄ-
ansible-vault encrypt ./vars/all.yml
á á°ááĽáŽáŁ á áááľá á ááᣠááá á°á á¨ááá áá áááááľ áŤáľáááááłáᢠáá áá áľááá á¨á°áá á áá á ááá ááľáĽ áá áĽáá°ááá áá¨áľ áá˝áá.
á áĽáá ansible-vault decrypt
ááá á˛ááŞááľ áá°á¨á ᣠááťáťá áĽá á¨á፠áĽáá°áá áááľá á áá˝ááá˘
áááľáŤáľ áááá á˛ááŞááľ ááľá¨á á áŤáľááááᢠá˘áááŞááľáľ áá áŤá¨ááťá áĽá á¨ááŤááť á°áĽá°áŠá á¨áááአáá áŤáŤááąáľ --ask-vault-pass
. á á˛áá á¨ááá ááá áá áááᣠá°ááááŽá˝á á°ááľáŽ áĽá á°ááŁáŤáśášá ááá˝ááᢠááá áá¨ááá˝ áĽáá°á°áá°á አáááŤáá˘
á¨á ááŤáł á¨á áľá°áááá˝ áĄáľá áĽá ááťá á¨áá˝á áŽááľ á¨á°áá áľááá áĽáá°áá áŤá ááá áááľááá˘
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
áá á¨ááŤááť áá˝áááľá áĽá áááá˝á áá á˝áá á áá°áĽááľá ᣠáĽáŤáľá áááᢠááááŤáąá ááťá á¨áá˝á áĽáá°áá áá - áá áá°á¨á áĽááłáá áľ áŤáá°á¨áą, á¨á፠ááĽááľá á áŤá°ááá.
ááá: hab.com