Servidor GIT auto-alojado y super ligero
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:




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 !!

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...




El repositorio oficial lo podeis encontrar en:
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:
- Tener instalado Docker o Podman
https://soloconlinux.org.es/instalar-docker-en-debian/ - Tener creada una clave publica/privada:
sh-keygen -t ed25519 -C "luisgulo" -f ~/.ssh/soft-serve
- Crear un directorio para almacenar los datos y configuración:
mkdir ~/ServidorGit
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:

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

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: