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

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

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

HTTP Git Server es un proyecto de código abierto que utiliza un servidor web Nginx para servir repositorios Git a través de su red de área local (LAN). Es muy simple y fácil de configurar. Cualquiera puede administrarlo desde la interfaz de línea de comandos.

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

requisitos previos

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

Instalar Nginx y otras dependencias

Primero, deberá instalar el servidor web Nginx y otros paquetes necesarios para configurar un servidor HTTP Git. Puede instalarlos todos usando el siguiente comando:

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

Una vez que todos los paquetes estén instalados, puede continuar con el siguiente paso.

Crear un repositorio de Git

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

mkdir /var/www/html/myrepo

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

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

A continuación, navegue hasta el directorio de usuarios e inicialice el repositorio de Git con el siguiente comando:

cd user1.git
git --bare init

Obtendrá el siguiente resultado:

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

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

git update-server-info

A continuación, cambie la propiedad de myrepo y establezca el permiso adecuado con el siguiente comando:

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

A continuación, cree un usuario llamado usuario1 y establezca una contraseña:

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

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

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

Puede verificar su contraseña usando el siguiente comando:

cat /var/www/html/myrepo/htpasswd

Salida de muestra:

user1:$apr1$LoyCEkzA$Fjq5nBbLhBRdaxCQBBUQd1

Configurar Nginx para servir el repositorio de Git

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

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

Agregue 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;
}

}

Guarde y cierre el archivo cuando haya terminado, luego verifique el Nginx para detectar cualquier error de sintaxis:

nginx -t

Obtendrá el siguiente resultado:

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

Finalmente, reinicie el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puede verificar el estado de Nginx usando el siguiente comando:

systemctl status nginx

Obtendrá el siguiente resultado:

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

Conéctese al repositorio de 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.

Primero, instale el paquete Git en la máquina cliente usando el siguiente comando:

apt-get install git -y

A continuación, cree un directorio para su proyecto con el siguiente comando:

mkdir project

A continuación, navegue hasta el directorio de su proyecto e inicialice Git con el siguiente comando:

cd project
git init

Luego, configure Git usando su correo electrónico y nombre de usuario:

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

Luego, agregue su servidor Git HTTP usando el siguiente comando:

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

A continuación, cree un directorio llamado dev01 y agregue un archivo dentro:

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

A continuación, agregue su directorio y archivo creados al repositorio de Git:

git add .

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

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

Obtendrá el siguiente resultado:

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

Luego, cargue su archivo y directorio al servidor HTTP Git usando el siguiente comando:

git push origin master

Se le pedirá que proporcione su contraseña para acceder al servidor Git:

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

Una vez que esté conectado, obtendrá el siguiente resultado:

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 puede descargar su repositorio desde el servidor Git directamente usando el siguiente comando:

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

Obtendrá el siguiente resultado:

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, aprendió cómo configurar un servidor HTTP Git con Nginx en Debian 11. Ahora puede implementar esta configuración en su entorno de desarrollo local y administrar y rastrear su proyecto usando la línea de comando.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *