Construção e provisionamento de ambientes de desenvolvimento virtualizados

Construção e provisionamento de ambientes
de desenvolvimento virtualizados
Thiago Rodrigues
Eng. de Software Sr.
CI&T - PHPSP
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
Quem nunca?
Agenda
● Ambiente de desenvolvimento
● Problemas comuns
● Virtualização como possível solução
● Vagrant
● Docker
● Conclusões
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.
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.
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?
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!
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?
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.
Solução
Solução Ráááááá...
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.
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ó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
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.
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
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
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
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çã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;
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.
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
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
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
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
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 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.
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 ;)
Contato
xthiago@gmail.com
xthiago.com
+ PHP dia 20/agosto em Campinas:
phpspima.com.br
1 of 30

Recommended

Depurando aplicações PHP like a BOSS by
Depurando aplicações PHP like a BOSSDepurando aplicações PHP like a BOSS
Depurando aplicações PHP like a BOSSThiago Rodrigues
1.2K views36 slides
Impacto dos frameworks PHP by
Impacto dos frameworks PHPImpacto dos frameworks PHP
Impacto dos frameworks PHPThiago Rodrigues
1K views25 slides
1001 maneiras de debugar o WordPress by
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
101 views33 slides
Criando microsserviços em PHP by
Criando microsserviços em PHPCriando microsserviços em PHP
Criando microsserviços em PHPFlávio Lisboa
2.9K views45 slides
Começando errado com php by
Começando errado com phpComeçando errado com php
Começando errado com phpMarcelo Felipe Santiago Diniz
747 views22 slides
O que esperar do framework Laminas by
O que esperar do framework LaminasO que esperar do framework Laminas
O que esperar do framework LaminasFlávio Lisboa
1.6K views28 slides

More Related Content

What's hot

Mocking Test - ThinkUp! - Abril/2017 by
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Renato Groff
1.3K views34 slides
.NET Core e Testes de Unidade - Visual Studio Summit 2017 by
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017Renato Groff
537 views11 slides
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev... by
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Renato Groffe
449 views9 slides
PHP: Como não programar em POG by
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POGCicero Joasyo Mateus de Moura
330 views41 slides
Performance de verdade com Phalcon Framework by
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
730 views26 slides
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD... by
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...Renato Groffe
709 views13 slides

What's hot(20)

Mocking Test - ThinkUp! - Abril/2017 by Renato Groff
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
Renato Groff1.3K views
.NET Core e Testes de Unidade - Visual Studio Summit 2017 by Renato Groff
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017
Renato Groff537 views
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev... by Renato Groffe
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Renato Groffe449 views
Performance de verdade com Phalcon Framework by Jaime Neto
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
Jaime Neto730 views
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD... by Renato Groffe
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
Renato Groffe709 views
Test-Driven Development (TDD) - MSP Coding Day by Renato Groff
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
Renato Groff378 views
Behavior-Driven Development (BDD) - QA Ninja Conf 2016 by Renato Groff
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Renato Groff664 views
Testes de interfaces Web com Selenium by Renato Groff
Testes de interfaces Web com SeleniumTestes de interfaces Web com Selenium
Testes de interfaces Web com Selenium
Renato Groff939 views
Behavior-Driven Development (BDD) - DevOps Summit 2016 by Renato Groff
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
Renato Groff882 views
Contribuindo e criando software livre by Vitor Mattos
Contribuindo e criando software livreContribuindo e criando software livre
Contribuindo e criando software livre
Vitor Mattos437 views
Zend Framework: Reuso e extensão de componentes para fácil manutenção by Flávio Lisboa
Zend Framework: Reuso e extensão de componentes para fácil manutençãoZend Framework: Reuso e extensão de componentes para fácil manutenção
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Flávio Lisboa756 views
Pense no futuro: PHP com Zend Framework by Flávio Lisboa
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
Flávio Lisboa610 views
Certificação Zend Framework by Jaime Neto
Certificação Zend FrameworkCertificação Zend Framework
Certificação Zend Framework
Jaime Neto1.3K views
Mocking Test - QA Ninja Conf 2016 by Renato Groff
Mocking Test - QA Ninja Conf 2016Mocking Test - QA Ninja Conf 2016
Mocking Test - QA Ninja Conf 2016
Renato Groff427 views
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC by Flávio Lisboa
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Flávio Lisboa5.9K views
Django: desenvolvendo aplicações web de maneira simples e rápida! by Felipe Queiroz
Django: desenvolvendo aplicações web de maneira simples e rápida!Django: desenvolvendo aplicações web de maneira simples e rápida!
Django: desenvolvendo aplicações web de maneira simples e rápida!
Felipe Queiroz3.2K views
BDD (Behavior-Driven Development) - Setembro/2015 by Renato Groff
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
Renato Groff1.6K views

