Por qué autoalojar su forja Git en un VPS
Una forja Git autoalojada mantiene su propiedad intelectual fuera de las plataformas públicas y elimina cualquier límite arbitrario sobre el número de repositorios privados, de colaboradores o de minutos de CI. En un VPS, usted controla la localización de los datos, las copias de seguridad y la integración con su pipeline interno. Gitea (y su fork Forgejo) está escrito en Go: un binario único, arranque instantáneo, huella de memoria mínima, ideal para un VPS modesto. GitLab CE es una suite integrada (incidencias, CI/CD, registro Docker, registro de paquetes, wiki, entornos), pero consume mucha más RAM. La elección depende de su necesidad: un Git limpio y rápido, o una plataforma DevOps completa en un solo producto.
Las ventajas de una forja autoalojada
- Repositorios privados sin tope ni suscripción por puesto
- CI/CD bajo su control, con sus propios runners en el VPS
- Secretos y tokens almacenados en su servidor, fuera de una plataforma de terceros
- Registro de imágenes Docker y de paquetes integrado, cerca de sus despliegues
- Cumplimiento y localización de los datos en Marruecos bajo control
- Con Gitea: un único binario, con una copia de seguridad que se limita a una carpeta y una base de datos
Requisitos según la forja elegida
Gitea es frugal: 1 vCPU y 1 GB de RAM bastan para un equipo pequeño, 2 GB con la base de datos y algunos runners. GitLab CE es mucho más exigente: apunte como mínimo a 4 GB de RAM (8 GB recomendados en uso real con CI), 4 vCPU y un disco rápido, porque la suite incorpora PostgreSQL, Redis, Sidekiq y Gitaly. En ambos casos necesita Docker y Compose, un subdominio (git.sudominio.com), un reverse proxy para el TLS e, idealmente, un segundo subdominio si activa el registro Docker. Prevea un volumen dedicado a los repositorios y una estrategia de copias de seguridad.
Desplegar Gitea (o GitLab) en un VPS con Docker
Crear los volúmenes y la red
Prepare
mkdir -p /srv/gitea/{data,db}y una red Docker dedicadadocker network create forge. La separación data/db facilita copias de seguridad diferenciadas del código y de la base de datos.Definir el docker-compose.yml
Para Gitea, declare el servicio
gitea/giteamás unpostgres, monte los volúmenes y exponga el puerto HTTP3000y el puerto SSH de Git2222en local. Para GitLab, utilicegitlab/gitlab-cecon la variableGITLAB_OMNIBUS_CONFIGpara fijar laexternal_url.Arrancar y finalizar la instalación
Ejecute
docker compose up -d. Gitea muestra un asistente de instalación en la primera conexión (indique el tipo de base de datos y el dominio); GitLab tarda varios minutos en inicializarse, recupere en los logs la contraseña root generada.Configurar el reverse proxy y el SSL
Haga de proxy de git.sudominio.com hacia el puerto HTTP de la forja con Caddy o Nginx para obtener un certificado Let's Encrypt. Asegúrese de transmitir el
X-Forwarded-Protocorrecto para que las URL de clonado HTTPS sean correctas.Activar el SSH de Git
Mapee el puerto SSH del contenedor hacia un puerto del VPS (por ejemplo, 2222) y configure sus claves. Rellene
SSH_DOMAINpara que los comandosgit cloneque propone la interfaz sean exactos.Conectar la CI/CD
Registre un runner: Gitea Actions (compatible con la sintaxis de GitHub Actions) o un GitLab Runner Docker. Limite sus recursos y aíslelo en su propio contenedor para que un job pesado no tumbe la forja.
Desplace la tabla
| Criterio | Gitea | GitLab CE |
|---|---|---|
| RAM mínima recomendada | De 1 a 2 GB | De 4 a 8 GB |
| Arquitectura | Binario Go único | Suite multiservicio (omnibus) |
| Tiempo de arranque | Casi instantáneo | Varios minutos |
| CI/CD integrada | Gitea Actions (estilo GitHub) | GitLab CI/CD, muy completa |
| Registro Docker / paquetes | Incluido y ligero | Incluido, completo |
| Gestión de proyectos (incidencias, tableros) | Esencial | Avanzada (epics según la edición) |
| Facilidad de copia de seguridad | Carpeta + dump SQL | Procedimiento omnibus dedicado |
| Ideal para | VPS modesto, equipo pequeño/mediano | Plataforma DevOps completa |
En GitLab, evite el OOM-kill en un VPS pequeño reduciendo la concurrencia: ponga puma['worker_processes'] a 2 y sidekiq['max_concurrency'] a 10 en la configuración omnibus. Si la RAM sigue siendo un problema, eche un vistazo a Forgejo (fork comunitario de Gitea), que conserva la ligereza y cubre el 90% de las necesidades de un equipo, registro y Actions incluidos.