El despliegue de CONVIDA está distribuido entre varios repositorios de aplicación y un repositorio central de infraestructura llamado convida_deployment.
Los repositorios que participan directamente en el proceso son:
abejopolislibadoEditor_V2honeycombconvida_deploymentA nivel general, el flujo esperado es:
push a la rama main, se ejecuta un workflow de GitHub Actions llamado Trigger for deploy.convida_deployment.convida_deployment se valida el estado del código, se solicita aprobación manual y finalmente se construyen y levantan los contenedores en el servidor self-hosted.Cada uno de estos repositorios contiene un workflow con la misma estructura base:
Todos cuentan con un workflow llamado Trigger for deploy que:
push sobre mainPOST a la API de GitHubconvida_deploymentabejopolis envía trigger-from-abejopolislibado envía trigger-from-libadoEditor_V2 envía trigger-from-editorhoneycomb envía trigger-from-honeycombEste repositorio concentra la lógica de despliegue en producción. Ahí se encuentran:
compose.yamlnginxmise.tomlCuando se hace push a main en cualquiera de los repositorios de aplicación, GitHub Actions ejecuta el workflow Trigger for deploy.
El workflow no construye imágenes ni despliega directamente. Su única responsabilidad es notificar al repositorio de despliegue usando la API de GitHub.
Esto desacopla el código de aplicación del pipeline de infraestructura.
convida_deploymentEl repositorio convida_deployment es el encargado de orquestar el despliegue completo.
En el workflow principal, el pipeline está dividido en tres jobs:
build-convidamanual-approvaldeploy-convidaLa intención operativa del flujo es:
build-convidaEste job corre sobre un runner self-hosted.
convida_deploymentEl pipeline:
~/Convida/ si no existe~/Convida/convida_deployment/.git, hace git pull~/Convida/convida_deployment/ hacia ~/Convida/ usando rsyncEsto deja en la raíz de trabajo los archivos operativos necesarios para el despliegue.
El job revisa que existan los Dockerfiles de:
Si falta alguno, el pipeline termina con error.
Después del job de preparación, el workflow ejecuta manual-approval.
Cómo funciona:
build-convidatrstringer/manual-approval@v1Esto introduce una compuerta humana antes del despliegue real en producción.
deploy-convidaUna vez aprobada la ejecución, el pipeline continúa en el runner self-hosted.
El workflow toma de GitHub Secrets:
SSL_CERTSSL_INTERMEDIATESSL_KEYBACKEND_AUTH_SECRETDespués:
~/Convida/reverse_proxy/certsproduction.ini de honeycomb para establecer auth.secretAntes de reconstruir el stack, el pipeline ejecuta:
docker stop $(docker ps -aq)docker rm $(docker ps -aq)docker rmi $(docker images -q)Es una limpieza agresiva del host Docker para asegurar una reconstrucción completa.
Finalmente se ejecuta:
sudo docker-compose --project-name convida --file "$BASE/compose.yaml" build --no-cache
sudo docker-compose --project-name convida --file "$BASE/compose.yaml" up --detach
Con esto se reconstruyen las imágenes y se levanta el stack de producción.
El stack incluye los siguientes servicios:
Todos se conectan a la red Docker convida_network.
frontend
Construye el editor desde editor_convida/Dockerfile.
Incluye argumentos de build para:
- `REACT_APP_START_URL`
- `REACT_APP_API_URL`
backend
Construye el backend desde honeycomb/Dockerfile.
libado
Construye el juego o módulo de Libado desde libado/Dockerfile.
abejopolis
Construye el juego o módulo de Abejopolis desde abejopolis/Dockerfile.
anubis
Usa la imagen actualizada de Anubis cómo capa de protección HTTP.
reverse-proxy
Construye el contenedor Nginx a partir de reverse_proxy/Dockerfile y expone:
80:80443:443Este servicio depende de todos los anteriores.
La configuración de reverse_proxy/conf.d/nginx.conf indica que Nginx actúa como punto de entrada HTTPS para convida.cua.uam.mx.
Antes de servir contenido, Nginx hace una validación con:
auth_request /.within.website/x/cmd/anubis/api/check;
error_page 401 403 =200 /.within.website/?redir=$request_uri;
Eso significa que Anubis funciona como un filtro previo para acceso o mitigación de tráfico automatizado, antes de pasar la solicitud al servicio final.
El archivo mise.toml define tareas auxiliares para preparar entornos de desarrollo o prueba.
Tareas relevantes
honeycomb/development.iniEsto no forma parte directa del despliegue productivo del workflow, pero si prepara el entorno de trabajo para pruebas y validación.
Se necesita de Docker corriendo en el sistema local para que todas las tareas de mise funcionen correctamente.
En windows es recomendable correr los comandos desde la terminal de git.
Para que el pipeline funcione correctamente, se necesitan al menos los siguientes secretos:
En los repositorios de aplicación
GHP_TOKENSe usa para autenticar la llamada a la API de GitHub que notifica a convida_deployment.
Administración de tokens de acceso personal - Documentación de GitHub
En convida_deployment
GHP_TOKENSSL_CERTSSL_INTERMEDIATESSL_KEYBACKEND_AUTH_SECRETUso de secretos en Acciones de GitHub - Documentación de GitHub

El despliegue está centralizado.
Los repositorios de aplicación no despliegan por sí mismos; únicamente notifican al repositorio central.
El servidor de despliegue usa un runner self-hosted
Esto implica que el runner tiene acceso directo al sistema de archivos, certificados, Docker y configuración del host.
El despliegue actual reconstruye todo
El job de producción detiene y elimina todos los contenedores e imágenes Docker antes de volver a construir. Esto simplifica el estado del entorno, pero también aumenta el impacto de cada despliegue.
Hay una aprobación manual obligatoria
No existe despliegue automático directo a producción después del push; siempre hay una intervención humana intermedia.
Nginx y Anubis forman parte del despliegue
La publicación del sistema no solo depende de las aplicaciones, sino también del proxy reverso y de la capa de protección de tráfico.