# Desenvolvimento do Sistema de Seleção da PRPPG - Guavira

Documentação do processo de desenvolvimento do **Guavira,** sistema de inscrição em processos seletivos da PRPPG

# Preparação do Ambiente Virtual Conteinerizado

Tutorial de como realizar o deploy dos contêineres necessários para iniciar o desenvolvimento do **Guavira.**

# Deploy dos contêineres

## <span role="text">**1. Estruturação Inicial e Banco de Dados**</span>

Como definido previamente, decidiu-se iniciar a implementação do Guavira pela estruturação e criação do seu banco de dados. Para isso, é possível consultar a documentação disponibilizada pela UFVJM, que apresenta um guia para a criação de um contêiner com o serviço de banco de dados PostgreSQL, responsável por hospedar a estrutura do sistema.

## <span role="text">**2. Acesso ao Repositório e Clonagem do Projeto**</span>

Após obter acesso ao GitLab por meio do LDAP, que é o sistema de login institucional, e realizar a criação de uma chave SSH para autorizar operações a partir do seu computador, é possível prosseguir para a próxima etapa. Nessa fase, será necessário implementar no projeto da API o contêiner responsável por hospedar o banco de dados do Guavira.

Para isso, deve-se realizar a clonagem do projeto para o ambiente local, permitindo sua manipulação de forma segura. É importante destacar que os projetos clonados do GitLab devem estar localizados no diretório ***home*** do usuário, pois alguns comandos e operações dependem dessa localização. Após a clonagem, recomenda-se executar o comando de configuração de codificação, a fim de evitar que diferenças de encoding sejam interpretadas como alterações pelo Git.

```bash
git clone git@git.dds.ufvjm.edu.br:conta-institucional/api.git api

# entrar na pasta baixada
cd api

# Instrução para o Git ignorar alterações de permissão de arquivo (as permissões não são versionadas)
git config core.fileMode false

```

## <span role="text">**3. Configuração do LDAP e Variáveis de Ambiente**</span>

Para que o projeto da API funcione corretamente, é necessário que o serviço de LDAP esteja ativo, visto que grande parte das funcionalidades depende desse mecanismo de autenticação. **Para realizar o deploy dos contêineres, será preciso obter as credenciais do LDAP, que são confidenciais e devem ser solicitadas via RocketChat a um responsável do DSI, não sendo, portanto, incluídas nesta documentação.**

Com as credenciais em mãos, deve-se criar um arquivo `.env`, contendo as variáveis de ambiente necessárias para o funcionamento dos contêineres. Esse arquivo pode ser gerado a partir de uma cópia do `.env.example`, substituindo-se os valores pelas credenciais corretas.

```bash
cp .env.example .env
```

## <span role="text">**4. Deploy dos Contêineres**</span>

O processo de deploy será realizado com o auxílio de um ***Makefile*,** que contém scripts responsáveis por executar comandos Docker. Inicialmente, é necessário clonar o projeto de automação, uma vez que ele contém o serviço de LDAP. Em seguida, deve-se realizar o login no HUB da UFVJM utilizando o comando apropriado.

```bash
docker login -u nome.sobrenome hub.dds.ufvjm.edu.br
```

Caso esteja utilizando o Docker Desktop, pode ocorrer um erro durante esse processo. Para solucioná-lo, é necessário acessar o arquivo `~/.docker/config.json` e remover o par chave-valor `"credsStore"`.

Após isso, pode-se prosseguir com a clonagem do projeto de automação e realizar o deploy apenas do contêiner de LDAP, sendo recomendado comentar os demais serviços para evitar consumo desnecessário de recursos da máquina.

```bash
# ir pra home do usuario
cd ~

# baixar o repositório
git clone git@git.dds.ufvjm.edu.br:dds/automacao.git

```

## <span role="text">**5. Execução dos Serviços**</span>

Por fim, com todas as configurações concluídas, pode-se utilizar o script `start` presente no Makefile para realizar o deploy dos contêineres da API. Paralelamente, deve-se utilizar o comando `docker compose up` para iniciar o contêiner de automação, garantindo o funcionamento completo do ambiente necessário para o desenvolvimento do sistema.

```bash
# cd ~/api
make start
```

```bash
# cd ~/automacao
docker compose up
```

Como etapa final de organização do ambiente de desenvolvimento, recomenda-se realizar o *attach* (ou abertura) dos dois projetos — API e automação — em uma IDE de sua preferência, como o <span class="hover:entity-accent entity-underline inline cursor-pointer align-baseline"><span class="whitespace-normal">PhpStorm</span></span>. Isso facilita a navegação entre os arquivos, execução de comandos, edição de código e integração com ferramentas de versionamento. Em IDEs como o PhpStorm, é possível abrir ambos os projetos na mesma janela, utilizando a opção de *Attach Project*, ou simplesmente abrindo os diretórios simultaneamente no workspace.