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. Evitando a fadiga
    com
    Laravel Homestead
    By: @DaniloEsser

    View full-size slide

  2. 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]

    View full-size slide

  3. 57%
    das organizações estão
    insatisfeitas com o tempo que se leva para
    liberar novos recursos e mudanças em produção.

    View full-size slide

  4. Apenas 2%
    das organizações conseguem realizar um ou mais
    releases por dia em suas aplicações:

    View full-size slide

  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…”

    View full-size slide

  6. 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...

    View full-size slide

  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..
    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.

    View full-size slide

  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!

    View full-size slide

  9. 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.

    View full-size slide

  10. Ok… e do que eu preciso basicamente?
    ➔ Provider: ➔ Vagrant:

    View full-size slide

  11. Instalando Oracle VirtualBox

    View full-size slide

  12. Instalando Oracle VirtualBox

    View full-size slide

  13. Instalando Oracle VirtualBox

    View full-size slide

  14. Instalando Oracle VirtualBox

    View full-size slide

  15. Instalando Vagrant

    View full-size slide

  16. Instalando Vagrant

    View full-size slide

  17. Instalando Vagrant

    View full-size slide

  18. Instalando Vagrant

    View full-size slide

  19. E agora?
    http://atlas.hashicorp.com/boxes/search

    View full-size slide

  20. 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.

    View full-size slide

  21. Vagrant vs Docker

    View full-size slide

  22. Vagrant vs Docker

    View full-size slide

  23. Resumindo:
    Gray
    White Black

    View full-size slide

  24. 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.

    View full-size slide

  25. 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

    View full-size slide

  26. 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", {}

    View full-size slide

  27. Não era pra ser fácil?
    ❏ Chef config...
    ❏ Puppet config…
    ❏ Shell Script...
    ❏ VagrantFile config…
    ❏ Etc.. etc… etc..

    View full-size slide

  28. 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.

    View full-size slide

  29. 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

    View full-size slide

  30. 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 !!!

    View full-size slide

  31. 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

    View full-size slide

  32. 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 !!!

    View full-size slide

  33. 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

    View full-size slide

  34. 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 !!!

    View full-size slide

  35. 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

    View full-size slide

  36. 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

    View full-size slide

  37. 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 !!!

    View full-size slide

  38. 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).

    View full-size slide

  39. 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 !!!

    View full-size slide

  40. That’s it!

    View full-size slide

  41. 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

    View full-size slide

  42. 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"

    View full-size slide

  43. Thanks!
    @daniloesser
    [email protected]
    Perguntas?

    View full-size slide

  44. 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

    View full-size slide