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.