From Development to Production with Vagrant and Ansible

From Development to Production with Vagrant and Ansible

Palestra apresentada no PHP Experience

719435d98d452de7ac367c828266cf01?s=128

Erika Heidi

April 25, 2015
Tweet

Transcript

  1. 1.
  2. 2.
  3. 4.

    Developers vs. SysAdmins • “Mas funciona na minha máquina!!!” •

    “A culpa é do servidor” • “A culpa é da aplicação” • “Instala só mais esse pacote”
  4. 7.

    DRIVE • Descartável • Replicável • Isolado • Versionado •

    (Environment) Máquinas Virtuais, Containers Ferramentas de Config Management (automação)
  5. 8.

    Ferramentas de Config Mgmt • Puppet, Chef, Ansible... • Grande

    evolução nos últimos anos • Mais acessível para desenvolvedores • Não estão limitadas a ambientes em produção!
  6. 10.

    OpsFirst • OPS antes de DEV • Objetivo: facilitar a

    transição de DEV para PROD • Trazendo os benefícios de ferramentas de configuração para a fase inicial de desenvolvimento • Facilita bastante o deploy na fase final do projeto
  7. 12.
  8. 13.

    Ansible – visão geral • Usa uma linguagem simples –

    YAML • Bastante “developer-friendly” • Grande quantidade de módulos built-in • Arquitetura “agentless” - usa apenas SSH • Usado por grandes nomes como Twitter, Atlassian, até NASA
  9. 14.

    Exemplo de Playbook --- - hosts: all sudo: true tasks:

    - name: Update apt-cache apt: update_cache=yes - name: Install Nginx apt: pkg=nginx state=latest
  10. 16.

    Usando Ansible com Vagrant #Vagrantfile Vagrant.configure("2") do |config| config.vm.box =

    "hashicorp/precise64" config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" end end
  11. 17.
  12. 19.
  13. 20.
  14. 22.
  15. 25.

    Configuração SSH • Cenário ideal: conectar com um simples ssh

    meu-servidor • Crie um usuário no servidor • Adicione ao sudoers com NOPASSWD • Copie a chave SSH local com ssh-copy-id • Instruções detalhadas: bit.ly/ansible-ssh
  16. 26.

    Ansible standalone: comandos ad-hoc $ ansible all -m ping $

    ansible webservers -a “php -v” $ ansible all -i staging -a “sudo apt-get update” ansible group [-i inventory] [-m module]
  17. 27.

    Ansible standalone: executando playbooks $ ansible-playbook -i staging -l webservers

    playbook.yml $ ansible-playbook playbook.yml --list-hosts $ ansible-playbook playbook.yml --list-tasks ansible-playbook [-i inventory] [-l group] playbook.yml
  18. 29.

    group_vars project_root: /vagrant doc_root: /vagrant/web sys_packages: ["vim"] system_user: vagrant system_group:

    vagrant group_vars/phansible-web project_root: /var/www doc_root: /var/www/web sys_packages: ["vim","fail2ban"] system_user: www-data system_group: www-data project_root: /vagrant doc_root: /vagrant/web sys_packages: ["vim"] system_user: vagrant system_group: vagrant project_root: /vagrant doc_root: /vagrant/web sys_packages: ["vim"] system_user: vagrant system_group: vagrant group_vars/staging