Ir al contenido
  1. Posts/

Gitea: monté mi propio GitHub y no vuelvo atrás

·1602 palabras·8 mins

Llevo dos años pagando GitHub Pro. 4$ al mes. No es mucho dinero pero me molestaba. No porque sea caro, sino porque estaba pagando por algo que podía tener en mi homelab. Repos privados ilimitados, CI/CD, wikis, issues… todo corriendo en 200MB de RAM.

En diciembre monté Gitea y migré todos mis repos. No he vuelto a GitHub para proyectos personales.

Por qué self-hostear Git
#

GitHub está bien. Es rápido, fiable, todo el mundo lo conoce. Pero tiene varios problemas si trabajas en proyectos personales o internos de empresa:

Privacidad: Tus repos están en servidores de Microsoft. Para proyectos de clientes con datos sensibles, eso puede ser un problema legal. Con Gitea, todo queda en tu servidor.

Control: GitHub cambia features, precios, términos de servicio cuando le da la gana. Recuerdo cuando limitaron las GitHub Actions en repos privados. Con Gitea, tú decides.

Coste: 4$/mes por usuario en Pro, 21$/mes en Team. Si tienes 5 colaboradores, son 105$/mes. Gitea corre en un VPS de 5$/mes o gratis en tu homelab.

Dependencias: Si GitHub cae (ha pasado), todos tus deploys se detienen. Si tu Gitea cae, bueno, también. Pero al menos está bajo tu control.

No odio GitHub. Lo sigo usando para open source porque ahí está la comunidad. Pero para proyectos internos, clientes y backups, prefiero tener el control.

Qué es Gitea
#

Gitea es un servidor Git autoalojado escrito en Go. Es básicamente un clon de GitHub que puedes correr en tu propia infraestructura. Tiene:

  • Repos públicos y privados ilimitados
  • Issues, pull requests, code review
  • Wikis, releases, webhooks
  • CI/CD integrado (Gitea Actions, compatible con GitHub Actions)
  • Autenticación: local, LDAP, OAuth2
  • API REST completa
  • Migraciones desde GitHub/GitLab/Bitbucket

La diferencia con GitLab: Gitea es ligero. GitLab recomienda 4GB de RAM mínimo. Gitea corre perfectamente con 512MB. En mi setup usa 180-200MB de RAM con 40 repos activos.

Mi instalación: Docker con SQLite
#

Voy a explicar mi setup exacto. Es simple, funciona, y lo tienes corriendo en 10 minutos.

Hardware:

  • Mini PC con Debian 11
  • 8GB RAM (pero Gitea solo usa 200MB)
  • Disco SSD de 256GB (los repos ocupan ~12GB ahora)

1. Preparar el entorno
#

Crea las carpetas:

1
2
mkdir -p ~/gitea/{data,config}
cd ~/gitea

2. Docker Compose
#

Mi docker-compose.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3"

services:
  gitea:
    image: gitea/gitea:1.21
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
      - GITEA__server__DOMAIN=git.tudominio.com
      - GITEA__server__SSH_DOMAIN=git.tudominio.com
      - GITEA__server__ROOT_URL=https://git.tudominio.com/
      - GITEA__server__SSH_PORT=2222
    restart: always
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"

Ajusta:

  • DOMAIN y ROOT_URL: tu dominio real
  • Puertos: yo uso 3000 interno pero lo expongo vía reverse proxy (ver abajo)

Por qué SQLite: Para menos de 10 usuarios concurrentes, SQLite es más que suficiente. Postgres es overkill para homelabs pequeños. Si creces, Gitea permite migrar a Postgres después.

3. Arrancar el container
#

1
docker-compose up -d

Logs para ver que arranca bien:

1
docker logs -f gitea

Deberías ver líneas como:

1
2
2026/03/04 14:23:18 ...s/install/install.go:156:Info() [I] SQLite3 Supported
2026/03/04 14:23:19 ...s/install/install.go:186:Info() [I] Run Mode: Production

