Successfully reported this slideshow.
Your SlideShare is downloading. ×

Construção e provisionamento de ambientes de desenvolvimento virtualizados

Ad

Construção e provisionamento de ambientes
de desenvolvimento virtualizados
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PH...

Ad

Thiago Rodrigues
Bacharel em Sistemas de Informação pela
Universidade do Estado de Minas Gerais (UEMG);
Engenheiro de Soft...

Ad

Quem nunca?

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Loading in …3
×

Check these out next

1 of 30 Ad
1 of 30 Ad

More Related Content

Slideshows for you (19)

Construção e provisionamento de ambientes de desenvolvimento virtualizados

  1. 1. Construção e provisionamento de ambientes de desenvolvimento virtualizados Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP
  2. 2. Thiago Rodrigues Bacharel em Sistemas de Informação pela Universidade do Estado de Minas Gerais (UEMG); Engenheiro de Software Sênior na CI&T Programador PHP há 11 anos; Evangelista PHPSP e co-organizador do PHPSP Campinas Entusiasta do software livre Gammer
  3. 3. Quem nunca?
  4. 4. Agenda ● Ambiente de desenvolvimento ● Problemas comuns ● Virtualização como possível solução ● Vagrant ● Docker ● Conclusões
  5. 5. Ambiente de desenvolvimento Definição quase formal: Ambiente onde as aplicações são desenvolvidas. Geralmente montado no computador do desenvolvedor. Possui ferramentas necessárias para execução da aplicação. Semelhante ao ambiente de produção (onde a aplicação será usada). Contém ferramentas que auxiliam no desenvolvimento.
  6. 6. Exemplo de ambiente de desenvolvimento Ambiente de um site feito em Drupal 8 ● Drupal 8 ● Composer ● Sistema operacional (Linux, Windows, etc) ● Servidor Web (Apache, Nginx, etc) ● PHP + módulos requeridos ● SGBD (MySQL, PostgreSQL, etc) ● Ferramentas de desenvolvimento (Drush, XDebug, scripts de build, etc). Em suma: a construção do ambiente não é simples, tampouco trivial.
  7. 7. Problemas comuns Documentação O que tem que instalar? Qual versão? É necessário definir alguma configuração? Quem vai lembrar daqui 1 ano? E se o projeto for engavetado e ressurgir no futuro? Se algo mudar, alguém vai atualizar?
  8. 8. Problemas comuns Atualizações & Contribuições Como agir quando precisamos atualizar as configurações do ambiente? Como garantir que todos os devs apliquem as mudanças? Como as pessoas podem contribuir? Precisamos que todos atualizem a versão do PHP para versão 7.1! Troquem o valor da diretiva error_reporting para E_ALL no php.ini. Todos atualizem o script de build para a nova versão!
  9. 9. Problemas comuns Tempo de construção Quanto tempo é necessário para preparar o ambiente? Será necessário que outro desenvolvedor ajude no procedimento? E se for necessário reinstalar o SO ou montar o ambiente em outra máquina?
  10. 10. Problemas comuns Outros problemas Como lidar com as preferências pessoais de cada desenvolvedor? Como lidar com problemas do ambiente? Ex: bug na versão da biblioteca cURL do Ubuntu 14.04.
  11. 11. Solução
  12. 12. Solução Ráááááá...
  13. 13. Solução Virtualizar o ambiente de desenvolvimento Isso permite: ● automação da construção (provisionamento); ● padronização do ambiente; ● versionamento do ambiente; ● independência do SO hospedeiro e das preferencias do usuário; ● reduz o tempo de preparação ● facilita atualizações & contribuições; ● dispensa documentação, basta um README.md informando como provisionar.
  14. 14. Principais ferramentas de virtualização Vagrant e Docker Máquinas virtuais vs Containers
  15. 15. Vagrant Automatiza a criação e provisionamento de máquinas virtuais. Abstrai detalhes das ferramentas de virtualização. Prós: - simples e fácil - funciona bem em Linux, Windows e Mac - extensível através de plugins Contras: - overhead do SO da máquina Virtual; - destina-se somente para ambiente de desenvolvimento
  16. 16. Vagrant - conceitos básicos Provider: ferramenta de virtualização. Pode ser: VirtualBox, VMware, DigitalOcean, Amazon AWS, etc. Box: pacote Vagrant contendo o ambiente. Existem diversos na internet. É possível criar um do 0 ou usar um pronto. https://atlas.hashicorp.com/boxes/search Provisioner: método de provisionamento. Pode ser shell, Ansible, Chef, Puppet, etc. Vagrantfile: arquivo de configuração onde as opções acima são especificadas.
  17. 17. Vagrant - ambiente com PHP + Apache + MySQL cd ~/projetos/drupalcamp vagrant init hashicorp/precise64 Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :shell, :path => "provisionamento.sh" config.vm.network :forwarded_port, host: 2015, guest: 80 config.vm.synced_folder ".", "/files" end Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  18. 18. Vagrant - ambiente com PHP + Apache + MySQL vim provisionamento.sh #!/usr/bin/env bash sudo apt-get install -y php5 apache2 libapache2-mod-php5 php5-mysql mysql-server sudo rm -rf /var/www/ sudo ln -sf /files /var/www echo "<?php phpinfo(); ?>" > /var/www/index.php echo ">>> Provisionamento finalizado. Acesse: http://127.0.0.1:2015" Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  19. 19. Vagrant - Principais comandos Subir a máquina virtual (VM): vagrant up Reiniciar a VM: vagrant restart Desligar a VM: vagrant halt Destruir VM: vagrant destroy Conectar-se na VM via SSH: vagrant ssh
  20. 20. Vagrant - Prática clique na imagem p/abrir o vídeo no YouTube
  21. 21. Docker + Docker Compose Docker oferece um ecossistema muito além do ambiente de desenvolvimento, que abrange também produção e deploy. Docker Compose visa definir e executar containers docker através de um único arquivo. Prós: - leve (principalmente em Linux) - imagens são reutilizáveis e fácilmente extendidas; - pode ser usado em produção; - containers isolados; Contras: - necessita de VM no Windows e Mac; - mais complicado que Vagrant;
  22. 22. Docker + Docker Compose - conceitos básicos Imagem: é o template do container. Similar ao Box do Vagrant. https://hub.docker.com/ Container: é a instância da imagem. A grosso modo é um processo isolado do SO que possui acesso limitado a CPU, memória, file system e rede. São efêmeros, sendo necessário commitar alterações. Dockerfile: arquivo que descreve ao Docker como construir uma imagem. docker-compose.yml: arquivo que especifica os serviços (containers), a ligação entre eles, variáveis de ambiente, portas, etc.
  23. 23. Docker - ambiente com PHP + Apache + MySQL Dockerfile FROM php:7-apache MAINTAINER Thiago Rodrigues <thiago@phpsp.org.br> RUN apt-get update && apt-cache search xdebug && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev libpng12-dev && docker-php-ext-install -j$(nproc) iconv mcrypt pdo_mysql RUN pecl install xdebug && docker-php-ext-enable xdebug RUN a2enmod rewrite Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  24. 24. Docker - ambiente com PHP + Apache + MySQL docker-compose.yml - parte 1 mysqlphpsp: image: mysql:5.5 container_name: mysqlphpsp ports: - "2017:3306" volumes: - ./config/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: name MYSQL_USER: admin MYSQL_PASSWORD: admin Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  25. 25. Docker - ambiente com PHP + Apache + MySQL docker-compose.yml - parte 2 phpsp: build: . container_name: phpsp command: "/data/php-apache.sh" volumes: - .:/var/www/phpsp - ./config/apache/phpsp.conf:/etc/apache2/sites-enabled/phpsp.conf - ./config/php/php.ini:/usr/local/etc/php/php.ini - ./config/php:/data ports: - "2016:80" links: - mysqlphpsp environment: APACHE_LOG_DIR: /var/log/apache2 working_dir: /var/www/phpsp Código completo em: https://github.com/xthiago/palestra-vagrant-docker
  26. 26. Docker Compose - Principais comandos Subir containers: docker-compose up -d Listar containers: docker-compose ls Reiniciar os containers: docker-compose restart Desligar containers: docker-compose stop Destruir constainers (desligados): docker-compose rm Conectar-se ao container: docker exec -it NOME_CONTAINER
  27. 27. Docker Compose - Prática clique na imagem p/abrir o vídeo no YouTube
  28. 28. Algumas recomendações ● Incluir arquivos do Vagrant/Docker no repositório de código da aplicação. ○ permite que outros entendam e contribuam ○ facilita a distribuição de alterações ○ garante rastreabilidade das alterações - Algo saiu errado? Reverta ;) ● Mapear diretório de scripts do repositório no $PATH da VM/container. ● Vagrant: usar NFS para aumentar a performance ● Subir a imagem para o Docker Hub - poupa o tempo de construção. ○ Plus: integrar com Github para fazer builds automáticos ● Colocar arquivo Vagrantfile no gitignore. Incluir no repo versão com sufixo .dist. ○ isso permite que devs façam pequenas customizações sem afetar ambiente de outros. Ex: quantidade de memória RAM.
  29. 29. Conclusão Ambas ferramentas são sólidas e oferecem recursos que mitigam os problemas citados previamente. use Vagrant se ● deseja algo mais simples ● não possui muito tempo para estudar use Docker se ● possui uma arquitetura complexa ● almeja maior paridade com produção ● almeja uma ferramenta que possa ser usada em produção ● procura diversão ;)
  30. 30. Contato xthiago@gmail.com xthiago.com + PHP dia 20/agosto em Campinas: phpspima.com.br

×