Pro Yearly is on sale from $80 to $50! »

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. None
  2. whoami

  3. AMBIENTES DE DESENVOLVIMENTO

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

    “A culpa é do servidor” • “A culpa é da aplicação” • “Instala só mais esse pacote”
  5. Como garantir um processo de desenvolvimento mais consistente?

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

    (Environment)
  7. DRIVE • Descartável • Replicável • Isolado • Versionado •

    (Environment) Máquinas Virtuais, Containers Ferramentas de Config Management (automação)
  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!
  9. OPSFIRST Não deixe para amanhã o que pode melhorar seu

    workflow HOJE
  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
  11. OPSFIRST NA PRÁTICA com Vagrant e Ansible

  12. None
  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
  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
  15. Criando Playbooks: recursos importantes • Variáveis • Loops • Condicionais

    • Templates • Ansible Vault
  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
  17. None
  18. Usando o PHANSIBLE Como “boilerplate”

  19. None
  20. None
  21. Passando para Multistage

  22. None
  23. Um pouco sobre Ansible Standalone

  24. Inventórios [phansible-web] 192.168.33.99 ansible/inventories/dev [staging] 104.131.202.76 ansible/inventories/staging

  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
  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]
  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
  28. PROTIP: VARIÁVEIS DE GRUPO

  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
  30. PERGUNTAS?

  31. https://joind.in/14359