Skip to content

Bot que realiza matrículas automaticamente. Cuidado para não causar um DoS.

License

Notifications You must be signed in to change notification settings

leomichalski/matriculaAA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

81 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

matriculaAA

❌ Não participe de um ataque DDoS.

❌ Evite rodar uma nova instância do projeto. Vamos evitar que o SIGAA fique indisponível.

✅ Considere me enviar um email em [email protected].

✅ Se achou útil e quer me encorajar a dar manutenção ao projeto, é só deixar uma estrelinha ⭐.

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.

Sumário

Como rodar uma instância local com Docker Compose

É 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.

Construir imagem Docker necessária para construir as outras imagens
# 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 este repositório
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA
Configurar um email para envio de notificações de novas vagas

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.

Construir as imagens Docker
docker compose -f deploy/compose/docker-compose-local.yml --project-directory . build
Configurar e rodar o painel administrativo

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.
Rodar o "detector-de-vagas"

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
Rodar o "realizador-de-matriculas"

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

Como rodar uma instância pública com Docker Compose

É necessário ter Docker e docker-compose instalados. Também é necessário que a máquina tenha um IP externo público.

Acessar um terminal no servidor

Por exemplo, uma forma de accessar um terminal no servidor é o SSH. Todos os seguintes comandos foram pensados para serem rodados diretamente no servidor.

Construir imagem Docker necessária para construir as outras imagens
# 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 este repositório
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA
Configurar um email para envio de notificações de novas vagas

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.

Configurar variáveis do PostgreSQL

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
Configurar variáveis de ambiente do Django, incluindo superusuário e senha do painel administrativo

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
Configurar domínio do servidor como uma variável de ambiente

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
Construir as imagens Docker
docker compose -f deploy/compose/docker-compose.yml --project-directory . build
Configurar e rodar o painel administrativo

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.
Rodar o "detector-de-vagas"

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
Rodar o "realizador-de-matriculas"

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

Como rodar uma instância (local ou pública) com Kubernetes

É necessário que o cluster Kubernetes tenha acesso Docker Registry onde as imagens são armazenadas.

Requisitos
  • 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 values helm install (...) --set strimzi.kafka.listener.port=9092 --set strimzi.clusterName='kafka-cluster'
Construir imagem Docker necessária para construir as outras imagens
# 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 este repositório
# Clonar o repositório
git clone https://github.com/leomichalski/matriculaAA

# Navegar até este repositório
cd matriculaAA
Construir as imagens Docker
docker compose -f deploy/compose/docker-compose.yml --project-directory . build django detector-de-vagas realizador-de-matriculas
Subir imagens construídas para o Docker Registry

Depende do Docker Registry utilizado (DockerHub, AWS ECR, etc) e da distribuição do Kubernetes (kind, k3s, RKE, etc).

Rodar os bots ("detector-de-vagas" e "realizador-de-matriculas") com um painel administrativo local
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.

About

Bot que realiza matrículas automaticamente. Cuidado para não causar um DoS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published