Objetivo é disponibilizar 3 ambientes para aplicação Laravel no Dreamhost, sendo eles:
1 - ideducar.idevs.net - Ambiente de produção
Base de código: Branch main no repositório git
2 - ideducar-teste.idevs.net - Utilizado para validação/homologação de novos releases com o usuário/cliente
Base de código: Branch test no repositório git, em dado momento do tempo.
3 - ideducar-dev.idevs.net - Utilizado para desenvolvimento / integração contínua
Base de código: Branch test no repositório git, a qualquer momento.
Criação dos sites no painel do Dreamhost
Antes de tudo é necessário criar manualmente os três sites/subdomínios no Painel de controle do Dreamhost
Utilizaremos o mesmo usuário para os três sites, neste caso ideducar.
Este usuário precisa também estar com o acesso SSH ativado.
Configuração do SSH para login sem senha
Verificar se você já possui chave SSH criada na sua estação de trabalho:
cat ~/.ssh/id_rsa.pub
Caso o arquivo não exista, criar uma nova chave:
ssh-keygen -t rsa -b 4096 -C "[seu e-maill]"
Em seguida, copiar a chave pública para a conta do Dreamhost
cat ~/.ssh/id_rsa.pub | ssh ideducar@ftp.idevs.net "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Concluído o procedimento acima, testar o acesso SSH sem senha:
ssh ideducar@ftp.idevs.net
O resultado deverá ser um console shell no servidor do Dreamhost
Configuração para acessar o repositório github sem senha
A conta que hospeda o site, neste caso, ideducar, precisa ser capaz de interagir com o repositório Github sem a dgitação de senha. Agora precisamos criar um par de chaves no Dreamhost e configurar a conta Github para permitir a utilização dessa chave SSH
Acessar o console do Dreamhost via SSH:
ssh ideducar@ftp.idevs.net
Criar o par de chaves SSH:
ssh-keygen -t rsa -b 4096 -C "[seu e-maill github]"
No comando acima, aceitar todos os defaults (sem senha)
Agora entre na sua conta Github, no canto esqueto da página, clique na foto do perfil e escolha Settings.
Na barra à esquerda, escolha SSH and GPG keys. Na tela que se abre, clique no botão New SSH key
Digite o título de forma bem descritiva, informando por exemplo: Dreamhost - ideducar@beatty - marcus.moreira@gmail.com. No campo key, cole o conteúdo da chave pública obtida com cat ~/.ssh/id_rsa.pub
Após adicionar a chave do Dreamhost no Github, teste com o seguinte comando:
[beatty]$ ssh -T git@github.com
O resultado deverá ser algo como:
Hi marcusrox! You've successfully authenticated, but GitHub does not provide shell access.
Preparando o ambiente para o primeiro deploy
[beatty]$ cd ideducar-teste.idevs.net/
[beatty]$ git clone git@github.com:marcusrox/ideducar.git
Criar os bancos de dados no MySQL:
ideducar
ideducar_teste
ideducar_dev
Instalando e configurando o Envoy
Realizando primeiro deploy nos ambientes
[server]$ cd ~
[server]$ mkdir -p ~/.php/composer
[server]$ cd ~/.php/composer
[server]$ curl -sS https://getcomposer.org/installer | php
[server]$ mv composer.phar composer
[server]$ chmox a+x composer
Adicionar a linha seguinte ao ~./bach_profileexport PATH=/home/username/.php/composer:$PATH
Carregar a nova configuração do .bash_profile[server]$ . ~/.bash_profile
[server]$ composer -v
Após instalado o composer, realizar os passos para configuração da web application
[server]$ cd /home/[username]/[domain]
[server]$ git clone git@github.com:marcusrox/ideducar.git
[server]$ cd ideducar
[server]$ composer install
[server]$ cp .env.production .env
Após o passo acima, fazer os ajustes necessários no .env, especialmente na conexão ao banco de dados, que deve ser criado vazio. Tendo criado o banco de dados, prosseguir com o migrate[server]$ php artisan migrate
[server]$ php artisan db:seed
[server]$ php artisan storage:link
Após esses passos, aplicação WEB já deverá estar acessível. O delploy inicial foi concluído.Realizando deploy de atualização incremental no ambiente
Referências:
Laravel Envoy - Laravel - The PHP Framework For Web Artisans
Como realizar o deploy de uma aplicação Laravel usando o Envoy - YouTube
Simple Envoy script for Laravel deploy (github.com)
papertank/envoy-deploy: Laravel Envoy Deployment (github.com)