Evitando a fadiga com Laravel Homestead

179 visualizações

Publicada em

Slides da minha apresentação sobre Vagrant/Homestead no 10º PHP FC MeetUp, do Grupo PHP-DF.

Autor: Danilo Esser

Publicada em: Software
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
179
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Empresas
    Tipos de projeto
    Passado sombrio: compilações manuais, tunning para maquinas fracas, pouca banda.
  • Qto tempo se leva para liberar um novo recurso em produção? (partindo do commit do dev).

    E se for um bug zero-day explorado por hackers q requer urgencia maxima?

    Tempo de resposta da equipe aos erros?


    Porquê devOps?

    Para manter o ritmo das demandas de novos recursos e atualizações,
    a transformação digital devem ser orientada pela entrega contínua e
    deve buscar entregar software de alta qualidade a qualquer momento.

    Romper o lag entre deploys para se manter competitivo no mercado.

    Entrega contínua é uma jornada que leva equipes que possuem processos manuais e roteirizados
    até processos automatizados, padronizados, ágeis, eficientes e de qualidade para toda a empresa,
    e ao mesmo tempo melhoram o lançamentos de novas aplicações.

    Ao longo desta jornada as equipes se tornam mais produtivas, focando no fornecimento de novos recursos e inovações enquanto combatem incêndios e ainda dão manutenção.

    É também uma jornada de escalabilidade, onde muitas empresas começam pequenas,
    automatizando lançamentos para um único projeto ou equipe e, em seguida,
    escalam suas práticas de entrega contínua para múltiplas aplicações e equipes em toda a empresa.
  • DevOps fornece um conjunto de práticas e mudanças culturais -
    apoiados por ferramentas complementares -
    que automatiza o pipeline de entrega de software, permitindo que as organizações para ganhar, servir e reter consumidores melhor e mais rápido do que nunca.

    Como?

    Unindo equipes
    Guiando o desenvolvimento por Builds
    Automatizando testes e validações
    Automatização implantações
    Automatizar infra-estrutura - Como código


  • Prejudica o pipeline de releases corretivas e evolutivas.
  • freelancers externos contratados para trabalhar em nossos projetos…

    Colegas reclamando sobre como reinstalar um ambiente de desenvolvimento por causa de uma atualização do sistema operacional ou de uma biblioteca.

    Ego.. (nginx, apache, zendserver, php built-in server..)

  • Imagine que você está desenvolvendo uma Aplicação com uma equipe de 15 pessoas.
    E que esta Aplicação usa Laravel como Framework backend, Redis, Memcached, Imagemagick, Curl, MySQL, PostgreSQL, e até mesmo MongoDB.

    Além de tudo isso, como requisito básico, as Libs do Laravel necessitam obrigatoriamente do PHP versão 5.3.7 ou superior e a Lib MCrypt do PHP instalada.

    Logicamente, o ideal é ter todas as 15 pessoas da equipe trabalhando neste App com ambientes de desenvolvimento idênticos.

    Afinal, nem todos os desenvolvedores da equipe possuem experiência de Sysops ou são Admins do sistema.

    E Configurar estes ambientes de desenvolvimento de forma idêntica pode ser uma tarefa enorme,
    pois é comum que algumas pessoas usem Mac, enquanto outros usam Linux e outras usam Windows...

    Digamos que na metade do projeto, seja necessário a instalação de uma nova Lib para geração de arquivos PDF.
    E que você precise do pacote "htmldoc" instalado no servidor para gerar estes arquivos.

    Normalmente, todos da equipe teriam que re-configurar seus ambientes, adicionando manualmente este pacote, via comando apt-get ou similar.
    Com Vagrant, é necessário apenas um commit no arquivo de configuração e todo mundo executa apenas um "reload" no seu Vagrant.
    Pronto! Todos do time agora podem gerar arquivos PDF com a lib htmldoc em seus projetos locais.

    Não importa se eles estão no Windows, Linux ou Mac, ambiente de desenvolvimento de todos permanece idêntico.

    O Vagrant administra tudo isso para você para que todos do time possam se concentrar em codificação em vez de ficarem mantendo ambientes de desenvolvimento.
  • Providers (Prestadores de serviço), tais como VirtualBox, VMware, Amazon AWS, e do Digital Ocean, são serviços onde o seu ambiente virtual é criados e hospedado.
    Eles podem ser utilizados localmente (VirtualBox ou VMWare), ou em nuvem, (Amazon e Digital Ocean).

    Provisioners (provisionadores) são ferramentas que permitem que você configure rapidamente o seu servidor para suas necessidades específicas.
    Sua excelência se dá justamente pelo fato de podermos automatizar inúmeros processos de configuração antes mesmo do servidor ser criado.

    Você pode configurar praticamente tudo que será instalado no servidor. Alguns exemplos são PHP, módulos, Apache, Git, Vim, bancos de dados, logins, Xdebug, etc.

    Os dois provisioners mais comumente usados com Vagrant são Puppet e Chef.

    Os provisioners são realmente úteis quando precisamos construir ambientes de testes ou de produção exatamente com as mesmas configurações.

    Ele garante que estes ambientes sejam perfeitamente sincronizados.
  • Nem todos nós temos o luxo de ter uma equipe de devOps para nos auxiliar ou ser um DevOp.
    E pra piorar, frameworks como o Laravel exigem requisitos bem rigorosos.
    Mas isto não é uma coisa ruim. Significa apenas que o Laravel pode fazer muita coisa e usa toneladas de coisas modernas bem legais.

    Homestead é a resposta do projeto Laravel a tudo isso.
    Homestead é uma box "pronta" do Vagrant que tem todas as características necessárias para você usar o Laravel e diversos outros frameworks,
    E tb alguns recursos interessantes adicionais.


    Trata-se de Vagrant Box personalizada. Ela é um pouco diferente do Vagrant puro.
    Nela não há provisionamento (usando Chef ou Puppet).
    Você basicamente usa uma imagem de servidor pré-configurada com Vagrant.
    Ele não só traz simplicidade para equipes pequenas, como também comporta projetos pequenos e médios sob essa configuração de fábrica.

    Ao utilizá-lo, nós eliminamos o transtorno da fase de provisionamento e garantimos uma inicialização rápida sem a necessidade de configurar o servidor.
    Não há setup complexo. Ele permite que você se concentre diretamente no código.
  • Taylor Otwell, the father of Laravel, approves.
  • Basicamente, isso é o que você precisa saber para começar a usar o Homestead.
    Ele permite que você se concentre no código e não no servidor.. e ao mesmo tempo, lhe traz um ambiente familiar e unificado entre o time.

    E é óbvio que você pode utiliza-lo para todos os tipos de projetos PHP como o WordPress, Zend e etc...
  • Evitando a fadiga com Laravel Homestead

    1. 1. Evitandoafadiga com LaravelHomestead By: @DaniloEsser
    2. 2. HelloWorld! Eu sou Danilo Esser ✖ +14 anos de PHP ✖ Zend Certified PHP Developer ✖ Integrante da comunidade PHPDF ✖ Hardcore Gamer, Músico e fã de Memes- lol daniloesser@gmail.com
    3. 3. 57%das organizações estão insatisfeitas com o tempo que se leva para liberar novos recursos e mudanças em produção.
    4. 4. Apenas2% das organizações conseguem realizar um ou mais releases por dia em suas aplicações:
    5. 5. LAMP,WAMP,MAMP,Xampp... ➢Até quando você irá sofrer configurando ambientes de desenvolvimento? ➢Quantas vezes você já usou a desculpa: “mas funciona na minha máquina…”
    6. 6. Problemascomuns: ✖Ambientes desiguais (dev/prod) ✖Ambientes desiguais (entre os devs/Team) ✖Múltiplos servers, uma solução ✖Inúmeras configs de setup inicial ✖Difícil replicação...
    7. 7. ✖ Baixar uma distro Linux ✖ Compilar Apache, PHP, MySQL, Etc... ✖ Configurar Libs como CuRL, ImageMagick, APC, Oci... ✖ Configurar VirtualHosts do Apache.. ✖ Copiar arquivos de Setup/Config via Samba, FTP ou SCP... ✖ Importar databases... ✖ Fazer checkout de repositórios.. Eseaoinvésdevocê... ✖ Especificar em texto simples como o hardware da máquina virtual deve ser configurado e o que deve ser instalado nela, como numa receita. ✖ Fazer checkout do projeto. ✖ Executar "vagrant up" e já começar a trabalhar.
    8. 8. Vagrant!!! Vagrant é rápido, fácil e ajuda você a gerenciar vários ambientes de desenvolvimento ao mesmo tempo de forma eficiente e divertida!
    9. 9. Blz…Masesse talVagrant... oqueé? Providers Boxes Provisioners O Vagrant é um gerenciador de VMs (máquinas virtuais). Através dele é possível definir o ambiente de desenvolvimento onde seu projeto irá rodar. Com suporte para Mac OS, Linux e Windows, consegue atender boa parte dos desenvolvedores. Ele utiliza providers, boxes e se necessário, provisioners.
    10. 10. Ok…edoqueeuprecisobasicamente? ✖ Provider: ✖ Vagrant:
    11. 11. InstalandoOracleVirtualBox
    12. 12. InstalandoOracleVirtualBox
    13. 13. InstalandoOracleVirtualBox
    14. 14. InstalandoOracleVirtualBox
    15. 15. InstalandoVagrant
    16. 16. InstalandoVagrant
    17. 17. InstalandoVagrant
    18. 18. InstalandoVagrant
    19. 19. Testando...
    20. 20. Eagora? http://atlas.hashicorp.com/boxes/search
    21. 21. Eagora? Vagrant up Cria (ou inicia) uma maquina virtual. Vagrant provision Re-executa os scripts de provisionamento na maquina virtual. Vagrant ssh Acessa a maquina virtual via SSH. Vagrant halt Interrompe a maquina virtual em execução. Vagrant destroy Destrói a maquina virtual. Vagrant Box Adiciona, lista, remove ou atualiza os Boxes do Vagrant. Vagrant docker-run Executa um container Docker. P.S: Podemos utilizar qualquer um dos comandos Docker.
    22. 22. VagrantvsDocker
    23. 23. VagrantvsDocker
    24. 24. Resumindo: GrayWhite Black
    25. 25. SpoilerAlert: O único problema do Vagrant é a sua curva de aprendizagem DevOps. Uma coisa é você começar a usar Vagrant, outra coisa (totalmente diferente) é você fazer configuração e provisionamento do seu servidor personalizado utilizando Ansible, Chef ou Puppet.
    26. 26. ProvisionandocomPuppet puphpet/config.yaml Memoria (1GB) memory: '1024' CPU’s cpus: '1' Network private_network: 192.168.10.10 MySQL mysql: install: '1' root_password: 123456 adminer: '1' databases: ptUkwSJZgC0x: grant: - ALL name: app_dev host: localhost user: app_dev password: app_dev sql_file: '' …. ……….. ….….….….…. tools/provision.sh #Update Ubuntu sudo apt-get update; apt-get -f install #Install Packages ##nginx sudo apt-get install nginx --yes ##PHP5-FPM sudo apt-get install php5-fpm php5-cli php5-common php5- curl php5-xdebug php5-gd php5-imagick php5-mcrypt --yes ##MySQL echo "mysql-server-5.5 mysql-server/root_password password root" | debconf-set-selections echo "mysql-server-5.5 mysql-server/root_password_again password root" | debconf-set-selections sudo apt-get -y install mysql-server-5.5 . …. ……….. ….….….….……. ProvisionandocomShellscript
    27. 27. ProvisionandocomChef Vagrantfile config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["cookbooks"] chef.add_recipe :apt chef.add_recipe 'php' chef.add_recipe 'mysql::server' chef.add_recipe 'nginx' chef.add_recipe 'git' chef.json = { :mysql => { :server_root_password => "app_cheff", :server_repl_password => "app_cheff", :server_debian_password => "", :service_name => "mysql", :basedir => "/usr", :data_dir => "/var/lib/mysql", :root_group => "root", :mysqladmin_bin => "/usr/bin/mysqladmin", :mysql_bin => "/usr/bin/mysql", :conf_dir => "/etc/mysql", :confd_dir => "/etc/mysql/conf.d", :socket => "/var/run/mysqld/mysqld.sock", :pid_file => "/var/run/mysqld/mysqld.pid", :grants_path => "/etc/mysql/grants.sql" }, …… Cheffile # encoding: utf-8 site 'https://supermarket.getchef.com/api/v1' cookbook "apt" cookbook "php", {} cookbook "mysql", {} cookbook "nginx", {} cookbook "git", {}
    28. 28. Nãoerapra serfácil? ✖ Chef config... ✖ Puppet config… ✖ Shell Script... ✖ VagrantFile config… ✖ Etc.. etc… etc..
    29. 29. Homestead!!!Homestead é a resposta do Projeto Laravel a todas essas dificuldades. Ele já vem pré- configurado para suprir as necessidades do Framework e de quebra ainda traz diversos recursos populares e essenciais.
    30. 30. Eoqueganhamos comoHomestead? ● Ubuntu 16.04 – Fácil de usar e muito conhecido. ● Git ● PHP 7 – Ultima versão stable. ● Nginx – Rápido, performático e fácil de configurar. ● MariaDB – Vai além do MySQL, oferecendo nível empresarial de alta disponibilidade, escalabilidade e segurança ao MySQL.
    31. 31. Avidaagoraéfácil! Adicionar o Box do Homestead ao Vagrant Configurar o arquivo Homestead.yaml Clonar o Repositório do Homestead Atualizar o arquivo etc/hosts Vagrant up !!!
    32. 32. AdicionandooBoxdoHomesteadaoVagrant Após instalar o Vagrant, basta adicionar o box do Homestead com o seguinte comando: vagrant box add laravel/homestead
    33. 33. Avidaagoraéfacil! Adicionar o Box do Homestead ao Vagrant Configurar o arquivo Homestead.yaml Clonar o Repositório do Homestead Atualizar o arquivo etc/hosts Vagrant up !!!
    34. 34. Clonando oRepositóriodoHomestead O próximo passo é clonar o repositório oficial do Homestead e criar um único arquivo de config: ➔ Instalação do repositório do Homestead: ◆ Global: git clone git@github.com:laravel/homestead.git . ◆ Per project: composer require laravel/homestead --dev ➔ Criação do arquivo Homestead.yaml: ◆ Global: bash init.sh ◆ Per project: php vendor/bin/homestead make
    35. 35. Avidaagoraéfacil! Adicionar o Box do Homestead ao Vagrant Configurar o arquivo Homestead.yaml Clonar o Repositório do Homestead Atualizar o arquivo etc/hosts Vagrant up !!!
    36. 36. Configurando oarquivo Homestead.yaml Para nossa alegria, este é realmente o único arquivo que você precisa editar: provider: virtualbox name: meu-site ip: "192.168.10.10" memory: 2048 cpus: 1 authorize: C:UsersDanilo.sshid_rsa.pub keys: - C:UsersDanilo.sshid_rsa folders: - map: “D:projetosmeu_site” to: “/home/vagrant/meu_site” sites: - map: homestead.app to: “/home/vagrant/meu_site/public” databases: - bd_do_site
    37. 37. Redirecionamento deportas Service Default Forward SSH 22 2222 HTTP 80 8000 HTTPS 443 44300 MySQL 3306 33060 Postgres 5432 54320 ports: - send: 27017 to: 27017 - send: 7777 to: 777 protocol: udp Homestead.yaml
    38. 38. Avidaagoraéfácil! Adicionar o Box do Homestead ao Vagrant Configurar o arquivo Homestead.yaml Clonar o Repositório do Homestead Atualizar o arquivo etc/hosts Vagrant up !!!
    39. 39. Atualizandooarquivo etc/hosts Agora, usando o hostname que escolhemos para o nosso site, basta atualizar o arquivo host local: #127.0.0.1 localhost #::1 localhost 127.0.0.1 homestead.app 127.0.0.1 meu-projeto.local Isto dirá ao computador que o hostname homestead.app está localizado no endereço IP 127.0.0.1 (Que hospeda a nossa VM).
    40. 40. Avidaagoraéfacil! Adicionar o Box do Homestead ao Vagrant Configurar o arquivo Homestead.yaml Clonar o Repositório do Homestead Atualizar o arquivo etc/hosts Vagrant up !!!
    41. 41. That’sit!
    42. 42. SSHTest:
    43. 43. Acessando Bancodedados Quando o Homestead é provisionado, o MySQL e o Postgres já estão instalados com um usuário root. Isto facilita muito o acesso e a gerência destas bases através de um client (Navicat ou similar): MySQL: Host: 127.0.0.1 User: homestead Password: secret Port: 33060 Postgres: Host: 127.0.0.1 User: homestead Password: secret Port: 54320
    44. 44. Criandovariáveisdeambiente Com o Homestead fica realmente muito fácil de criar variáveis de ambiente no servidor. Você pode usar isso para várias coisas como senhas, chaves de API e configuração global. variables: - key: APP_ENV value: local - key: API_KEY value: 123abc - key: API_SECRET value: minh@-s3cr3t $app_env = getenv('APP_ENV'); // returns "local" $api_key = getenv('API_KEY'); // returns "123abc" $api_secret = getenv('API_SECRET'); // returns "minh@-s3cr3t"
    45. 45. Thanks! @daniloesser DaniloEsser@gmail.com Perguntas?
    46. 46. CreditoseReferências ✖ Manuais & Sites oficiais: ○ Vagrant: http://www.vagrantup.com ○ Homestead: https://laravel.com/docs/5.3/homestead ✖ Infos adicionais & imagens: ○ https://www.sitepoint.com/6-reasons-move-laravel-homestead/ ○ https://24ways.org/2014/what-is-vagrant-and-why-should-i-care/ ○ https://scotch.io/tutorials/get-vagrant-up-and-running-in-no-time ○ http://www.ca.com/content/dam/ca/us/files/ebook/onward-and-upward- three-ways-application-release-automation-can-give-lift.pdf

    ×