Evitando a fadiga com Laravel Homestead

47
Evitando a fadiga com Laravel Homestead By: @DaniloEsser

Transcript of Evitando a fadiga com Laravel Homestead

Page 1: Evitando a fadiga com Laravel Homestead

Evitando a fadiga com

Laravel Homestead

By: @DaniloEsser

Page 2: Evitando a fadiga com Laravel Homestead

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]

Page 3: Evitando a fadiga com Laravel Homestead

57%das organizações estão

insatisfeitas com o tempo que se leva paraliberar novos recursos e mudanças em produção.

Page 4: Evitando a fadiga com Laravel Homestead

Apenas 2%das organizações conseguem realizar um ou mais

releases por dia em suas aplicações:

Page 5: Evitando a fadiga com Laravel Homestead

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

Page 6: Evitando a fadiga com Laravel Homestead

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

Page 7: Evitando a fadiga com Laravel Homestead

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

Page 8: Evitando a fadiga com Laravel Homestead

Vagrant !!!Vagrant é rápido, fácil e ajuda você a

gerenciar vários ambientes de desenvolvimento ao mesmo tempo de forma

eficiente e divertida!

Page 9: Evitando a fadiga com Laravel Homestead

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.

Page 10: Evitando a fadiga com Laravel Homestead

Ok… e do que eu preciso basicamente?

✖ Provider: ✖ Vagrant:

Page 11: Evitando a fadiga com Laravel Homestead

Instalando Oracle VirtualBox

Page 12: Evitando a fadiga com Laravel Homestead

Instalando Oracle VirtualBox

Page 13: Evitando a fadiga com Laravel Homestead

Instalando Oracle VirtualBox

Page 14: Evitando a fadiga com Laravel Homestead

Instalando Oracle VirtualBox

Page 15: Evitando a fadiga com Laravel Homestead

Instalando Vagrant

Page 16: Evitando a fadiga com Laravel Homestead

Instalando Vagrant

Page 17: Evitando a fadiga com Laravel Homestead

Instalando Vagrant

Page 18: Evitando a fadiga com Laravel Homestead

Instalando Vagrant

Page 19: Evitando a fadiga com Laravel Homestead

Testando...

Page 20: Evitando a fadiga com Laravel Homestead

E agora?

http://atlas.hashicorp.com/boxes/search

Page 21: Evitando a fadiga com Laravel Homestead

E agora?

Vagrant upCria (ou inicia) uma maquina virtual.

Vagrant provisionRe-executa os scripts de provisionamento na maquina virtual.

Vagrant sshAcessa a maquina virtual via SSH.

Vagrant haltInterrompe a maquina virtual em execução.

Vagrant destroyDestrói a maquina virtual.

Vagrant BoxAdiciona, lista, remove ou atualiza os Boxes do Vagrant.

Vagrant docker-run

Executa um container Docker.P.S: Podemos utilizar qualquer um dos comandos Docker.

Page 22: Evitando a fadiga com Laravel Homestead

Vagrant vs Docker

Page 23: Evitando a fadiga com Laravel Homestead

Vagrant vs Docker

Page 24: Evitando a fadiga com Laravel Homestead

Resumindo:

GrayWhite Black

Page 25: Evitando a fadiga com Laravel Homestead

Spoiler Alert:O único problema do Vagrant é a sua curva deaprendizagem DevOps. Uma coisa é você começar a usarVagrant, outra coisa (totalmente diferente) é você fazerconfiguração e provisionamento do seu servidorpersonalizado utilizando Ansible, Chef ou Puppet.

Page 26: Evitando a fadiga com Laravel Homestead

Provisionando com Puppet puphpet/config.yaml

Memoria (1GB)memory: '1024'

CPU’scpus: '1'

Networkprivate_network: 192.168.10.10

MySQLmysql:

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

Page 27: Evitando a fadiga com Laravel Homestead

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

Page 28: Evitando a fadiga com Laravel Homestead

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

Page 29: Evitando a fadiga com Laravel Homestead

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.

Page 30: Evitando a fadiga com Laravel Homestead

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

Page 31: Evitando a fadiga com Laravel Homestead

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

Page 32: Evitando a fadiga com Laravel Homestead

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

Page 33: Evitando a fadiga com Laravel Homestead

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

Page 34: Evitando a fadiga com Laravel Homestead

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

Page 35: Evitando a fadiga com Laravel Homestead

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

Page 36: Evitando a fadiga com Laravel Homestead

Configurando o arquivo Homestead.yamlPara nossa alegria, este é realmente o único arquivo que você precisa editar:

provider: virtualboxname: meu-siteip: "192.168.10.10"memory: 2048cpus: 1

authorize: C:\Users\Danilo\.ssh\id_rsa.pubkeys:

- 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

Page 37: Evitando a fadiga com Laravel Homestead

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

Page 38: Evitando a fadiga com Laravel Homestead

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

Page 39: Evitando a fadiga com Laravel Homestead

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

Page 40: Evitando a fadiga com Laravel Homestead

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

Page 41: Evitando a fadiga com Laravel Homestead

That’s it!

Page 42: Evitando a fadiga com Laravel Homestead

SSH Test:

Page 43: Evitando a fadiga com Laravel Homestead

Acessando Banco de dadosQuando 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: homesteadPassword: secretPort: 33060

Postgres:Host: 127.0.0.1

User: homesteadPassword: secretPort: 54320

Page 44: Evitando a fadiga com Laravel Homestead

Criando variáveis de ambienteCom 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_ENVvalue: local

- key: API_KEYvalue: 123abc

- key: API_SECRETvalue: minh@-s3cr3t

$app_env = getenv('APP_ENV'); // returns "local"

$api_key = getenv('API_KEY'); // returns "123abc"

$api_secret = getenv('API_SECRET'); // returns "minh@-s3cr3t"

Page 45: Evitando a fadiga com Laravel Homestead
Page 46: Evitando a fadiga com Laravel Homestead

Thanks!

@[email protected]

Perguntas?

Page 47: Evitando a fadiga com Laravel Homestead

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-

three-ways-application-release-automation-can-give-lift.pdf