Cómo instalar un servidor Git HTTP con Nginx en Ubuntu 18.04 LTS
Git es un sistema de control de versiones gratuito y de código abierto que puede utilizarse para seguir los cambios de código. Git permite crear muchos repositorios para una misma aplicación y coordinar el trabajo sobre esos archivos entre varias personas. Se utiliza principalmente para la gestión del código fuente en el desarrollo de software.
En este artículo, aprenderemos a instalar un servidor Git HTTP con Nginx en Ubuntu 18.04 LTS (Bionic Beaver).
Requisitos
- Un servidor Ubuntu 18.04 fresco instalado en tu sistema.
- Usuario Sudo con privilegios de root.
- Una dirección IP estática configurada en tu servidor, yo uso la IP 192.168.1.100 en este tutorial.
1 Cómo empezar
Antes de empezar, tendrás que actualizar tu sistema con la última versión estable.
Puedes hacerlo ejecutando el siguiente comando:
sudo apt-get update -y
sudo apt-get upgrade -y
Una vez actualizado tu sistema, reinicia tu sistema y entra con el usuario sudo.
2 Instalar los paquetes necesarios
En primer lugar, tendrás que instalar en tu sistema algunos paquetes necesarios, como nginx, git, nano y fcgiwrap. Puedes instalarlos todos ejecutando el siguiente comando:
sudo apt-get install nginx git nano fcgiwrap apache2-utils -y
Una vez instalados todos los paquetes necesarios, tendrás que crear un directorio para el repositorio Git. Puedes hacerlo ejecutando el siguiente comando:
sudo mkdir /var/www/html/git
A continuación, da el permiso adecuado al directorio Git:
sudo chown -R www-data:www-data /var/www/html/git
Una vez que hayas terminado, puedes proceder a configurar el servidor web Nginx.
3 Configurar Nginx
En primer lugar, tendrás que configurar Nginx para que pase el tráfico de Git a Git. Puedes hacerlo editando el archivo de configuración por defecto de Nginx:
sudo nano /etc/nginx/sites-available/default
Cambia el archivo como se muestra a continuación:
# Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; 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 _; 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; # Git pushes can be massive, just to make sure nginx doesn't suddenly cut the connection add this. auth_basic "Git Login"; # Whatever text will do. auth_basic_user_file "/var/www/html/git/htpasswd"; include /etc/nginx/fastcgi_params; # Include the default fastcgi configs fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; # Tells fastcgi to pass the request to the git http backend executable fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /var/www/html/git; # /var/www/git is the location of all of your git repositories. fastcgi_param REMOTE_USER $remote_user; fastcgi_param PATH_INFO $1; # Takes the capture group from our location directive and gives git that. fastcgi_pass unix:/var/run/fcgiwrap.socket; # Pass the request to fastcgi } }
Guarda y cierra el archivo cuando hayas terminado. A continuación, comprueba si Nginx tiene algún error de configuración con el siguiente comando:
sudo nginx -t
Si todo está bien, deberías ver la siguiente salida:
A continuación, tendrás que crear una cuenta de usuario que deberás utilizar para navegar o hacer commit en el repositorio. Puedes crear un usuario con el nombre hitesh utilizando la utilidad htpasswd:
sudo htpasswd -c /var/www/html/git/htpasswd hitesh
Finalmente, reinicia Nginx para aplicar todos los cambios con el siguiente comando:
sudo systemctl restart nginx
Puedes comprobar el estado del servidor Nginx con el siguiente comando:
sudo systemctl status nginx
Deberías ver la siguiente salida:
4 Crear un repositorio Git
Una vez que todo está configurado correctamente, es el momento de crear un repositorio Git.
Puedes crear un repositorio con el nombre hitesh.git con el siguiente comando:
cd /var/www/html/git
sudo mkdir hitesh.git
sudo cd hitesh.git
sudo git --bare init
sudo git update-server-info
sudo chown -R www-data.www-data .
sudo chmod -R 755 .
A continuación, tendrás que permitir el servicio HTTP a través del cortafuegos UFW. Por defecto, el UFW está desactivado en tu sistema, así que tienes que activarlo primero. Puedes habilitarlo con el siguiente comando:
sudo ufw enable
Una vez habilitado el cortafuegos UFW, puedes permitir el servicio HTTP y SSH ejecutando el siguiente comando:
sudo ufw allow http
sudo ufw allow ssh
SSH no es necesario para GIT, pero debes habilitarlo para poder gestionar tu servidor a través de SSH.
Ahora puedes comprobar el estado del cortafuegos UFW ejecutando el siguiente comando:
sudo ufw status
Bien, eso es todo para la configuración del lado del servidor. Ahora puedes pasar al lado del cliente para probar Git.
5 Probar Git en la máquina cliente
Antes de empezar, tendrás que instalar git en el sistema cliente. Puedes instalarlo con el siguiente comando:
sudo apt-get install git -y
Primero, crea un repositorio local con el siguiente comando:
sudo mkdir ~/testproject
A continuación, cambia el directorio a ‘testproject’ e inicia el nuevo repositorio remoto con el siguiente comando
cd ~/testproject
git init
git remote add origin http://[email protected]/hitesh.git
A continuación, crea unos archivos y un directorio con el siguiente comando
mkdir test1 test2 test3
echo "This is my first repository" > test1/repo1
echo "This is my second repository" > test2/repo2
echo "This is my third repository" > test3/repo3
A continuación, ejecuta el siguiente comando para añadir todos los archivos y directorios al repositorio:
git add .
git commit -a -m "Add files and directories"
Deberías ver la siguiente salida:
[master 002fac9] Add files and directories 3 files changed, 3 insertions(+) create mode 100644 repo1 create mode 100644 repo2 create mode 100644 repo3
A continuación, envía todos los archivos y directorios al servidor Git con el siguiente comando:
git push origin master
Deberías ver la siguiente salida:
Password for 'http://[email protected]': Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (5/5), 422 bytes | 0 bytes/s, done. Total 5 (delta 0), reused 0 (delta 0) To http://[email protected]/hitesh.git 68f1270..002fac9 master -> master
Ahora, todos tus archivos y directorios han sido confirmados en tu servidor Git.
El proceso de creación de tu repositorio Git se ha completado. Ahora puedes clonar fácilmente tu repositorio en el futuro. Puedes clonar tu repositorio utilizando el siguiente comando en el sistema remoto:
git clone [email protected]:/var/www/html/git/hitesh.git
Deberías ver la siguiente salida:
Cloning into 'hitesh'... [email protected]'s password: remote: Counting objects: 8, done. remote: Compressing objects: 100% (3/3), done. Receiving objects: 100% (8/8), 598 bytes | 0 bytes/s, done. remote: Total 8 (delta 0), reused 0 (delta 0) Checking connectivity... done.
Ahora, cambia el directorio al repositorio clonado con el siguiente comando:
cd hitesh
tree
Deberías ver la siguiente salida:
. |-- test1 | `-- repo1 |-- test2 | `-- repo2 `-- test3 `-- repo3 3 directories, 3 files
Descarga como VM
Este tutorial está disponible como imagen de máquina virtual lista para usar en formato ovf/ova que es compatible con VMWare y Virtualbox. La imagen de la máquina virtual utiliza los siguientes datos de acceso:
Inicio de sesión SSH / Shell
Nombre de usuario: administrador
Contraseña: howtoforge
Este usuario tiene derechos sudo.
Inicio de sesión en GIT
Nombre de usuario: hitesh
Contraseña: howtoforge
La IP de la VM es 192.168.1.100, se puede cambiar en el archivo /etc/netplan/01-netcfg.yaml. Por favor, cambia todas las contraseñas anteriores para asegurar la máquina virtual.
Conclusión
Espero que ahora puedas empujar, tirar, clonar y confirmar fácilmente el código fuente utilizando el servidor Git. No dudes en comentarme si tienes alguna duda.