Cómo instalar un servidor Git HTTP con Nginx en Ubuntu 20.04

Git es un sistema de versiones gratuito y de código abierto desarrollado por Linus Torvalds. Lo utilizan millones de desarrolladores de todo el mundo. GitHub también ofrece un servicio gratuito de alojamiento de código. Sin embargo, el servicio gratuito no permite el alojamiento privado del código. En este caso, puedes alojar tu propio servidor de alojamiento de código con el servidor Git HTTP. Esto te dará un control total sobre el servidor.

En este tutorial, te mostraremos cómo instalar y configurar el servidor Git HTTP con Nginx en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada el servidor.

Cómo empezar

Antes de empezar, se recomienda actualizar los paquetes de tu servidor a la última versión. Puedes actualizarlos con el siguiente comando:

apt-get update -y

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

Instalar Nginx y Git

A continuación, tendrás que instalar en tu sistema el servidor web Nginx, Git y otros paquetes necesarios. Puedes instalarlos 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 repositorio Git dentro del directorio raíz de la web Nginx. Primero, crea un directorio llamado git con el siguiente comando:

mkdir /var/www/html/git

A continuación, cambia el directorio a git y crea un nuevo directorio para el repositorio Git:

cd /var/www/html/git
mkdir gituser.git

A continuación, cambia a este nuevo directorio e inicializa el repositorio Git con el comando

git --bare init

A continuación, actualiza el servidor Git con el comando:

git update-server-info

A continuación, establece la propiedad y el permiso en el directorio git con el siguiente comando

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

A continuación, crea un nuevo gituser para la autenticación con el siguiente comando;

htpasswd -c /var/www/html/git/htpasswd gituser

Se te pedirá que establezcas una contraseña como se muestra a continuación:

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

Ahora puedes verificar la contraseña con el siguiente comando:

cat /var/www/html/git/htpasswd

Deberías obtener la siguiente salida:

gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/

Configurar Nginx para Git

A continuación, tendrás que configurar Nginx para que sirva al repositorio Git. Puedes crear un nuevo archivo de configuración del host virtual para Git con el siguiente comando:

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

Añade las siguientes líneas:

server {
        listen 80;

        root /var/www/html/git;

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

        server_name git.example.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/git/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/git;
    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. A continuación, comprueba que Nginx no tiene ningún error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

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

A continuación, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes verificar el estado del servicio Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener 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 Tue 2020-11-17 07:43:46 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 3240 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 3256 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 3257 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ??3257 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??3258 nginx: worker process
             ??3259 nginx: worker process

Nov 17 07:43:46 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Nov 17 07:43:46 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Una vez que hayas terminado, puedes pasar al siguiente paso.

Probar el servidor Git HTTP

Llegados a este punto, el servidor Git está instalado y configurado. Ahora, es el momento de probarlo.

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

apt-get install git -y

Una vez instalado, crea un directorio llamado myapp con el siguiente comando:

mkdir myapp

A continuación, cambia al nuevo directorio e inicializa el Git con el siguiente comando:

cd myapp
git init

A continuación, añade tu repositorio Git remoto con el siguiente comando

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

A continuación, crea los directorios app1 y app2 y crea también los archivos app1 y app2 con algunos contenidos dentro de esos directorios:

mkdir app1 app2
echo "This is my first application" > app1/app1
echo "This is my first application" > app2/app2

A continuación, añade todos los directorios y archivos al repositorio con el siguiente comando

git add .

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

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

Deberías obtener la siguiente salida:

[master (root-commit) 4e90372] Add files and directories
 2 files changed, 2 insertions(+)
 create mode 100644 app1/app1
 create mode 100644 app2/app2

A continuación, envía estos cambios al servidor Git remoto con el siguiente comando:

git push origin master

Se te pedirá que proporciones una contraseña para el usuario Git remoto, como se muestra a continuación:

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

Proporciona tu contraseña y pulsa Intro. Deberías obtener la siguiente salida:

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 354 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To http://[email protected]/gituser.git
 * [new branch]      master -> master

La salida anterior indica que tus archivos y directorios se han añadido al repositorio Git remoto. Si quieres clonar este repositorio en tu sistema local, ejecuta el siguiente comando:

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

Deberías obtener la siguiente salida:

Cloning into 'gituser'...
Password for 'http://[email protected]': 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
Checking connectivity... done.

Conclusión

Enhorabuena! has instalado y configurado con éxito el servidor Git HTTP en el servidor Ubuntu 20.04. Ahora puedes implementar el servidorGit en tu entorno de desarrollo que sea accesible desde tu LAN.

También te podría gustar...