Servidor GIT auto-alojado y super ligero

Aplicaciones 13 de feb. de 2025

Existen multiples servidores GIT que podemos usar en modo on-premise para nuestro uso personal, tales como GitLab, Gitea, Forgejo, Gitolite, Gitness, etc.

Algunos de ellos consumen muchos recursos (por ejemplo GitLab), otros mucho menos (Gitea, Forgejo) y otros pueden ser un poco "extraños" a la hora de su configuración.

Antes de pasar a contaros otra opción a tener en cuenta, os dejo los enlaces a todos los anteriores:

The most-comprehensive AI-powered DevSecOps platform
From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.
GitLab (escoger GitLab Community -Free-)
Gitea Official Website
Gitea - Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD
Gitea
Forgejo – Beyond coding. We forge.
Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.
Forgejo (Fork de Gitea)
Gitolite
None
Gitolite
Gitness: Your Ultimate Open Source Development Platform
Gtiness is a new alternative to the limited open source version control solutions available with the breadth and depth of features to empower development teams to write and deliver code with safety and speed.
Gitness

Soft-Serve: Servidor Git basado en terminal

Un servidor Git, muy ligero a tener en cuenta es soft-serve

Funcionando al 100% apenas consume unos 16 Mb de RAM !!

Consumo mínimo de RAM

A pesar de estar basado unicamente en consola dispone una administracion TUI es decir un "Text User Inteface" que permite navegar mediante teclado por el servidor Git, los repositorios existentes, ver commits, tags, etc...

Información General
Acerca de (Personalizable)
Visualizar el README de un repositorio
Visualización de los Commits

El repositorio oficial lo podeis encontrar en:

GitHub - charmbracelet/soft-serve: The mighty, self-hostable Git server for the command line🍦
The mighty, self-hostable Git server for the command line🍦 - charmbracelet/soft-serve
GitHub de Soft-Serve

Podeis instalarlo mediante la paquetería de vuestro sistema operativo, mediante docker o incluso usar un único binario que podeis descargar desde el apartado releases de su GitHub: https://github.com/charmbracelet/soft-serve/releases

Uso mediante Docker

Una de las formas más sencillas para su uso es mediante Docker.

Que vamos a necesitar para usarlo como contenedor:

Puedes iniciar el contenedor simplemente escribiendo en tu terminal:

docker run -d \
  --name=soft-serve \
  --volume /home/TU_USUARIO/ServidorGit:/soft-serve \
  --publish 23231:23231 \
  --publish 23232:23232 \
  --publish 23233:23233 \
  --publish 9418:9418 \
  -e SOFT_SERVE_INITIAL_ADMIN_KEYS="ssh-ed25519 XxxxxYyyyyyZzzzzz TU_USUARIO" \
  --restart unless-stopped \
  charmcli/soft-serve:latest

Atención:
Cambia TU_USUARIO por el nombre de tu usuario.
En la variable de entorno SOFT..ADMIN_KEYS simplemente pega el contenido de la clave pública soft-serve.pub  que has generado, o cualquier otra que quieras usar.
En la parte de volume simplemente indica la ruta absoluta del directorio que te has creado en donde quieras que se almacenen los datos del servidor.

Administración básica de Soft-Serve

Toda la gestión del servidor Git se realiza mediante comandos y con conexión vía SSH.

Gestión de usuarios. Comando user:

ssh -p 23231 localhost user [comando]

create         Crear un nuevo usuario
	 Ejemplo: user create USUARIO
add-pubkey     Incluir la clave publica a un usuario
     Ejemplo: user add-pubkey USUARIO AUTHORIZED_KEY
list           Mostrar listado de los usuarios
set-username   Cambiar nombre a un usuario
	Ejemplo: user set-username USUARIO NUEVO_NombreUSUARIO

remove-pubkey  Eliminar la clave publica de un usuario
	Ejemplo: user remove-pubkey USUARIO AUTHORIZED_KEY
delete         Eliminar un usuario
	Ejemplo: user delete USUARIO
    
set-admin	   Fijar/Quitar privilegio de Admin
    Ejemplo: user set-admin USUARIO [true|false]

Gestión del Repositorio. Comando repo:

ssh -p 23231 localhost repo [comando]

create       Crear un nuevo repositorio
delete       Borrar un repositorio
import       Importa un repositorio remoto

