Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Evitando a fadiga com Laravel Homestead

PHP DF
September 14, 2016

Evitando a fadiga com Laravel Homestead

Danilo Esser (https://www.linkedin.com/in/daniloesser) nos mostra a facilidade de ter um ambiente configurado e rodando utilizando o Vagrant e o Laravel Homestead.
---
Essa talk aconteceu durante o X PHPFC

PHP DF

September 14, 2016
Tweet

More Decks by PHP DF

Other Decks in Programming

Transcript

  1. Hello World! 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 [email protected]
  2. 57% das organizações estão insatisfeitas com o tempo que se

    leva para liberar novos recursos e mudanças em produção.
  3. 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…”
  4. Problemas comuns: ✖ 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...
  5. ✖ 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.. E se ao invés de você... ★ 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.
  6. Vagrant !!! Vagrant é rápido, fácil e ajuda você a

    gerenciar vários ambientes de desenvolvimento ao mesmo tempo de forma eficiente e divertida!
  7. Blz… Mas esse tal Vagrant... o que é? 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.
  8. E agora? 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.
  9. Spoiler Alert: 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.
  10. Provisionando com Puppet 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 . …. ……….. ….….….….……. Provisionando com Shellscript
  11. Provisionando com Chef 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", {}
  12. Não era pra ser fácil? ❏ Chef config... ❏ Puppet

    config… ❏ Shell Script... ❏ VagrantFile config… ❏ Etc.. etc… etc..
  13. 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.
  14. E o que ganhamos com o Homestead ? • 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. • Postgres • Composer • Node (com PM2, Bower, Grunt e Gulp) – Todas as Front-End tools + task runners • Redis – Cache de chave/valor de alta performance. • Memcached – Ferramenta de Cache • Beanstalkd – Queue server fácil de usar. • Sqlite3
  15. A vida agora é 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 !!!
  16. Adicionando o Box do Homestead ao Vagrant Após instalar o

    Vagrant, basta adicionar o box do Homestead com o seguinte comando: vagrant box add laravel/homestead
  17. A vida agora é 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 !!!
  18. Clonando o Repositório do Homestead 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 [email protected]: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
  19. A vida agora é 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 !!!
  20. Configurando o arquivo 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:\Users\Danilo\.ssh\id_rsa.pub keys: - C:\Users\Danilo\.ssh\id_rsa folders: - map: “D:\projetos\meu_site” to: “/home/vagrant/meu_site” sites: - map: homestead.app to: “/home/vagrant/meu_site/public” databases: - bd_do_site
  21. Redirecionamento de portas 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
  22. A vida agora é 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 !!!
  23. Atualizando o arquivo 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).
  24. A vida agora é 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 !!!
  25. Acessando Banco de dados 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
  26. Criando variáveis de ambiente 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"
  27. Creditos e Referê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-t hree-ways-application-release-automation-can-give-lift.pdf