Gitea: tu propio GitHub en una Raspberry Pi

Cómo monté Gitea con Docker para guardar mis proyectos en casa, con acceso por SSH en otro puerto y el registro cerrado. Y cómo subir un proyecto que ya tienes.

Iván· Publicado el · 2 minRead in English →

Estoy estudiando administración de sistemas y genero muchos archivos: apuntes, scripts, configuraciones del laboratorio… Quería tenerlos con historial de cambios (Git) pero sin subir nada a un servicio externo. La solución: Gitea, un servidor Git ligero con una web muy parecida a GitHub.

En una Raspberry Pi 5 va sobrado: arranca en segundos y apenas usa memoria.

El docker-compose

services:
  gitea:
    image: docker.gitea.com/gitea:1.25
    container_name: gitea
    restart: unless-stopped
    environment:
      USER_UID: "1000"
      USER_GID: "1000"
      GITEA__database__DB_TYPE: sqlite3
      GITEA__server__ROOT_URL: http://192.168.1.50:3000/
      GITEA__server__SSH_PORT: "2222"
      GITEA__service__DISABLE_REGISTRATION: "true"
      GITEA__security__INSTALL_LOCK: "true"
    ports: ["3000:3000", "2222:22"]
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

Lo que merece la pena explicar:

  • Imagen con versión fija (1.25) en vez de latest. Así una actualización no me pilla por sorpresa: subo de versión cuando yo quiero.
  • SQLite como base de datos. Para uso personal sobra, y toda la información queda en la carpeta ./gitea. La copia de seguridad es copiar esa carpeta.
  • Las variables GITEA__seccion__clave rellenan la configuración de Gitea (app.ini) sin tener que editarla a mano.
  • INSTALL_LOCK se salta el asistente web de instalación, porque ya le doy la configuración por variables.
  • DISABLE_REGISTRATION: nadie puede crearse una cuenta desde la web. Las cuentas las creo yo.

El puerto SSH

Git puede trabajar por HTTP o por SSH. Por SSH es más cómodo (sin contraseñas, con tu clave), pero hay un problema: el puerto 22 ya lo usa el SSH de la propia Pi.

La solución es publicar el SSH del contenedor en otro puerto: 2222:22. Y decírselo a Gitea con SSH_PORT, para que las direcciones que te muestra en la web sean correctas:

ssh://git@192.168.1.50:2222/ivan/mi-proyecto.git

Crear el usuario administrador

Como el registro está cerrado y me salté el asistente, el primer usuario se crea desde la terminal:

docker exec -u git gitea gitea admin user create \
  --admin --username ivan --email yo@ejemplo.com \
  --password 'una-temporal' --must-change-password

Con --must-change-password, Gitea te obliga a cambiarla al entrar por primera vez. Hazlo, y guarda la buena en tu gestor de contraseñas. Una contraseña temporal apuntada en unas notas es justo el tipo de cosa que se olvida ahí para siempre.

Subir un proyecto que ya tienes

  1. En la web de Gitea: + → Nuevo repositorio, vacío, sin README.
  2. En tu ordenador, dentro de la carpeta del proyecto:
git init
git add .
git commit -m "Primer commit"
git remote add origin http://192.168.1.50:3000/ivan/mi-proyecto.git
git push -u origin master

Si usas la dirección ssh:// y has añadido tu clave pública en Configuración → Claves SSH, no te pedirá contraseña nunca más.

¿Y si ya uso GitHub?

No son excluyentes. Gitea puede hacer réplicas (mirrors) de repositorios de GitHub, y al revés: empujar tus repositorios de casa a GitHub automáticamente. Yo uso Gitea para lo personal y lo que no quiero fuera de casa.

Copias

Todo está en ./gitea: repositorios, base de datos SQLite, configuración. Mi copia nocturna al NAS copia esa carpeta con el resto. Para una copia «en caliente» más formal, Gitea trae el comando gitea dump.

En resumen

Diez minutos de montaje y tienes tu propio GitHub en casa, con historial de todo lo que haces. Para alguien que estudia sistemas, además, es la excusa perfecta para usar Git a diario.

Mini-quiz

¿Te has quedado con la idea?

Tres preguntas rápidas. Cada acierto suma 10 XP.

  1. ¿Por qué el SSH de Gitea va en el puerto 2222 y no en el 22?
  2. ¿Qué hace GITEA__service__DISABLE_REGISTRATION=true?
  3. ¿Qué base de datos usa esta instalación?
  • #gitea
  • #git
  • #docker
  • #raspberry-pi
  • #autoalojado
Esc