Share
Embed
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
Transcript
47 slides
-
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] -
57% das organizações estão insatisfeitas com o tempo que se
leva para liberar 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. -
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. -
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’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 -
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.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 -
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.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). -
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 !!! -
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 -
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" -
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