# Arquitetura do projeto site C3SL

## Componentes:
- VM
- Strapi
- Hugo
- Nginx (Hugo e Strapi)
- Postgresql
- Systemd
- DNS
- CNAME strapi.c3sl.ufpr.br
- CNAME cms.c3sl.ufpr.br

### VM CMS (Máquina virtual)
É um ambiente/servidor, o qual possui as aplicações que queremos executar e disponibilizá-las para acesso externo.

### Strapi: 
Strapi é o CMS (Serviço de gerenciamento de conteúdo), o qual usamos para comunicar com o site baseado no framework Hugo por meio de uma interface gráfica. O objetivo é usá-lo para facilitar o serviço do time de comunicação ao postarem notícias no site do C3SL.
Internamente, o strapi possui uma configuração de lifecycles, o qual é possivel executar ações conforme algum tipo de evento acontece (publicar/deletar uma notícia). Uma dessas ações é transformar o conteúdo da notícia em um arquivo markdown que será salvo dentro do diretório de conteúdos do Hugo (content/). O strapi é servido pela porta 1337 da máquina virtual.

### Hugo
É um framework de gerador de sites estáticos. O funcionamento dele é baseado pela existência de algum tema qualquer.  Hugo possui um arquivo de configuração com a extensão .yml, onde possui algumas configurações gerais do site, bem como, é possível ter outras informação e apenas "referenciar" nos arquivos html/css. Ele é servido na porta 1313 da máquina virtual.

### NGINX 
O nginx é um software que utilizamos para hospedar ambos os sites (Strapi e C3SL). Com ele é possível balancear as cargas de acesso e usá-lo como proxy reverso, o que significa que o  nginx ficará entre o servidor e o cliente. 

Possuímos um arquivo de configuração para cada site (Strapi e C3SL). Nesses arquivos direcionamos as rotas http para https; validamos o site por meio de um certificado digital, que faz uma ponte criptografada, além de informar como o NGINX vai administrar as solicitações de acesso às URL's.

### Postgresql
É o banco de dados, o qual iremos utilizar juntamente com o Strapi. 
Nele serão armazenada as informações, como: noticias, autores, projetos, etc.

### DNS 
O DNS serve para resolver os nomes de domínio para os endereços IP que o servidor NGINX usa, garantindo que o cliente consiga acessar o site.


### CNAME's
Um registro CNAME é um elemento de informação de um DNS (_Domain Name System_).
Os registros CNAME normalmente são usados para mapear um subdomínio como _www_ ou _mail_ ao domínio que hospeda o conteúdo desse subdomínio.

Usamos o CNAME para mapear domínios. No projeto do site do C3SL, utilizaremos os seguintes:
**Strapi**: strapi.c3sl.ufpr.br
**Site do C3SL**: cms.c3sl.ufpr.br

### Systemd

O systemd é um gerenciador de tarefas de serviços controlado pelo kernel do sistema operacional. Ele faz com que softwares sejam executados em segundo plano, como serviços (chamados de Daemon). Podemos controlá-los por meio de comandos do `systemctl`
Por exemplo: 

    systemctl status <nome_do_serviço>
    systemctl start <nome_do_serviço>
    systemctl stop <nome_do_serviço>
Para verificar os *log's* do strapi, podemos utilizar o comando `sudo journalctl -xefu strapi`

### Imagem da arquitetura CMS

![](arquitetura_cms.jpg)