Saltar a contenido

Configuración de la ventana acoplable

omegaUp no es un solo programa: es una aplicación web PHP más un puñado de servicios Go más sus almacenes de datos, y la única forma sensata de ejecutarlos todos en su máquina es Docker Componga la pila en el docker-compose.yml del repositorio. Esta página explica cómo comienza realmente esa pila y por qué, de modo que cuando algo se comporte mal ya sabes qué contenedor mirar.

Si su objetivo es contribuir (clonar, iniciar, iniciar sesión, editar código), comience con Configuración de desarrollo, que recorre el camino feliz. Esta página es el mapa debajo de ella.

Los servicios

Al levantar la pila (docker-compose up), se inician estos contenedores, cada uno de ellos fijado a un imagen específica para que todos ejecuten las mismas versiones:

Servicio Imagen Qué es
frontend omegaup/dev-php La aplicación web PHP 8.1 (php-fpm detrás de nginx): la aplicación MVC que sirve a cada página y los puntos finales /api/. Este es el contenedor en el que ejecuta pruebas, paquetes web y herramientas PHP.
mysql mysql:8.0.34 La base de datos. Expuesto al host en el puerto 13306 (no el 3306 predeterminado, por lo que no colisionará con un MySQL que ya esté ejecutando).
redis redis Cache.
rabbitmq rabbitmq:3-management-alpine Cola de mensajes utilizada para trabajo asincrónico; la imagen del -management también te ofrece su consola web.
gitserver omegaup/gitserver:v1.9.13 El servicio Go que almacena cada problema como un repositorio git. Consulte Gitserver.
grader omegaup/backend El clasificador Go: recibe carreras, las pone en cola y las envía a los corredores. La interfaz lo alcanza a través de HTTP en OMEGAUP_GRADER_URL (https://localhost:21680 predeterminado).
runner omegaup/runner The Go runner: compila y ejecuta envíos dentro de la minijail.
broadcaster omegaup/backend El servicio Go que envía actualizaciones de marcadores/veredictos al navegador a través de WebSockets.
init-omegaupdata alpine Un contenedor de inicio de corta duración que genera el volumen compartido de datos de problemas antes de que comiencen los servicios de larga ejecución.

Grader, runner, broadcaster y gitserver son binarios prediseñados que se envían como Docker. imágenes: no se crean a partir de este repositorio, que no contiene ninguna fuente de Go. ellos vienen del omegaup/quark separado y proyectos omegaup/gitserver; ver Infraestructura para ver cómo encajan las piezas producción.

Volúmenes

Algunos volúmenes con nombre persisten en su estado después de los reinicios para que no vuelvas a inicializar todo cada vez: dbdata (MySQL), omegaupdata (los datos del problema compartidos entre frontend, grader y gitserver todo leído), además de rabbitmq y redis. Si la pila alguna vez se atasca genuinamente estado, eliminar estos volúmenes y volver a sembrar es el gran martillo - ver Solución de problemas.

Producción versus desarrollo

docker-compose.yml es la pila de desarrollo. La producción ejecuta los mismos servicios en Kubernetes de docker-compose.k8s.yml con las imágenes omegaup/php y omegaup/nginx en lugar del dev-php todo en uno imagen. La topología del servicio es la misma; el embalaje y el tamaño difieren. Ver Implementación.