Accede a http://tuservidor:3000 y verás la página de instalación inicial.

4. Configuración inicial
#

Primera vez que entras, Gitea te muestra un formulario de setup:

Base de datos:

  • Tipo: SQLite3 (ya viene preseleccionado)
  • Ruta: dejar por defecto

Configuración general:

  • Título del sitio: lo que quieras (ej: “Git Homelab”)
  • URL base: https://git.tudominio.com (importante si usas reverse proxy)
  • Puerto SSH: 2222 (o el que hayas mapeado)
  • Deshabilitar registro público: (a no ser que quieras que cualquiera se registre)

Cuenta de administrador:

  • Usuario: admin
  • Contraseña: algo seguro
  • Email: tu email

Dale a “Instalar Gitea” y espera 10-15 segundos. Listo. Ya tienes tu servidor Git.

Exponer con Cloudflare Tunnel
#

No abro puertos en mi router. Uso Cloudflare Tunnel para exponer Gitea de forma segura.

Tengo cloudflared corriendo en otro container:

1
2
3
4
5
6
7
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: unless-stopped
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=tu-token-aqui

Y el túnel apunta a http://gitea:3000. Esto me da:

  • HTTPS automático
  • No puertos abiertos (más seguro)
  • Acceso desde cualquier sitio

Configurar Cloudflare Tunnel da para otro post. Si quieres una guía rápida, avísame.

Migrar repos desde GitHub
#

Gitea tiene un migrador integrado. Ve a tu Gitea, click en “+” (arriba derecha), “Nueva migración”.

Selecciona GitHub, pega la URL del repo. Si es privado, necesitas un token de GitHub:

  1. GitHub → Settings → Developer settings → Personal access tokens
  2. Genera token con permisos repo
  3. Pégalo en Gitea

Gitea clona todo: commits, branches, issues, pull requests, releases. Tarda según el tamaño del repo. Un repo de 500MB me tardó 3 minutos.

Repite para cada repo. Tedioso pero solo lo haces una vez.

Actualizar remotes locales
#

En tus repos locales:

1
git remote set-url origin https://git.tudominio.com/usuario/repo.git

O si usas SSH:

1
git remote set-url origin [email protected]:usuario/repo.git

SSH con puerto custom (2222)
#

Si usas SSH, necesitas configurar tu cliente. Edita ~/.ssh/config:

1
2
3
Host git.tudominio.com
    Port 2222
    User git

Luego los comandos git funcionan normal:

1
git clone [email protected]:usuario/repo.git

Sube tu clave SSH pública en Gitea (Settings → SSH Keys).

Backups automáticos
#

Gitea guarda todo en /data dentro del container. Eso mapea a ~/gitea/data en el host.

Mi script de backup:

1
2
3
#!/bin/bash
tar -czf /backups/gitea-$(date +%Y%m%d).tar.gz ~/gitea/data
find /backups -name "gitea-*.tar.gz" -mtime +30 -delete

Cron diario a las 3am:

1
0 3 * * * /home/luis/scripts/backup-gitea.sh

También subo los backups a B2 con rclone una vez por semana. Paranoia justificada.

Gitea Actions: CI/CD gratis
#

Desde Gitea 1.19, hay CI/CD integrado compatible con GitHub Actions. Puedes reutilizar workflows de GitHub casi sin cambios.

Ejemplo: auto-deploy de este blog. Mi .gitea/workflows/deploy.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build
        run: hugo --minify
      - name: Deploy
        run: rsync -avz public/ servidor:/var/www/blog/

El runner corre en el mismo servidor que Gitea (un container aparte). Consume ~500MB de RAM cuando ejecuta, 0 en idle.

Config del runner:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
  gitea-runner:
    image: gitea/act_runner:latest
    container_name: gitea-runner
    restart: always
    volumes:
      - ./runner:/data
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - GITEA_INSTANCE_URL=http://gitea:3000
      - GITEA_RUNNER_REGISTRATION_TOKEN=tu-token

Genera el token en Gitea (Admin → Runners → Create token). Pégalo en el compose.

