Este lab reproduce en terminal la guía para actualizar Gitea 28 con Docker: partimos de Gitea 1.27.3 en Docker Compose, con la versión fijada en GITEA_TAG dentro del .env, y lo llevamos a la 28.0.0 sin perder el repositorio ni el webhook. Si aún no tienes Gitea, empieza por cómo instalar Gitea con Docker.

Qué cambia al pasar de Gitea 1.27 a 28

Gitea 28.0.0 es la versión que sigue a la 1.27.3: el anuncio oficial de Gitea 28.0.0 explica que el proyecto quitó el prefijo 1. de la numeración. En Docker cambia una línea del .env, pero la 28 aplica 13 migraciones de esquema y cambia cómo salen los webhooks: pasan por una política de salida, EGRESS_MODE, que en modo strict solo entrega a los hosts de ALLOWED_HOST_LIST. El cambio llegó con el PR 39426 de Gitea.

Qué demuestra la captura

Cada paso del vídeo se ejecutó de verdad. La captura deja cuatro pruebas:

  • la API pasa de {"version":"1.27.3"} a {"version":"28.0.0"}
  • la 28 registra 13 migraciones, de la 343 a la 355, y 0 líneas de error
  • el repositorio labadmin/demo y el webhook hacia el nginx de la red interna siguen ahí, y el nginx cuenta 2 entregas, una por versión
  • con EGRESS_MODE=strict, un webhook a example.com queda denegado con denied by egress policy

La copia de seguridad, con Gitea parado

La documentación de copias de seguridad de Gitea pide parar la instancia antes de copiar. El lab usa SQLite, así que la base de datos vive en el volumen /data y un solo tar guarda repositorios, app.ini y base de datos. El artículo original usa PostgreSQL y añade un pg_dump; si quieres practicar el patrón de copia y restauración, lo tienes en el lab de copias de seguridad de volúmenes Docker.

Por qué el sed sobre app.ini

El script de arranque de la imagen escribe cada variable GITEA__ en app.ini y nunca borra nada. Por eso la clave heredada [webhook] ALLOWED_HOST_LIST sigue en el fichero aunque la quites del Compose, y la 1.27.3 ya avisa al arrancar de que se elimina en la v28.0.0. El lab la borra con el mismo sed del artículo, con Gitea parado. La sustitución de ${GITEA_TAG} es la interpolación de variables de Docker Compose; si Compose es nuevo para ti, repasa el lab de aplicaciones multicontenedor con Docker Compose.

Lo que este lab no cubre

El artículo prueba además mirrors, la retención de 400 días de Actions con RUN_RETENTION_DAYS, el bucle de reinicios por un comodín en BLOCKED_DOMAINS y la vuelta atrás con pg_restore. Aquí no los repetimos: consulta esas secciones en la guía antes de actualizar una instancia con esos elementos, y la guía oficial de actualización de Gitea.

Preguntas frecuentes

¿Por qué Gitea pasa de la 1.27 a la 28 y no a la 1.28?

El proyecto quitó el prefijo histórico 1. de la numeración, así que la versión que sigue a la 1.27.3 es la 28.0.0. En Docker solo cambia la etiqueta de la imagen: docker.gitea.com/gitea:28.0.0.

¿Hace falta parar Gitea para hacer la copia de seguridad?

Sí. La documentación de Gitea pide parar la instancia antes de copiar, porque la base de datos y los repositorios cambian a la vez. En este lab paramos el servicio con docker compose stop gitea y archivamos el volumen con tar desde un contenedor alpine montado en solo lectura.

¿Por qué hay que limpiar app.ini si ya he cambiado el docker-compose.yml?

Porque el script de arranque de la imagen escribe cada variable GITEA__ en app.ini y nunca borra ninguna. La clave [webhook] ALLOWED_HOST_LIST sigue en el fichero aunque la quites del Compose, y la 1.27.3 ya avisa de que la 28 deja de leerla.

¿Puedo volver a Gitea 1.27 después de actualizar?

Solo restaurando la copia. La 28.0.0 aplica 13 migraciones de esquema al arrancar y, como muestra la guía original, la 1.27.3 se niega a arrancar sobre una base de datos migrada. Restaura el volumen desde el tar, devuelve GITEA_TAG a 1.27.3 y arranca otra vez.