Viewers also liked

Modern PHP by
Modern PHPModern PHP
Modern PHPAri Stopassola Junior
1.4K views100 slides
DevOps by
DevOpsDevOps
DevOpsRafael Azevedo
2K views25 slides
DEV-OPS para teste de software by
DEV-OPS para teste de softwareDEV-OPS para teste de software
DEV-OPS para teste de softwareQualister
1.4K views21 slides
Doctrine for Dummies by
Doctrine for DummiesDoctrine for Dummies
Doctrine for DummiesAri Stopassola Junior
571 views40 slides
DevOps by
DevOpsDevOps
DevOpsMatthew Jones
74.2K views47 slides
DevOps: A Culture Transformation, More than Technology by
DevOps: A Culture Transformation, More than TechnologyDevOps: A Culture Transformation, More than Technology
DevOps: A Culture Transformation, More than TechnologyCA Technologies
33.5K views44 slides

Viewers also liked(9)

Similar to Construção e provisionamento de ambientes de desenvolvimento virtualizados

Vagrant uma ferramenta realmente útil e versátil by
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
587 views27 slides
Programação Multiplataforma em Ambiente Web by
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente WebIsrael Messias
403 views59 slides
Evitando a fadiga com Laravel Homestead by
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
1K views47 slides
PHP com Docker by
PHP com DockerPHP com Docker
PHP com DockerJefferson Souza
136 views32 slides
Cake Php by
Cake PhpCake Php
Cake PhpLaura Lopes
3.6K views79 slides
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ... by
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Eliel Simoncelo
32 views95 slides

Similar to Construção e provisionamento de ambientes de desenvolvimento virtualizados(20)

Programação Multiplataforma em Ambiente Web by Israel Messias
Programação Multiplataforma em Ambiente WebProgramação Multiplataforma em Ambiente Web
Programação Multiplataforma em Ambiente Web
Israel Messias403 views
Evitando a fadiga com Laravel Homestead by Danilo Esser
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
Danilo Esser1K views
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ... by Eliel Simoncelo
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Eliel Simoncelo32 views
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress by Tiago Hillebrandt
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Tiago Hillebrandt228 views
Google App Engine e PHP by Luiz Messias
Google App Engine e PHPGoogle App Engine e PHP
Google App Engine e PHP
Luiz Messias638 views
Desenvolvendo com PHP e Docker by Waldemar Neto
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
Waldemar Neto382 views
Desenvolvendo para WordPress com Docker, Git e WP-CLI by Rudá Almeida
Desenvolvendo para WordPress com Docker, Git e WP-CLIDesenvolvendo para WordPress com Docker, Git e WP-CLI
Desenvolvendo para WordPress com Docker, Git e WP-CLI
Rudá Almeida2.1K views
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag... by Renato Groff
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Renato Groff1.3K views
Aplicações Profissionais para Internet com Zend Framework by Flávio Lisboa
Aplicações Profissionais para Internet com Zend FrameworkAplicações Profissionais para Internet com Zend Framework
Aplicações Profissionais para Internet com Zend Framework
Flávio Lisboa890 views
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ... by tdc-globalcode
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode44 views
Xdebug seus problemas acabaram - tdc floripa 2017 by Vitor Mattos
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
Vitor Mattos480 views
Containers com docker #CPRecife4 by David Ruiz
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
David Ruiz507 views

Construção e provisionamento de ambientes de desenvolvimento virtualizados

  • 1. Construção e provisionamento de ambientes de desenvolvimento virtualizados Thiago Rodrigues Eng. de Software Sr. CI&T - PHPSP
  • 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
  • 4. Agenda ● Ambiente de desenvolvimento ● Problemas comuns ● Virtualização como possível solução ● Vagrant ● Docker ● Conclusões
  • 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. 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. 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. 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. 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. 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.
  • 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. Principais ferramentas de virtualização Vagrant e Docker Máquinas virtuais vs Containers
  • 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. 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. 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. 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. 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. Vagrant - Prática clique na imagem p/abrir o vídeo no YouTube
  • 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. 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. 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. 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. 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. 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. Docker Compose - Prática clique na imagem p/abrir o vídeo no YouTube
  • 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. 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. Contato xthiago@gmail.com xthiago.com + PHP dia 20/agosto em Campinas: phpspima.com.br