Configuração do Docker
omegaUp não é um programa - é um aplicativo da web PHP mais um punhado de serviços Go e mais
seus datastores, e a única maneira sensata de executar tudo isso em sua máquina é o Docker
Componha a pilha no docker-compose.yml do repositório.
Esta página explica o que essa pilha realmente inicia e por que, para que quando algo se comportar mal
você sabe qual contêiner examinar.
Se seu objetivo é contribuir — clonar, inicializar, fazer login, editar código — comece com Configuração de desenvolvimento, que trilha o caminho feliz. Esta página é o mapa abaixo dela.
Os serviços
Levantar a pilha (docker-compose up) inicia esses contêineres, cada um fixado em um
imagem específica para que todos executem as mesmas versões:
| Serviço | Imagem | O que é |
|---|---|---|
frontend |
omegaup/dev-php |
O aplicativo web PHP 8.1 (php-fpm por trás do nginx) — o aplicativo MVC que atende todas as páginas e os endpoints /api/. Este é o contêiner no qual você executa testes, webpack e ferramentas PHP. |
mysql |
mysql:8.0.34 |
O banco de dados. Exposto ao host na porta 13306 (não o padrão 3306, portanto não colidirá com um MySQL que você já executa). |
redis |
redis |
Cache. |
rabbitmq |
rabbitmq:3-management-alpine |
Fila de mensagens usada para trabalho assíncrono; a imagem -management também oferece seu console web. |
gitserver |
omegaup/gitserver:v1.9.13 |
O serviço Go que armazena cada problema como um repositório git. Consulte Gitserver. |
grader |
omegaup/backend |
O avaliador Go - recebe corridas, coloca-as na fila e despacha para os corredores. O frontend chega por HTTP em OMEGAUP_GRADER_URL (padrão https://localhost:21680). |
runner |
omegaup/runner |
O runner Go – compila e executa envios dentro do minijail. |
broadcaster |
omegaup/backend |
O serviço Go que envia atualizações de placar/veredicto para o navegador por meio de WebSockets. |
init-omegaupdata |
alpine |
Um contêiner init de curta duração que propaga o volume de dados do problema compartilhado antes do início dos serviços de longa execução. |
O grader, o runner, o broadcaster e o gitserver são binários pré-construídos enviados como Docker imagens - elas não são construídas a partir deste repositório, que não contém nenhuma fonte Go. Eles vêm do separado omegaup/quark e projetos omegaup/gitserver; veja Infraestrutura sobre como as peças se encaixam produção.
Volumes
Alguns volumes nomeados persistem no estado durante as reinicializações para que você não propague tudo novamente todas as vezes:
dbdata (MySQL), omegaupdata (os dados do problema compartilhados no frontend, avaliador e gitserver
todos lidos), mais rabbitmq e redis. Se a pilha entrar em uma posição genuinamente presa
estado, remover esses volumes e semear novamente é o grande martelo - veja
Solução de problemas.
Produção vs. desenvolvimento
docker-compose.yml é a pilha de desenvolvimento. A produção executa os mesmos serviços em
Kubernetes de docker-compose.k8s.yml
com as imagens omegaup/php e omegaup/nginx em vez do dev-php multifuncional
imagem. A topologia do serviço é a mesma; a embalagem e a escala são diferentes. Veja
Implantação.