Actions guardados: 0$/mes. En GitHub Actions te cobran minutos después del free tier.

Rendimiento real
#

Mi Gitea lleva 3 meses corriendo. Stats:

  • 42 repos (mix de proyectos web, scripts, dotfiles)
  • 3 usuarios (yo, un colaborador, un bot)
  • Commits semanales: 50-80
  • CI/CD builds: ~20 por semana
  • RAM usada: 180-220MB
  • CPU: casi 0% en idle, picos de 10-15% durante git push grandes

El servidor es un Minisforum con i3-8100. Gitea comparte recursos con Plex, n8n, varios otros servicios. Nunca he notado ralentizaciones.

Cosas que echo de menos de GitHub
#

Copilot: No hay equivalente self-hosted decente. Sigo usando VSCode con Copilot, apuntando a GitHub para eso.

Discoverability: Nadie va a encontrar tu proyecto en Gitea. Si quieres stars, colaboradores externos, visibilidad… GitHub sigue siendo el sitio.

Mobile app: GitHub tiene app móvil oficial. Gitea no. Hay clientes de terceros (GitTouch) pero no es lo mismo.

Notificaciones: El sistema de notificaciones de Gitea es básico. GitHub es mejor en eso.

Para proyectos de empresa o personales que no necesitas compartir, esto no importa. Para open source, quédate en GitHub.

Cuándo NO usar Gitea
#

Si tu empresa tiene más de 20 desarrolladores activos, GitLab puede ser mejor opción. Tiene más features enterprise (SAML, audit logs, compliance, etc.).

Si necesitas integraciones específicas que solo existen para GitHub (Vercel, Netlify, etc.), tendrás que seguir en GitHub o montar webhooks custom.

Si no quieres gestionar backups, monitorización, actualizaciones… paga GitHub y duerme tranquilo.

Actualizaciones
#

Gitea saca releases cada 1-2 meses. Actualizar es trivial con Docker:

1
2
docker-compose pull
docker-compose up -d

Hace pull de la nueva imagen, recrea el container, done. Tarda 20 segundos. He actualizado 4 veces sin problemas.

Protip: Lee las release notes antes. A veces hay cambios de config que requieren ajustes manuales.

Alternativas
#

Si Gitea no te convence:

GitLab CE: Más completo pero pesado (4GB RAM mínimo). Overkill para homelabs.

Gogs: El predecesor de Gitea. Más ligero aún (~50MB RAM) pero desarrollo lento.

cgit: Ultra minimalista, solo para leer repos. Ni issues ni PRs.

Yo probé Gogs y GitLab antes de Gitea. Gogs es demasiado básico, GitLab demasiado pesado. Gitea es el punto dulce.

Coste total
#

Setup inicial: 2 horas (incluyendo migrar repos y configurar tunnel).

Hardware: 0€ (usa un servidor que ya tenía).

Electricidad: +5W aprox, ~3€/año.

Mantenimiento: 10 minutos al mes (actualizaciones, revisar backups).

Ahorro vs GitHub Pro: 48€/año.

No es el mayor ahorro del mundo pero me gusta tener el control. Y si añado más usuarios, el ahorro crece (GitHub cobra por usuario, Gitea no).

Conclusión
#

Gitea es perfecto para:

  • Proyectos personales
  • Repos de empresa pequeña/mediana
  • Backup de repos públicos de GitHub
  • Aprender Git en un entorno controlado

No es perfecto para:

  • Open source que busca comunidad
  • Equipos distribuidos sin conocimiento técnico
  • Si no quieres gestionar infraestructura

Llevo 3 meses con Gitea y no he tenido un solo problema. Es rápido, ligero, hace lo que necesito. Para mis necesidades, es mejor que GitHub.

Si tienes un homelab y usas Git, prueba Gitea. Lo peor que puede pasar es que vuelvas a GitHub. Lo mejor, que te ahorres dinero y ganes privacidad.

Recursos
#

Si montas Gitea y tienes problemas, pregunta en los comentarios.