✅ Considere me enviar um email em [email protected].
A ideia deste projeto é melhorar a experiência com o SIGAA, chega de desperdiçar os primeiros dias da matrícula extraordinária ansiosamente apertando F5 a cada 5 minutos. Permita que um bot faça a sua matrícula caso encontre uma vaga que você deseja.
- Como rodar uma instância local com Docker Compose
- Como rodar uma instância pública com Docker Compose
- Como rodar uma instância (local ou pública) com Kubernetes
É necessário ter Docker e docker-compose instalados. Não é seguro rodar uma instância pública desta forma, pois as senhas do Django e do PostgreSQL para desenvolvimento local estão públicas no repositório do GitHub.
# Clonar o repositório que contém a Dockerfile
git clone https://github.com/leomichalski/pyautogui
# Construir a imagem Docker
docker build pyautogui/docker -t leommiranda/pyautogui
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA
Caso o provedor escolhido seja o Gmail, no exemplo abaixo, substituir "[email protected]" pelo endereço de email adequado. Depois, substituir "txkhauissqakizji" por uma app specific password, a senha padrão do Gmail não funciona.
# Navegar até este repositório
cd matriculaAA
# Criar arquivo ".envs/.local/.email" com o email
echo -n "\
[email protected]
" > .envs/.local/.email
# Criar arquivo ".envs/.local/.email_password" com a senha do email
echo -n "\
SENDER_PASSWORD=txkhauissqakizji
" > .envs/.local/.email_password
Obs: a senha "txkhauissqakizji" deste exemplo não funciona mais.
docker compose -f deploy/compose/docker-compose-local.yml --project-directory . build
Com a API e o banco de dados, é possível cadastrar estudantes e que turmas interessam a esses estudantes.
# Rodar painel
docker compose -f deploy/compose/docker-compose-local.yml --project-directory . up django
# Acessar o painel em localhost:8000/admin . O superusuário é "super" e a senha é "senha12345".
# Agora, basta cadastrar turmas e discentes. Os departamentos já foram populados automaticamente.
Com o "detector-de-vagas", é possível acionar alertas quando surge uma vaga que interesse a alguma pessoa. O detector emite dois alertas: o primeiro envia um email à pessoa; o segundo aciona o "realizador-de-matriculas" para fazer a matrícula automática dela.
docker compose -f deploy/compose/docker-compose-local.yml --project-directory . up detector-de-vagas
O "realizador-de-matriculas" recebe alertas do "detector-de-vagas" para fazer matrículas automáticas.
docker compose -f deploy/compose/docker-compose-local.yml --project-directory . up realizador-de-matriculas
É necessário ter Docker e docker-compose instalados. Também é necessário que a máquina tenha um IP externo público.
Por exemplo, uma forma de accessar um terminal no servidor é o SSH. Todos os seguintes comandos foram pensados para serem rodados diretamente no servidor.
# Clonar o repositório que contém a Dockerfile
git clone https://github.com/leomichalski/pyautogui
# Construir a imagem Docker
docker build pyautogui/docker -t leommiranda/pyautogui
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA
Caso o provedor escolhido seja o Gmail, no exemplo abaixo, substituir "[email protected]" pelo endereço de email adequado. Depois, substituir "txkhauissqakizji" por uma app specific password, a senha padrão do Gmail não funciona.
# Navegar até este repositório
cd matriculaAA
# Criar arquivo ".envs/.production/.email" com o email
echo -n "\
[email protected]
" > .envs/.production/.email
# Criar arquivo ".envs/.production/.email_password" com a senha do email
echo -n "\
SENDER_PASSWORD=txkhauissqakizji
" > .envs/.production/.email_password
Obs: a senha "txkhauissqakizji" deste exemplo não funciona mais.
No exemplo abaixo, substituir "NOME DO BANCO", "NOME DE USUARIO DO BANCO" e "SENHA DO USUARIO DO BANCO" pelos dados adequados. É possível utilizar o arquivo .envs/.local/.postgres como exemplo.
# Navegar até este repositório
cd matriculaAA
# Criar pasta caso não exista
mkdir -p .envs/.production
# Criar arquivo ".envs/.production/.postgres" que define as variáveis de ambiente necessárias
echo -n "\
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=NOME DO BANCO
POSTGRES_USER=NOME DE USUARIO DO BANCO
POSTGRES_PASSWORD=SENHA DO USUARIO DO BANCO
" > .envs/.production/.postgres
Para gerar uma chave secreta do Django, basta rodar o seguinte código em Python em um ambiente com o Django instalado.
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())
No exemplo abaixo, substituir "CHAVE SECRETA DO DJANGO" pelo chave gerada no passo anterior. Substituir "TROCAR ESTE EMAIL DE SUPERUSUARIO" e "TROCAR ESTA SENHA DE SUPERUSUARIO" pelos dados adequados. É possível utilizar o arquivo .envs/.local/.django como exemplo.
# Navegar até este repositório
cd matriculaAA
# Criar pasta caso não exista
mkdir -p .envs/.production
# Criar arquivo ".envs/.production/.django" que define as variáveis de ambiente necessárias
echo -n "\
DJANGO_SECRET_KEY='CHAVE SECRETA DO DJANGO'
SUPERUSER_EMAIL=TROCAR ESTE EMAIL DE SUPERUSUARIO
SUPERUSER_PASSWORD=TROCAR ESTA SENHA DE SUPERUSUARIO
" > .envs/.production/.django
No exemplo abaixo, substituir "DOMINIO" pelo domínio do servidor (por exemplo, 50.250.100.120.sslip.io ou google.com). Dica: usar .nip.io
ou .sslip.io
caso não haja um domínio disponível.
# Navegar até este repositório
cd matriculaAA
# Criar pasta caso não exista
mkdir -p .envs/.server_name
# Criar arquivo ".envs/.production/.server_name" que define a variável de ambiente necessária
echo -n "\
SERVER_NAME=DOMINIO
" > .envs/.production/.server_name
docker compose -f deploy/compose/docker-compose.yml --project-directory . build
Com o banco de dados (postgres) e o painel (django), é possível cadastrar estudantes e que turmas interessam a esses estudantes. Neste caso, o proxy reverso (nginx) serve para servir arquivos estáticos e para intermediar com o — protocolo HTTPS — o tráfego externo até a API. O cerbot mantém atualizados os certicados SSL usados no protocolo HTTPS.
# Rodar painel
docker compose -f deploy/compose/docker-compose.yml --project-directory . up postgres django nginx certbot
# Acessar o painel em ${DOMINIO}/admin , utilizando superusuário e senha definidos anteriormente.
# Agora, basta cadastrar turmas e discentes. Os departamentos já foram populados automaticamente.
Com o "detector-de-vagas", é possível acionar alertas quando surge uma vaga que interesse a alguma pessoa. O detector emite dois alertas: o primeiro envia um email à pessoa; o segundo aciona o "realizador-de-matriculas" para fazer a matrícula automática dela.
docker compose -f deploy/compose/docker-compose.yml --project-directory . up detector-de-vagas
O "realizador-de-matriculas" recebe alertas do "detector-de-vagas" para fazer matrículas automáticas.
docker compose -f deploy/compose/docker-compose.yml --project-directory . up realizador-de-matriculas
É necessário que o cluster Kubernetes tenha acesso Docker Registry onde as imagens são armazenadas.
- Servidor PostgreSQL rodando a parte. Foram testadas as versões 14 e 15.
- Ferramenta ingress-nginx instalada no cluster.
- Ferramenta cert-manager instalada no cluster.
- Ferramenta strimzi-kafka-operator instalada no cluster. Também pode ser instalada como dependência do chart, basta utilizar
helm install (...) --set strimzi.enabled=true
. Caso for instalada separada do chart, talvez seja necessário modificar alguns valueshelm install (...) --set strimzi.kafka.listener.port=9092 --set strimzi.clusterName='kafka-cluster'
# Clonar o repositório que contém a Dockerfile
git clone https://github.com/leomichalski/pyautogui
# Construir a imagem Docker
docker build pyautogui/docker -t leommiranda/pyautogui
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA
# Navegar até este repositório
cd matriculaAA
docker compose -f deploy/compose/docker-compose.yml --project-directory . build django detector-de-vagas realizador-de-matriculas
Depende do Docker Registry utilizado (DockerHub, AWS ECR, etc) e da distribuição do Kubernetes (kind, k3s, RKE, etc).
helm upgrade --install matriculaaa deploy/k8s/charts/matriculaaa --set endpoint=localhost --set externalAccess.enabled=false --set debug=true
# Aguardar, e acessar o painel administrativo em localhost:31000/admin
Também é necessário setar o restante dos "values" requeridos, conforme consta na tabela do README.md do Helm chart. Principalmente, os "values" relacionados ao servidor PostgreSQL.
Rodar os bots ("detector-de-vagas" e "realizador-de-matriculas") com um painel administrativo público
Configurar os "Helm chart values" da instalação de acordo com o README.md do chart. Então, instalar com o seguinte comando.
helm upgrade --install matriculaaa deploy/k8s/charts/matriculaaa --set endpoint=SUBSTITUIR_PELO_DOMINIO_PUBLICO
# Aguardar, e acessar o painel administrativo em SUBSTITUIR_PELO_DOMINIO_PUBLICO
Também é necessário setar o restante dos "values" requeridos, conforme consta na tabela do README.md do Helm chart. Principalmente, os "values" relacionados ao servidor PostgreSQL.
A depender do Docker Registry, talvez seja necessário alterar os nomes das imagens Docker (django.container.image
, detectorDeVagas.container.image
e realizadorDeMatriculas.container.image
) e as tags das imagens Docker (django.container.tag
, detectorDeVagas.container.tag
e realizadorDeMatriculas.container.tag
).
Dica: usar o IP externo com o final .nip.io
ou .sslip.io
caso não haja um domínio público disponível.