Evitando a fadiga com
Laravel Homestead
By: @DaniloEsser
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
57%das organizações estão
insatisfeitas com o tempo que se leva paraliberar novos recursos e mudanças em produção.
Apenas 2%das organizações conseguem realizar um ou mais
releases por dia em suas aplicações:
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…”
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...
✖ 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.
Vagrant !!!Vagrant é rápido, fácil e ajuda você a
gerenciar vários ambientes de desenvolvimento ao mesmo tempo de forma
eficiente e divertida!
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.
Ok… e do que eu preciso basicamente?
➔ Provider: ➔ Vagrant:
Instalando Oracle VirtualBox
Instalando Oracle VirtualBox
Instalando Oracle VirtualBox
Instalando Oracle VirtualBox
Instalando Vagrant
Instalando Vagrant
Instalando Vagrant
Instalando Vagrant
Testando...
E agora?
http://atlas.hashicorp.com/boxes/search
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.
Vagrant vs Docker
Vagrant vs Docker
Resumindo:
GrayWhite Black
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.
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-FPMsudo apt-get install php5-fpm php5-cli php5-common
php5-curl php5-xdebug php5-gd php5-imagick php5-mcrypt
--yes
##MySQLecho "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
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", {}
Não era pra ser fácil?❏ Chef config...❏ Puppet config…❏ Shell Script...❏ VagrantFile config…❏ Etc.. etc… etc..
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.
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
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 !!!
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
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 !!!
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
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 !!!
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
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
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 !!!
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.app127.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).
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 !!!
That’s it!
SSH Test:
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.1User: homesteadPassword: secretPort: 33060
Postgres:Host: 127.0.0.1User: homesteadPassword: secretPort: 54320
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_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"
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