2022-1-PUMA-Deploy
Repositorio do primeiro semestre de 2022
Deploy - Puma
Pré-requisitos
Para executar o ambiente de produção do projeto Puma é necessário instalar na máquina host as seguintes ferramentas:
- Docker
- Docker-Compose
- Build essential. Ex:
sudo apt install build-essential
- Git
Preparando a máquina
O primeiro passo após instalar os pré-requisitos é baixar o repositório de deploy do Puma Puma-Deploy Basta utilizar o comando git clone para clonar o repositório de deploy. O projeto puma utiliza as seguintes portas, todas elas precisam estar liberadas na máquina host:
- 80
- 3000
- 3001
- 5432
- 3004
- 8080
Para finalizar o preparo da máquina é necessário criar um arquivo nomeado .env na raiz do repositório de deploy, o formato do arquivo é o seguinte:
DB_URL={{URL de conexão na base}} DB_USER={{Nome do usuário do banco de dados}} DB_PASS={{Senha de acesso à base}} DB={{Nome da base de dados}} WATCH_TOKEN={{Token de configuração do watchtower}} DOCKER_HUB={{conta/repositório DockerHub}}
Executando o projeto
Para executar o projeto, navegue até a pasta raiz do repositório de deploy
cd 2021-1-PUMA-Deploy/
Estando na raiz, basta executar o comando:
make prod
, para executar o projeto sem bloquear o terminal
make prod-debug
, para executar o bloqueando o terminal e visualizando os logs
Para finalizar a execução, basta executar o comando:
make down
Agora o projeto estará acessível pela porta 80
Finalizando as configurações
É necessário agora popular a base de dados com as área de conhecimento necessárias, para isso navegue até a pasta dbScripts e execute:
./db_script_test.sh
Agora o projeto estará pronto para ser utilizado.
CI/CD
Para CI/CD, utilizamos o Azure DevOps. Nele está configurado as pipelines de deploy que continuamente atualizam o deploy, sempre que há uma atualização da branch dev. As pipelines de CD utilizam variáveis de ambiente que precisam ser preenchidas de acordo com a máquina host utilizada, as variáveis de ambiente são compartilhadas entre as pipelines e estão todas na Library. Para mudar a máquina host é necessário atualizar a variável EXT_IP com o IP Externo da máquina host. Além disso, as variáveis possuem informações de acesso a base de dados e Docker Hub, é necessário preencher corretamente todas as variáveis descritas na Library.
Problemas conhecidos
É longe do ideal rodar base de dados em container, isso causa baixa performance em todas as operações do banco de dados e instalibilidade já que containers não são feitos para lidar com estados. Existe o risco de perder a base dados por algum erro de volume no docker, logo recomendo usar uma máquina virtual exclusivamente para a base de dado, fora de container.
Em caso de mudanças na estrutura das tabelas do banco de dados, é necessário excluir a pasta dbdata/. Isso vai fazer com que todos os dados guardados na base sejam excluídos, assim é importante fazer um backup antes. Essa situação só acontece por estar rodando o banco de dados em container.