2. HelloWorld!
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
daniloesser@gmail.com
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…”
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..
Eseaoinvésdevocê...
✖ 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.
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!
9. Blz…Masesse talVagrant... oqueé?
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.
21. Eagora?
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.
25. SpoilerAlert:
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.
29. 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.
30. Eoqueganhamos comoHomestead?
● 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.
34. Clonando oRepositóriodoHomestead
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 git@github.com: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
39. Atualizandooarquivo 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).
43. Acessando Bancodedados
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
44. Criandovariáveisdeambiente
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"
Empresas
Tipos de projeto
Passado sombrio: compilações manuais, tunning para maquinas fracas, pouca banda.
Qto tempo se leva para liberar um novo recurso em produção? (partindo do commit do dev).
E se for um bug zero-day explorado por hackers q requer urgencia maxima?
Tempo de resposta da equipe aos erros?
Porquê devOps?
Para manter o ritmo das demandas de novos recursos e atualizações,
a transformação digital devem ser orientada pela entrega contínua e
deve buscar entregar software de alta qualidade a qualquer momento.
Romper o lag entre deploys para se manter competitivo no mercado.
Entrega contínua é uma jornada que leva equipes que possuem processos manuais e roteirizados
até processos automatizados, padronizados, ágeis, eficientes e de qualidade para toda a empresa,
e ao mesmo tempo melhoram o lançamentos de novas aplicações.
Ao longo desta jornada as equipes se tornam mais produtivas, focando no fornecimento de novos recursos e inovações enquanto combatem incêndios e ainda dão manutenção.
É também uma jornada de escalabilidade, onde muitas empresas começam pequenas,
automatizando lançamentos para um único projeto ou equipe e, em seguida,
escalam suas práticas de entrega contínua para múltiplas aplicações e equipes em toda a empresa.
DevOps fornece um conjunto de práticas e mudanças culturais -
apoiados por ferramentas complementares -
que automatiza o pipeline de entrega de software, permitindo que as organizações para ganhar, servir e reter consumidores melhor e mais rápido do que nunca.
Como?
Unindo equipes
Guiando o desenvolvimento por Builds
Automatizando testes e validações
Automatização implantações
Automatizar infra-estrutura - Como código
Prejudica o pipeline de releases corretivas e evolutivas.
freelancers externos contratados para trabalhar em nossos projetos…
Colegas reclamando sobre como reinstalar um ambiente de desenvolvimento por causa de uma atualização do sistema operacional ou de uma biblioteca.
Ego.. (nginx, apache, zendserver, php built-in server..)
Imagine que você está desenvolvendo uma Aplicação com uma equipe de 15 pessoas.
E que esta Aplicação usa Laravel como Framework backend, Redis, Memcached, Imagemagick, Curl, MySQL, PostgreSQL, e até mesmo MongoDB.
Além de tudo isso, como requisito básico, as Libs do Laravel necessitam obrigatoriamente do PHP versão 5.3.7 ou superior e a Lib MCrypt do PHP instalada.
Logicamente, o ideal é ter todas as 15 pessoas da equipe trabalhando neste App com ambientes de desenvolvimento idênticos.
Afinal, nem todos os desenvolvedores da equipe possuem experiência de Sysops ou são Admins do sistema.
E Configurar estes ambientes de desenvolvimento de forma idêntica pode ser uma tarefa enorme,
pois é comum que algumas pessoas usem Mac, enquanto outros usam Linux e outras usam Windows...
Digamos que na metade do projeto, seja necessário a instalação de uma nova Lib para geração de arquivos PDF.
E que você precise do pacote "htmldoc" instalado no servidor para gerar estes arquivos.
Normalmente, todos da equipe teriam que re-configurar seus ambientes, adicionando manualmente este pacote, via comando apt-get ou similar.
Com Vagrant, é necessário apenas um commit no arquivo de configuração e todo mundo executa apenas um "reload" no seu Vagrant.
Pronto! Todos do time agora podem gerar arquivos PDF com a lib htmldoc em seus projetos locais.
Não importa se eles estão no Windows, Linux ou Mac, ambiente de desenvolvimento de todos permanece idêntico.
O Vagrant administra tudo isso para você para que todos do time possam se concentrar em codificação em vez de ficarem mantendo ambientes de desenvolvimento.
Providers (Prestadores de serviço), tais como VirtualBox, VMware, Amazon AWS, e do Digital Ocean, são serviços onde o seu ambiente virtual é criados e hospedado.
Eles podem ser utilizados localmente (VirtualBox ou VMWare), ou em nuvem, (Amazon e Digital Ocean).
Provisioners (provisionadores) são ferramentas que permitem que você configure rapidamente o seu servidor para suas necessidades específicas.
Sua excelência se dá justamente pelo fato de podermos automatizar inúmeros processos de configuração antes mesmo do servidor ser criado.
Você pode configurar praticamente tudo que será instalado no servidor. Alguns exemplos são PHP, módulos, Apache, Git, Vim, bancos de dados, logins, Xdebug, etc.
Os dois provisioners mais comumente usados com Vagrant são Puppet e Chef.
Os provisioners são realmente úteis quando precisamos construir ambientes de testes ou de produção exatamente com as mesmas configurações.
Ele garante que estes ambientes sejam perfeitamente sincronizados.
Nem todos nós temos o luxo de ter uma equipe de devOps para nos auxiliar ou ser um DevOp.
E pra piorar, frameworks como o Laravel exigem requisitos bem rigorosos.
Mas isto não é uma coisa ruim. Significa apenas que o Laravel pode fazer muita coisa e usa toneladas de coisas modernas bem legais.
Homestead é a resposta do projeto Laravel a tudo isso.
Homestead é uma box "pronta" do Vagrant que tem todas as características necessárias para você usar o Laravel e diversos outros frameworks,
E tb alguns recursos interessantes adicionais.
Trata-se de Vagrant Box personalizada. Ela é um pouco diferente do Vagrant puro.
Nela não há provisionamento (usando Chef ou Puppet).
Você basicamente usa uma imagem de servidor pré-configurada com Vagrant.
Ele não só traz simplicidade para equipes pequenas, como também comporta projetos pequenos e médios sob essa configuração de fábrica.
Ao utilizá-lo, nós eliminamos o transtorno da fase de provisionamento e garantimos uma inicialização rápida sem a necessidade de configurar o servidor.
Não há setup complexo. Ele permite que você se concentre diretamente no código.
Taylor Otwell, the father of Laravel, approves.
Basicamente, isso é o que você precisa saber para começar a usar o Homestead.
Ele permite que você se concentre no código e não no servidor.. e ao mesmo tempo, lhe traz um ambiente familiar e unificado entre o time.
E é óbvio que você pode utiliza-lo para todos os tipos de projetos PHP como o WordPress, Zend e etc...