collab       Gestionar colaboradores de un repositorio
description  Obtener o Definir la descripión de un repositorio
project-name Obtener/Definir el nombre de un repositorio
branch       Gestionar las ramas de un repositorio
blob         Listar todo el contenido de un fichero de una ruta
commit       Listar todo el contenido de un diff
info         Get information about a repository
rename       Renombrar un repositorio existente

is-mirror    Definir si un repositorio es un mirror
private      Ver y Fijar/Quitar repositorio como privado
hidden       Ocultar o Mostrar un repositorio

list         Listar todos los repositorios
private      Set or get a repository private property


tag          Manage repository tags
tree         Print repository tree at path
webhook      Manage repository webhooks

Uso del servidor soft-serve como Cliente

Para facilitar el uso de la clave publica/privada lo más sencillo es crear un fichero de nombre config y dentro de él indicar que clave vamos a usar cuando usemos la conexión ssh.
Podemos por ejemplo definir para nuestro contenedor que se ejecuta en localhost la clave privada que usaremos:

# Fichero /home/<usuario>/.ssh/config

Host localhost
  HostName localhost
  IdentityFile ~/.ssh/soft-serve

Ahora simplemente usaremos los comandos git tal y como estamos acostumbrados.

Ejemplo completo para un repositorio de prueba

En el "servidor"

  • Como administrador del servidor creamos el repositorio prueba:
    ssh -p 23231 localhost repo create prueba
  • Lo ponemos en modo privado:  
    ssh -p 23231 localhost repo private prueba true
  • Comprobamos que se ha generado:
    ssh -p 23231 localhost repo list

Como "usuarios del servidor git"

  • Creamos un directorio en nuestro PC para nuestra primera tarea:
    mkdir -p ~/ProyectosGIT/prueba
  • Nos cambiamos a el y lo iniciamos para usarlo con Git:
    cd ~/ProyectosGIT/prueba  
    git init
  • Creamos un primer fichero README.md:
    echo Probando > README.md
  • "Comiteamos" el/los ficheros:
    git add .
    git commit -m "Primera subida"
  • Definimos el repositorio destino:
    git remote add origin ssh://localhost:23231/prueba  
    git push --set-upstream origin main
    Nota: También podemos definir el uso de http para usar el repositorio
  • Subimos los cambios:
    git push

Conectarse y revisar en el servidor mediante TUI:
ssh -p 23231 localhost

Usaremos la tecla del TABULADOR para cambiar entre las diferentes opciones, las flechas de dirección para moverse:

Moverse con TAB y Flechas

Usaremos la tecla INTRO para entrar a visualizar detalles de lo que tenemos seleccionado, por ejemplo un commit:

INTRO para visualizar lo seleccionado

HTTPS para Soft-Serve

Si quieres configurar su servidor para poder usar https en vez de http, y publicarlo desde internet, dentro del directorio/volumen que creaste para almacenar los datos, existe un fichero de nombre config.yaml, deberás editarlo e indicar la ruta y nombre de tu clave y del certificado.
Puedes usar incluso certificados de Let's Encrypt :

# Fichero config.yaml

  # The path to the TLS private key.
  tls_key_path: ./mi-fichero.key
  # The path to the TLS certificate.
  tls_cert_path: ./mi-fichero.cer

Luego edita la parte de public_url, cambia http por https e incluye el nombre de tu dominio:

public_url: "https://mi-dominio:23232"

Parar e iniciar el contenedor de Soft-Serve

Para pararlo y luego poder volver a iniciarlo con el mismo nombre de contenedor, simplemente ejecuta lo siguiente:

docker stop soft-serve
docker rm soft-serve

Se detiene y borra el contenedor, pero no sus datos ni configuración.

Para iniciarlo simplemente vuelve a escribir en tu terminal:

docker run -d \
  --name=soft-serve \
  --volume /home/TU_USUARIO/ServidorGit:/soft-serve \
  --publish 23231:23231 \
  --publish 23232:23232 \
  --publish 23233:23233 \
  --publish 9418:9418 \
  -e SOFT_SERVE_INITIAL_ADMIN_KEYS="ssh-ed25519 XxxxxYyyyyyZzzzzz TU_USUARIO" \
  --restart unless-stopped \
  charmcli/soft-serve:latest

Información/Documentación Oficial

Podeis leer y obtener más detalles de parámetros y opciones en el fichero README del repositorio GitHub del proyecto:

soft-serve/README.md at main · charmbracelet/soft-serve
The mighty, self-hostable Git server for the command line🍦 - charmbracelet/soft-serve
README del Proyecto

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux