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.