\section{Architecture}

%TODO: Kanashiro
Um proxy reverso trata requisições HTTP e as direciona para uma segunda
máquina, onde são distribuidas para os serviços solicitados. Todos os bancos de
dados relevantes estão concentrados em uma única máquina e todos os emails
disparados pelo sistema partem de um mesmo relay.

O ambiente é composto por 7 máquinas com funções distintas:

\begin{itemize}

\item Reverseproxy: Proxy reverso
\item Integration: Segundo proxy reverso, Repositórios Git, Listas de email e Backend final de email
\item Email: Relay de email
\item Social: Servidor de rede social Noosfero
\item Database: Servidor de banco de dados PostgreSQL
\item Mezuro: Servidor de análise de código Mezuro
\item Monitor: Monitoramento de informações dos outros serviços

\end{itemize}

As máquinas Reverseproxy, Email e Monitor possuem IP’s externos. Reverseproxy
recebe requisições HTTP/HTTPS (portas 80 e 443) e possibilita que usuários
utilizem os repositórios git (porta 22). Email recebe emails (porta 25) e
enviar emails para fora da plataforma. Monitor recebe requisições HTTP/HTTPS
(portas 80 e 443). Os IP’s variam de acordo com o ambiente.

Conexões na porta 22 da máquina reverseproxy são redirecionadas para
integration. Todas as máquinas aceitam conexões ssh originadas apenas da
máquina integration, ou seja, não é possível realizar conexões ssh nas demais
máquinas se a conexão não for originada da integration. As máquinas email,
social, database e mezuro aceitam conexão ssh vindas da integration na porta 22
e a reverseproxy em uma porta alternativa, especificada no arquivo de
configuração do ambiente, config/\$SPB\_ENV/config.yaml pelo valor
alt\_ssh\_port.

Note que, como será demonstrado neste manual, existem atalhos definidos no
repositório de gestão de configuração para simplificar o acesso por ssh às
máquinas. Internamente, as máquinas integration e social também rodam web
servers para servirem suas aplicações. Por fim, as máquinas integration e
social conectam-se em database usando a porta 5432 para acesso aos bancos de
dados.

