Self-hosting
Llevarlo a producción
Instalar byox en tu portátil y ponerlo a disposición de un equipo o un aula son dos cosas distintas. Esta guía cubre la segunda: un servidor con dominio, HTTPS, copias de seguridad y un plan de actualización.
Lista de verificación
Antes de dar acceso a otras personas:
- Una máquina o VM dedicada, no tu equipo de trabajo (ver Seguridad).
- Dos nombres de dominio apuntando al servidor: uno para la app y otro para Forgejo.
- Un proxy inverso con HTTPS delante de los puertos 3333 y 3000.
-
BYOX_SIGNUPenclosedoinvite, yBYOX_AUTHORSenadmin. - Copias de seguridad automáticas de los dos volúmenes y de
.env. - Un plan para actualizar.
Dominio y proxy
byox publica sus puertos solo en 127.0.0.1. Eso es lo que quieres en producción: el único punto de entrada es tu proxy, que termina TLS.
Necesitas dos nombres, por ejemplo byox.ejemplo.com para la app y git.ejemplo.com para Forgejo. Los alumnos usan la primera en el navegador y la segunda para clonar y hacer push.
Con Caddy
Caddy obtiene y renueva los certificados solo:
byox.ejemplo.com {
reverse_proxy 127.0.0.1:3333
}
git.ejemplo.com {
reverse_proxy 127.0.0.1:3000
}
Con nginx
server {
server_name byox.ejemplo.com;
listen 443 ssl;
# ssl_certificate y ssl_certificate_key: los de tu certificado
location / {
proxy_pass http://127.0.0.1:3333;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}
}
server {
server_name git.ejemplo.com;
listen 443 ssl;
client_max_body_size 512m; # pushes grandes
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Variables
En .env:
BYOX_PUBLIC_URL=https://git.ejemplo.com
BYOX_DOMAIN=git.ejemplo.com
BYOX_WEB_URL=https://byox.ejemplo.com
BYOX_TRUST_PROXY=1
BYOX_SECURE_COOKIES=1
BYOX_SIGNUP=invite
Aplica los cambios:
docker compose up -d --build
BYOX_TRUST_PROXY hace que byox use la IP real de cada visitante para el límite de intentos de inicio de sesión. BYOX_SECURE_COOKIES marca la cookie de sesión como Secure. Cada variable está descrita en Configuración.
Si ya tenías repositorios clonados con la dirección anterior, cada persona debe actualizar su remoto: git remote set-url origin https://git.ejemplo.com/<usuario>/<curso>.git.
Firewall
Solo necesitas abrir hacia fuera:
| Puerto | Para qué |
|---|---|
| 443 (y 80 para renovar certificados) | El proxy |
| 22 | SSH de administración |
Los puertos 3000, 3333 y 2222 quedan atados a 127.0.0.1: no los abras. Si quieres que los alumnos usen git por SSH, publica el 2222 deliberadamente; por HTTPS no hace falta.
Dimensionar
No hay una cifra única: depende de cuántas personas hagan push a la vez y de la imagen de cada curso. Lo que importa:
- CPU y memoria: cada push de un alumno arranca contenedores con la imagen del curso. El runner ejecuta
capacityjobs en paralelo (2 por defecto, endata/runner/config.yml). Súbelo si ves cola. - Disco: las imágenes de Docker de cada lenguaje se acumulan, y cada curso tiene un volumen de caché (
byox-cache-<curso>) con las dependencias descargadas. Vigila el uso condocker system df. - Compilación: la primera ejecución de un curso es la más lenta (descarga y compilación); las siguientes reutilizan la caché.
Copias de seguridad
Todo el estado de byox está en dos volúmenes de Docker y en un archivo:
| Qué | Dónde | Por qué importa |
|---|---|---|
| Repositorios, cuentas, issues | volumen byox_forgejo-data |
Es todo el contenido y el progreso. |
| Sesiones, tokens, secreto del CI | volumen byox_mcp-data |
Sin él, hay que volver a crear tokens y reiniciar sesión. |
| Credenciales de la instancia | .env y data/runner/ |
Sin ellos no puedes reconectar los servicios. |
Una copia consistente se hace con la instancia detenida:
docker compose stop
docker run --rm -v byox_forgejo-data:/d -v "$PWD":/b alpine tar czf /b/forgejo-data.tgz -C /d .
docker run --rm -v byox_mcp-data:/d -v "$PWD":/b alpine tar czf /b/mcp-data.tgz -C /d .
tar czf config.tgz .env data/runner
docker compose start
Guarda esos tres archivos fuera del servidor, y cifra config.tgz: contiene credenciales. Programa la copia (por ejemplo, con cron de madrugada) y prueba restaurarla antes de necesitarla.
Restaurar
Con los servicios detenidos y los volúmenes vacíos (o recreados):
docker compose down
docker run --rm -v byox_forgejo-data:/d -v "$PWD":/b alpine sh -c "cd /d && tar xzf /b/forgejo-data.tgz"
docker run --rm -v byox_mcp-data:/d -v "$PWD":/b alpine sh -c "cd /d && tar xzf /b/mcp-data.tgz"
tar xzf config.tgz
docker compose up -d
Actualizar
git pull
docker compose up -d --build
Los datos se conservan. Antes de actualizar, haz una copia. Después:
- Los cursos que alumnos ya empezaron mantienen los workflows con los que se crearon. Para traer los nuevos sin perder progreso, usa
upgrade_coursedesde el asistente. Si el curso además tiene etapas nuevas, la portada ofrece un botón Actualizar que hace lo mismo. Tu código no se toca nunca. - Si ves resultados de tests que dejan de aparecer tras una actualización, es el caso anterior: el repositorio necesita su
upgrade.
Rotar secretos
| Qué rotar | Cómo |
|---|---|
| Contraseña de un usuario | Cambiarla desde Cuenta, o con forgejo admin user change-password. |
| Tokens personales | Revocarlos y crear otros en Cuenta → Tokens de acceso. |
BYOX_SECRET |
Cambia el valor en .env y ejecuta docker compose up -d. Los repositorios de alumnos dejan de poder informar resultados hasta que se ejecute upgrade_course en cada uno, porque su secreto de CI se deriva de este. |
BYOX_TOKEN y BYOX_BOT_TOKEN |
Genera tokens nuevos con forgejo admin user generate-access-token, actualiza .env y aplica. Para el bot, ejecuta después upgrade_course para que cada repositorio reciba el token nuevo. |
Monitoreo
- Salud:
GET /healthrespondeoksi el servicio vive. Sirve para un monitor externo. - Estado de servicios: la barra lateral de la app muestra el de Forgejo y el del runner.
- Logs:
docker compose logs -f(agregamcp,forgejoorunnerpara uno solo). - Espacio:
docker system dfydf -h.