Upgrade to Pro — share decks privately, control downloads, hide ads and more …

From Development to Production with Vagrant and Ansible

From Development to Production with Vagrant and Ansible

Palestra apresentada no PHP Experience

Erika Heidi

April 25, 2015
Tweet

More Decks by Erika Heidi

Other Decks in Programming

Transcript

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

    “A culpa é do servidor” • “A culpa é da aplicação” • “Instala só mais esse pacote”
  2. DRIVE • Descartável • Replicável • Isolado • Versionado •

    (Environment) Máquinas Virtuais, Containers Ferramentas de Config Management (automação)
  3. 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!
  4. 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
  5. 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
  6. Exemplo de Playbook --- - hosts: all sudo: true tasks:

    - name: Update apt-cache apt: update_cache=yes - name: Install Nginx apt: pkg=nginx state=latest
  7. 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
  8. 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
  9. 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]
  10. 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
  11. 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