Slide 1

Slide 1 text

Evitando a fadiga com Laravel Homestead By: @DaniloEsser

Slide 2

Slide 2 text

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]

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Vagrant !!! Vagrant é rápido, fácil e ajuda você a gerenciar vários ambientes de desenvolvimento ao mesmo tempo de forma eficiente e divertida!

Slide 9

Slide 9 text

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.

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Instalando Oracle VirtualBox

Slide 12

Slide 12 text

Instalando Oracle VirtualBox

Slide 13

Slide 13 text

Instalando Oracle VirtualBox

Slide 14

Slide 14 text

Instalando Oracle VirtualBox

Slide 15

Slide 15 text

Instalando Vagrant

Slide 16

Slide 16 text

Instalando Vagrant

Slide 17

Slide 17 text

Instalando Vagrant

Slide 18

Slide 18 text

Instalando Vagrant

Slide 19

Slide 19 text

Testando...

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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.

Slide 22

Slide 22 text

Vagrant vs Docker

Slide 23

Slide 23 text

Vagrant vs Docker

Slide 24

Slide 24 text

Resumindo: Gray White Black

Slide 25

Slide 25 text

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.

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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.

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

That’s it!

Slide 42

Slide 42 text

SSH Test:

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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"

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

Thanks! @daniloesser [email protected] Perguntas?

Slide 47

Slide 47 text

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