Cómo instalar un servidor Git HTTP con Nginx en Debian 11

Git es un sistema de control de versiones de código abierto utilizado por miles de desarrolladores de todo el mundo. Se utiliza para hacer un seguimiento de los cambios de tu software a nivel de código fuente. Te permite seguir los cambios, revertirlos a etapas anteriores y crear una versión alternativa de archivos y directorios.

El Servidor Git HTTP es un proyecto de código abierto que utiliza un servidor web Nginx para servir los repositorios Git a través de tu Red de Área Local (LAN). Es muy sencillo y fácil de configurar. Cualquiera puede gestionarlo desde la interfaz de línea de comandos.

En este tutorial, explicaré cómo configurar un servidor de repositorios Git HTTP con Nginx en Debian 11.

Requisitos previos

  • Un servidor con Debian 11.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en tu servidor.

Instalar Nginx y otras dependencias

En primer lugar, tendrás que instalar el servidor web Nginx y otros paquetes necesarios para configurar un servidor HTTP Git. Puedes instalarlos todos con el siguiente comando:

apt-get install nginx git fcgiwrap apache2-utils unzip -y

Una vez instalados todos los paquetes, puedes pasar al siguiente paso.

Crear un repositorio Git

A continuación, tendrás que crear un directorio para almacenar el repositorio Git. Vamos a crear un directorio llamado myrepo dentro del directorio raíz de la web de Nginx:

mkdir /var/www/html/myrepo

A continuación, cambia el directorio a myrepo y crea otro directorio para los usuarios:

cd /var/www/html/myrepo
mkdir user1.git

A continuación, navega al directorio de usuarios e inicializa el repositorio Git con el siguiente comando:

cd user1.git
git --bare init

Obtendrás la siguiente salida:

Initialized empty Git repository in /var/www/html/myrepo/user1.git/

A continuación, actualiza la información del servidor Git con el siguiente comando:

git update-server-info

A continuación, cambia la propiedad de mirepo y establece los permisos adecuados con el siguiente comando:

chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo

A continuación, crea un usuario llamado user1 y establece una contraseña:

htpasswd -c /var/www/html/myrepo/htpasswd user1

Puedes establecer la contraseña como se muestra a continuación:

New password: 
Re-type new password: 
Adding password for user user1

Puedes comprobar la contraseña con el siguiente comando:

cat /var/www/html/myrepo/htpasswd

Ejemplo de salida:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Configurar Nginx para servir el repositorio Git

A continuación, tendrás que crear un archivo de configuración del host virtual Nginx para servir el repositorio Git.

nano /etc/nginx/conf.d/git.conf

Añade las siguientes líneas:

server {
        listen 80;

        root /var/www/html/myrepo;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name git.yourdomain.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

location ~ (/.*) {
    client_max_body_size 0; 
    auth_basic "Git Login"; 
    auth_basic_user_file "/var/www/html/myrepo/htpasswd";
    include /etc/nginx/fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; 
    fastcgi_param GIT_HTTP_EXPORT_ALL "";
    fastcgi_param GIT_PROJECT_ROOT /var/www/html/myrepo;
    fastcgi_param REMOTE_USER $remote_user;
    fastcgi_param PATH_INFO $1; 
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
}

}

Guarda y cierra el archivo cuando hayas terminado y luego verifica el Nginx por si hay algún error de sintaxis:

nginx -t

Obtendrás la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes comprobar el estado de Nginx con el siguiente comando:

systemctl status nginx

Obtendrás la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-12-11 08:00:04 UTC; 2s ago
       Docs: man:nginx(8)
    Process: 144985 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 144986 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 144987 (nginx)
      Tasks: 2 (limit: 2341)
     Memory: 2.5M
        CPU: 42ms
     CGroup: /system.slice/nginx.service
             ??144987 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??144988 nginx: worker process

Dec 11 08:00:04 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server...
Dec 11 08:00:04 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Dec 11 08:00:04 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.

Conectar con el repositorio Git desde el cliente

En este punto, el servidor HTTP de Git está configurado con Nginx. Ahora, es el momento de conectarlo desde la máquina cliente y probarlo.

En primer lugar, instala el paquete Git en la máquina cliente con el siguiente comando:

apt-get install git -y

A continuación, crea un directorio para tu proyecto con el siguiente comando:

mkdir project

A continuación, navega al directorio de tu proyecto e inicializa el Git utilizando el siguiente comando:

cd project
git init

A continuación, configura Git utilizando tu correo electrónico y tu nombre de usuario:

git config --global user.email "[email protected]"
git config --global user.name "user1"

A continuación, añade tu servidor Git HTTP utilizando el siguiente comando:

git remote add origin http://[email protected]/user1.git

A continuación, crea un directorio llamado dev01 y añade un archivo dentro de él:

mkdir dev01
echo "This is my first application" > dev01/file1

A continuación, añade el directorio y el archivo creados al repositorio Git:

git add .

A continuación, confirma los cambios con el siguiente comando:

git commit -a -m "Add files and directories"

Obtendrás la siguiente salida:

[master (root-commit) 0299d83] Add files and directories
 1 file changed, 1 insertion(+)
 create mode 100644 dev01/file1

A continuación, sube tu archivo y directorio al servidor Git HTTP con el siguiente comando:

git push origin master

Se te pedirá que proporciones tu contraseña para acceder al servidor Git:

Password for 'http://[email protected]': 

Una vez conectado, obtendrás la siguiente salida:

Counting objects: 4, done.
Writing objects: 100% (4/4), 281 bytes | 281.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To http://git.yourdomain.com/user1.git
 * [new branch]      master -> master

También puedes descargar tu repositorio desde el servidor Git directamente utilizando el siguiente comando:

git clone http://[email protected]/user1.git

Obtendrás la siguiente salida:

Cloning into 'user1'...
Password for 'http://[email protected]': 
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.

Conclusión

En la guía anterior, has aprendido a configurar un servidor Git HTTP con Nginx en Debian 11. Ahora puedes implementar esta configuración en tu entorno de desarrollo local y gestionar y seguir tu proyecto utilizando la línea de comandos.

También te podría gustar...