Skip to content

Commit a01d7e0

Browse files
authored
Merge pull request #1 from nossas/feature/domains
Adiciona o domínio Sites
2 parents ff18c70 + cacdcb9 commit a01d7e0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1354
-241
lines changed

README.md

-5
This file was deleted.

cloundfront-docs/1.png

-186 KB
Binary file not shown.

cloundfront-docs/2.png

-71 KB
Binary file not shown.

cloundfront-docs/3.png

-66.7 KB
Binary file not shown.

cloundfront-docs/4.png

-14.8 KB
Binary file not shown.

cloundfront-docs/5.png

-20.2 KB
Binary file not shown.

cloundfront-docs/6.png

-27.3 KB
Binary file not shown.

cloundfront-docs/7.png

-76.4 KB
Binary file not shown.

cloundfront-docs/README.md

-1
This file was deleted.

cloundfront-docs/cache.png

-46.4 KB
Binary file not shown.

cloundfront-docs/certificate2.png

-79.5 KB
Binary file not shown.

cloundfront-docs/cloudfrontmap.png

-34.4 KB
Binary file not shown.

cloundfront_ec2/application/install.sh

-7
This file was deleted.

cloundfront_ec2/application/next.zip

-67.7 MB
Binary file not shown.

cloundfront_ec2/application/public/index.ts

-29
This file was deleted.

cloundfront_ec2/cloudfront.tf

-47
This file was deleted.

cloundfront_ec2/data.tf

-19
This file was deleted.

cloundfront_ec2/domain.tf

-43
This file was deleted.

cloundfront_ec2/ec2.tf

-40
This file was deleted.

cloundfront_ec2/locals.tf

-6
This file was deleted.

cloundfront_ec2/outputs.tf

-8
This file was deleted.

cloundfront_ec2/providers.tf

-13
This file was deleted.

cloundfront_ec2/variables.tf

-23
This file was deleted.

sites/.env.example

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# BONDE
2+
PUBLIC_NODE_ENV=
3+
PUBLIC_ACTION_SECRET_KEY=
4+
PUBLIC_HASURA_SECRET=
5+
PUBLIC_PAGARME_KEY=
6+
PUBLIC_HASURA_API=
7+
PUBLIC_REST_API=
8+
DEFAULT_DOMAIN_RULE=
9+
# CMS
10+
DEBUG=
11+
ALLOWED_HOSTS=
12+
CMS_DATABASE_URL=
13+
BONDE_DATABASE_URL=
14+
AWS_ACCESS_KEY_ID=
15+
AWS_SECRET_ACCESS_KEY=
16+
AWS_STORAGE_BUCKET_NAME=
17+
RECAPTCHA_PUBLIC_KEY=
18+
RECAPTCHA_PRIVATE_KEY=
19+
DISABLE_RECAPTCHA=
20+
BONDE_ACTION_API_URL=
21+
BONDE_ACTION_SECRET_KEY=d

sites/.gitignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.DS_Store
2+
__pycache__
3+
*.db
4+
# Data
5+
letsencrypt/
6+
certs/
7+
etcd/
8+
localstack/

sites/README.md

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Contexto
2+
3+
Sites são páginas web desenvolvidas dentro do time de tecnologia do NOSSAS e usado principalmente por Mobilizadores como um canal para criar Campanhas, criam-se páginas para documentar a narrativa da Campanha e costumam usar de Estratégias para impactar mudanças politicas públicas gerando Ações de Ativistas que se indentificam com a causa.
4+
5+
6+
## Tecnologia Principal
7+
8+
Por serem páginas web, a principal funcionalidade dos Sites é levar um endereço web para uma página diponível em algum servidor. Para cuidar disso usamos um serviço de DNS hospedado pela Amazon, o Mobilizador compra um endereço em alguma empresa de vendas de domínio, como Registro.br, e então aponta as configurações de DNS do seu domínio para o serviço de DNS da Amazon o Route53.
9+
10+
Após configurar o Route53 com o direcionamento correto, esse domínio está apto para acessar um serviço dentro de um servidor, hoje também hospedado pela Amazon usando instâncias EC2.
11+
12+
Ao chegar na instância, existe uma nova camada, agora de aplicação, que consegue rotear a conexão dos endereços entre aplicações e serviços internos. Isso permite ter vários serviços em uma única instância. Para resolver o redirecionamento ou proxy reverse (como se chama essa técnica na computação) usamos uma tecnologia chamada [Traefik](https://doc.traefik.io/traefik/).
13+
14+
Agora então existe uma capacidade de apontar vários endereços para uma instância e cada endereço desse para um serviço dentro dessa instância. Então passa a ser responsabilidade da aplicação que responde aquele serviço responder a esse endereço, podendo ou não conseguir responder a diversos endereços, mas agora a nível interno como uma aplicação CMS por exemplo.
15+
16+
### Roteamento
17+
18+
É muito comum o mesmo site responder em diferentes extensões como por exemplo, .org, .org.br, .com e .com.br, pra isso devemos usar uma funcionalidade do Traefik que possibilita configurar regras de roteamento com [Regex](https://doc.traefik.io/traefik/routing/routers/#host-and-hostregexp). Outro problema que o Regex resolve, são sites com subdomínios, o que também pode ser super comum em aplicações CMS.
19+
20+
Para esses casos podemos configurar o seguinte regex:
21+
22+
```
23+
HostRegexp(`^.*whoami.(devel|local)$`)
24+
```
25+
26+
NOTE: O domínio e subdomínios, whoami.devel e whoami.local, irão ser direcionados para o serviço que configurou essa regra no Traefik.
27+
28+
Entende-se que não existam limites para possíveis endereços que devam responder a aplicações deste domínio, por isso para facilitar a criação e manutenção dinâmica dessas configurações adicionamos o [Etcd](https://etcd.io) como um provedor de configurações no Traefik.
29+
30+
Dessa maneira a consolidação de um roteamento acontece ao configurar as seguintes chave-valor no etcd:
31+
32+
```
33+
etcdctl put traefik/http/routers/whoami-devel/rule "HostRegexp(\`^.*whoami\.(devel|local)$\`)"
34+
35+
etcdctl put traefik/http/routers/whoami-devel/service "whoami-sites@docker"
36+
```
37+
38+
### Serviços
39+
40+
Existem 2 principais serviços em nossa stack de tecnologias que se encaixam no domínio Sites.
41+
42+
- BONDE (versão pública)
43+
- CMS

sites/bonde.ai/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*.sqlite3
2+
__pycache__

sites/bonde.ai/Dockerfile

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Etapa 1: Usando imagem base Python com suporte a Slim para reduzir tamanho
2+
FROM python:3.12-slim
3+
4+
# Etapa 2: Definindo diretório de trabalho
5+
WORKDIR /app
6+
7+
# Etapa 3: Instalando dependências do sistema para rodar o Django e o Poetry
8+
RUN apt-get update && apt-get install -y \
9+
build-essential \
10+
libpq-dev \
11+
curl \
12+
&& rm -rf /var/lib/apt/lists/*
13+
14+
# Etapa 4: Instalando o Poetry
15+
RUN curl -sSL https://install.python-poetry.org | python3 -
16+
17+
# Etapa 5: Adicionando o Poetry ao PATH
18+
ENV PATH="/root/.local/bin:$PATH"
19+
20+
# Etapa 6: Copiando os arquivos de dependências (pyproject.toml e poetry.lock)
21+
COPY pyproject.toml poetry.lock /app/
22+
23+
# Etapa 7: Instalando as dependências
24+
RUN poetry install --no-root
25+
26+
# Etapa 8: Copiando o código da aplicação
27+
COPY . /app
28+
29+
# Etapa 9: Configurando o volume para sincronizar com o diretório local
30+
VOLUME ["/app"]
31+
32+
# Etapa 10: Expondo a porta padrão do Django (8000)
33+
EXPOSE 8000
34+
35+
# Etapa 11: Rodando o servidor do Django
36+
CMD ["poetry", "run", "python", "manage.py", "runserver", "0.0.0.0:8000"]

0 commit comments

Comments
 (0)