Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Construção e provisionamento de ambientes
de desenvolvimento virtualizados
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PH...
Thiago Rodrigues
Bacharel em Sistemas de Informação pela
Universidade do Estado de Minas Gerais (UEMG);
Engenheiro de Soft...
Quem nunca?
Agenda
● Ambiente de desenvolvimento
● Problemas comuns
● Virtualização como possível solução
● Vagrant
● Docker
● Conclus...
Ambiente de desenvolvimento
Definição quase formal:
Ambiente onde as aplicações são desenvolvidas.
Geralmente montado no c...
Exemplo de ambiente de desenvolvimento
Ambiente de um site feito em Drupal 8
● Drupal 8
● Composer
● Sistema operacional (...
Problemas comuns
Documentação
O que tem que instalar?
Qual versão?
É necessário definir alguma configuração?
Quem vai lemb...
Problemas comuns
Atualizações & Contribuições
Como agir quando precisamos atualizar as configurações do ambiente?
Como gar...
Problemas comuns
Tempo de construção
Quanto tempo é necessário para preparar o ambiente?
Será necessário que outro desenvo...
Problemas comuns
Outros problemas
Como lidar com as preferências pessoais de cada desenvolvedor?
Como lidar com problemas ...
Solução
Solução Ráááááá...
Solução
Virtualizar o ambiente de desenvolvimento
Isso permite:
● automação da construção (provisionamento);
● padronizaçã...
Principais ferramentas de virtualização
Vagrant e Docker
Máquinas virtuais vs Containers
Vagrant
Automatiza a criação e provisionamento de máquinas virtuais.
Abstrai detalhes das ferramentas de virtualização.
Pr...
Vagrant - conceitos básicos
Provider: ferramenta de virtualização. Pode ser: VirtualBox,
VMware, DigitalOcean, Amazon AWS,...
Vagrant - ambiente com PHP + Apache + MySQL
cd ~/projetos/drupalcamp
vagrant init hashicorp/precise64
Vagrant.configure(2)...
Vagrant - ambiente com PHP + Apache + MySQL
vim provisionamento.sh
#!/usr/bin/env bash
sudo apt-get install -y php5 apache...
Vagrant - Principais comandos
Subir a máquina virtual (VM):
vagrant up
Reiniciar a VM:
vagrant restart
Desligar a VM:
vagr...
Vagrant - Prática
clique na imagem p/abrir o
vídeo no YouTube
Docker + Docker Compose
Docker oferece um ecossistema muito além do ambiente de
desenvolvimento, que abrange também produç...
Docker + Docker Compose - conceitos básicos
Imagem: é o template do container. Similar ao Box do Vagrant.
https://hub.dock...
Docker - ambiente com PHP + Apache + MySQL
Dockerfile
FROM php:7-apache
MAINTAINER Thiago Rodrigues <thiago@phpsp.org.br>
...
Docker - ambiente com PHP + Apache + MySQL
docker-compose.yml - parte 1
mysqlphpsp:
image: mysql:5.5
container_name: mysql...
Docker - ambiente com PHP + Apache + MySQL
docker-compose.yml - parte 2
phpsp:
build: .
container_name: phpsp
command: "/d...
Docker Compose - Principais comandos
Subir containers:
docker-compose up -d
Listar containers:
docker-compose ls
Reiniciar...
Docker Compose - Prática
clique na imagem p/abrir o
vídeo no YouTube
Algumas recomendações
● Incluir arquivos do Vagrant/Docker no repositório de código
da aplicação.
○ permite que outros ent...
Conclusão
Ambas ferramentas são sólidas e oferecem recursos que mitigam
os problemas citados previamente.
use Vagrant se
●...
Contato
xthiago@gmail.com
xthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br
Upcoming SlideShare
Loading in …5
×

Construção e provisionamento de ambientes de desenvolvimento virtualizados

767 views

Published on

Apresentado no dia 25/06/2016 na DrupalCamp Campinas 2016.

Published in: Software
  • Be the first to comment

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

×