O COJ é uma plataforma web para correção automática de algoritmos feitos na pseudolinguagem
Calango.
Para o funcionamento completo da solução, são necessários os seguintes serviços:
Serviço | Linguagem | Framework | Repositório |
---|---|---|---|
Plataforma Web | Python | Django | Aqui |
Microserviço Julgador | Java | Spring | GitHub |
Outros repositórios importantes para este projeto:
Serviço | Linguagem | Framework | Repositório |
---|---|---|---|
Calango IDE | Java | Swing | GitHub |
Calango Interpretador | Java | Puro | GitHub |
Primeiramente, clone este repositório:
git clone https://github.com/GeovanaRamos/calango-online-judge.git
Crie uma márquina virtual e entre no ambiente:
virtualenv venv -p python3
source venv/bin/activate
Instale os pacotes necessários:
(venv) pip install -r web/requirements.txt
Para prosseguir, você deve ter disponível localmente o PostgreSQL ou o SQLite dentro da pasta web. Por default, o settings.py utiliza o PostgreSQL em produção (DEBUG=False) e o SQLite em desenvolvimento (DEBUG=True). Se desejar, altere essas configurações no arquivo settings.py. Para desenvolvimento, todas as variáveis já possuem valores defaults, então não é necessário configurar nenhuma variável se seguir os passos descritos aqui. Para configuração em produção, veja a seção Deploy.
Agora execute as migrações do banco de dados:
(venv) python manage.py migrate
Se não desejar popular o banco de dados, siga para o próximo passo. Caso contrário, execute o comando abaixo para popular o banco com dados falsos e ter uma visão de como a aplicação se comporta em situações reais.
(venv) python manage.py seed
Por fim, execute a aplicação:
(venv) python manage.py runserver
Acesse localhost:8000 e verá a aplicação em execução. Para ter acesso ao site de administração, acesse localhost:8000/admin.
Se você executou o comando seed, já existem dois perfis de usuário que também são administradores. As credencias são as seguintes:
Perfil de Aluno
Usuário: aluno@email.com
Senha: admin
Perfil de Professor
Usuário: professor@email.com
Senha: admin
Para realizar o julgamento dos códigos, é necessário ter uma instância do microserviço em execução. Acesse o repositório para ter acesso as instruções de execução. Após garantir que o microserviço está em execução na porta 8080, execute obrigatoriamente o qcluster em um outro terminal para lidar com as submissões assincronamente:
(venv) python manage.py qcluster
Para testar o envio de emails, execute o seguinte comando em um outro terminal:
python -m smtpd -n -c DebuggingServer localhost:1025
Esse comando irá executar um servidor SMTP de testes, assim o COJ conseguirá enviar os emails com sucesso e você poderá ver o resultado no terminal.
Este repositório possui um workflow de deploy contínuo na branch master. A cada commit, é gerada uma imagem docker nova para este repositório e é feito o pull da imagem no servidor.
Para colocar a aplicação em produção incialmente, sem o deploy contínuo, as ações necessárias são:
- Adicionar o docker-compose-prod.yml no servidor;
- Adicionar a pasta nginx no servidor;
- Garantir as credenciais de acesso às imagens docker no servidor;
- Ter um domínio com certificado SSL da Let's Encrypt já no servidor;
- Ter um email para o site;
- Criar um arquivo .env.prod com as seguintes variáveis:
POSTGRES_USER=(usuário do banco)
POSTGRES_PASSWORD=(senha do banco)
POSTGRES_DB=(nome do banco)
DEBUG=False
ENABLE_HTTPS=True
SECRET_KEY=(chave aleatória do Django)
DJANGO_ALLOWED_HOSTS=(domínio ou domínios separado por espaços)
EMAIL_HOST_USER=(email do site)
EMAIL_HOST_PASSWORD=(senha do email do site)
COJ_SERVICE_URL=http://judge:8080/judge
DATABASE=postgres
SQL_HOST=db
SQL_PORT=5432
- Executar os seguintes comandos:
docker login docker.pkg.github.com -u $GITHUB_USERNAME -p $GITHUB_TOKEN
docker-compose -f docker-compose-prod.yml pull
docker-compose -f docker-compose-prod.yml up -d
docker-compose -f docker-compose-prod.yml exec -d web python manage.py qcluster