... | @@ -27,14 +27,15 @@ Devem ser apresentados das seguintes formas: |
... | @@ -27,14 +27,15 @@ Devem ser apresentados das seguintes formas: |
|
|
|
|
|
# Arquitetura
|
|
# Arquitetura
|
|
O projeto está dividido em 2 partes:
|
|
O projeto está dividido em 2 partes:
|
|
- **Frontend**: É uma Progressive Web Application, ou seja, uma aplicação web que pode ser instalada, utilizando a tecnologia *Service Worker*, presente nos principais navegadores web do mercado. Desenvolvido em React.js com linguagem Typescript.
|
|
- **Frontend**: É uma [Progressive Web Application](https://web.dev/progressive-web-apps/), ou seja, uma aplicação web que pode ser instalada, utilizando a tecnologia *[Service Worker](https://developers.google.com/web/fundamentals/primers/service-workers?hl=pt)*, presente nos principais navegadores web do mercado. Desenvolvido em React.js com linguagem Typescript.
|
|
- **Backend**: É uma RESTful API construída utilizando Spring, que é um dos frameworks Java mais populares do mercado.
|
|
- **Backend**: É uma RESTful API construída utilizando Spring, que é um dos frameworks Java mais populares do mercado.
|
|
|
|
|
|
Também estão sendo utilizadas as seguintes tecnologias como partes integrantes do projeto:
|
|
Também estão sendo utilizadas as seguintes tecnologias como partes integrantes do projeto:
|
|
- **PostgreSQL**: Banco de dados relacional *open source* com mais de 30 anos de desenvolvimento. Um dos mais utilizados no mundo. Utilizado no projeto como persistência de dados.
|
|
- **PostgreSQL** (https://www.postgresql.org/): Banco de dados relacional *open source* com mais de 30 anos de desenvolvimento. Um dos mais utilizados no mundo. Utilizado no projeto como persistência de dados.
|
|
- **Hashicorp Vault**: Uma ferramenta para armazenar senhas e outros segredos de forma segura, com forte criptografia e controle de acesso, e acessível de várias formas (REST API, linha de comando, bibliotecas para várias linguagens de programação). Utilizado no projeto para armazenar senhas e configurações.
|
|
- **Hashicorp Vault** (https://www.vaultproject.io/): Uma ferramenta para armazenar senhas e outros segredos de forma segura, com forte criptografia e controle de acesso, e acessível de várias formas (REST API, linha de comando, bibliotecas para várias linguagens de programação). Utilizado no projeto para armazenar senhas e configurações.
|
|
- ** API Google Maps**: API de acesso ao Google Maps.
|
|
- **Nginx** (https://nginx.org/en/): Um servidor web e proxy reverso. Utilizado para intermediar a comunicação entre os clientes e as aplicações do projeto, sendo o único meio de acesso.
|
|
- **Firebase**: Uma plataforma do Google utilizada para desenvolvimento de aplicativos móveis e web. Possui vários recursos prontos para integração, como banco de dados, autenticação, *analytics* e notificações push. Utilizado no projeto para enviar e exibir notificações push.
|
|
- **Plataforma Google Maps** (https://developers.google.com/maps): API de acesso ao Google Maps.
|
|
|
|
- **Firebase** (https://firebase.google.com/): Uma plataforma do Google utilizada para desenvolvimento de aplicativos móveis e web. Possui vários recursos prontos para integração, como banco de dados, autenticação, *analytics* e notificações push. Utilizado no projeto para enviar e exibir notificações push.
|
|
|
|
|
|
## Diagrama de componentes
|
|
## Diagrama de componentes
|
|
A visão geral dos componentes do projeto pode ser visualizada na imagem abaixo.
|
|
A visão geral dos componentes do projeto pode ser visualizada na imagem abaixo.
|
... | @@ -42,7 +43,7 @@ A visão geral dos componentes do projeto pode ser visualizada na imagem abaixo. |
... | @@ -42,7 +43,7 @@ A visão geral dos componentes do projeto pode ser visualizada na imagem abaixo. |
|
![](https://tools.ages.pucrs.br/garbus/garbus-wiki/raw/master/Images/component_diagram.png)
|
|
![](https://tools.ages.pucrs.br/garbus/garbus-wiki/raw/master/Images/component_diagram.png)
|
|
|
|
|
|
## Diagrama de implantação
|
|
## Diagrama de implantação
|
|
A implantação do projeto é realizada utilizando containers Docker. O repositório [garbus-orchestration](https://tools.ages.pucrs.br/garbus/garbus-orchestration) contém a configuração do *docker-compose*, responsável pela implantação, que hoje é feita em uma única máquina. Para distribuir em vários hosts, algumas alterações seriam necessárias (provavelmente mudar para o *Docker Swarm* ou mesmo *K8s*).
|
|
A implantação do projeto é realizada utilizando containers Docker. O repositório [garbus-orchestration](https://tools.ages.pucrs.br/garbus/garbus-orchestration) contém a configuração do *docker-compose*, responsável pela implantação, que hoje é feita em uma única máquina. Para distribuir em vários hosts, algumas alterações seriam necessárias (provavelmente mudar para o *[Docker Swarm](https://docs.docker.com/engine/swarm/)* ou mesmo *[K8s](https://kubernetes.io/pt-br/)*).
|
|
|
|
|
|
Os componentes Frontend, Backend e Vault são acessíveis apenas pelo Nginx. Endereços:
|
|
Os componentes Frontend, Backend e Vault são acessíveis apenas pelo Nginx. Endereços:
|
|
- Frontend: https://ages-garbus.duckdns.org
|
|
- Frontend: https://ages-garbus.duckdns.org
|
... | @@ -84,5 +85,5 @@ Ao criar uma instância do Vault, um [*root token*](https://www.vaultproject.io/ |
... | @@ -84,5 +85,5 @@ Ao criar uma instância do Vault, um [*root token*](https://www.vaultproject.io/ |
|
## Acesso Web
|
|
## Acesso Web
|
|
A maior parte dos componentes do projeto é acessível apenas através do Nginx. Desta forma, há logs de acesso centralizados.
|
|
A maior parte dos componentes do projeto é acessível apenas através do Nginx. Desta forma, há logs de acesso centralizados.
|
|
|
|
|
|
O acesso pelo Nginx é realizado por HTTPS, utilizando certificados do Let's Encrypt. Este é um requisito para utilizar o Service Worker, que habilita as funções de PWA (aplicativo instalável e notificações).
|
|
O acesso pelo Nginx é realizado por HTTPS, utilizando certificados do [Let's Encrypt](https://letsencrypt.org/pt-br/). Este é um requisito para utilizar o Service Worker, que habilita as funções de PWA (aplicativo instalável e notificações).
|
|
|
|
|