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

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

Git es un sistema de control de versiones gratuito y de código abierto desarrollado por Linus Torvalds. Es utilizado por millones de desarrolladores en 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, puede alojar su propio servidor de alojamiento de código con el servidor Git HTTP. Esto le dará control total sobre el servidor.

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

requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Nombre de dominio válido apuntado con la IP de su servidor.
  • Se configura una contraseña de root en el servidor.

Empezando

Antes de comenzar, se recomienda actualizar los paquetes de su servidor a la última versión. Puede actualizarlos con el siguiente comando:

apt-get update -y

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

Instalar Nginx y Git

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

mkdir /var/www/html/git

A continuación, cambie el directorio a git y cree un nuevo directorio para el repositorio de Git:

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

A continuación, cambie a este nuevo directorio e inicialice el repositorio de Git con el comando:

git --bare init

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

git update-server-info

A continuación, establezca 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, cree un nuevo gituser para la autenticación con el siguiente comando;

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

Se le pedirá que establezca una contraseña como se muestra a continuación:

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

Ahora puede verificar su contraseña usando el siguiente comando:

cat /var/www/html/git/htpasswd

Deberías obtener el siguiente resultado:

gituser:$apr1$iPKZDbFB$ziRRbGXzVMMHaPYOtL05m/

Configurar Nginx para Git

A continuación, deberá configurar Nginx para servir el repositorio de Git. Puede crear un nuevo archivo de configuración de host virtual para Git con el siguiente comando:

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

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

}

Guarde y cierre el archivo cuando haya terminado. Luego, verifique el Nginx para cualquier error de sintaxis con el siguiente comando:

nginx -t

Deberías obtener el siguiente resultado:

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

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

systemctl restart nginx

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

systemctl status nginx

Deberías obtener 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 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 haya terminado, puede continuar con el siguiente paso.

Pruebe el servidor HTTP Git

En este punto, el servidor Git está instalado y configurado. Ahora, es hora de probarlo.

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

apt-get install git -y

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

mkdir myapp

A continuación, cambie al nuevo directorio e inicialice Git con el siguiente comando:

cd myapp
git init

A continuación, agregue su repositorio Git remoto con el siguiente comando:

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

A continuación, cree el directorio app1 y app2 y también cree 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, agregue todos los directorios y archivos al repositorio con el siguiente comando:

git add .

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

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

Deberías obtener el siguiente resultado:

[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íe estos cambios al servidor Git remoto con el siguiente comando:

git push origin master

Se le pedirá que proporcione una contraseña para el usuario remoto de Git como se muestra a continuación:

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

Proporcione su contraseña y presione Entrar. Deberías obtener el siguiente resultado:

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

El resultado anterior indica que sus archivos y directorios se agregaron al repositorio remoto de Git. Si desea clonar este repositorio en su sistema local, ejecute el siguiente comando:

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

Deberías obtener el siguiente resultado:

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

¡Felicidades! Ha instalado y configurado con éxito el servidor Git HTTP en el servidor Ubuntu 20.04. Ahora puede implementar el servidor Git en su entorno de desarrollo al que se puede acceder desde su LAN.

Deja una respuesta

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