Introducción
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 a nivel de fuente. Le permite realizar un seguimiento de los cambios, retroceder 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 en su red de área local (LAN). Es muy simple y fácil de configurar. Cualquiera puede manejarlo desde la interfaz de línea de comandos.
En este tutorial, explicaré cómo configurar un servidor de repositorio HTTP de Git con Nginx en Debian 11.
Si desea instalar un servidor HTTP Git en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario :
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22 , si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p , luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Prerrequisitos
- Un servidor que ejecuta Debian 11.
- Un nombre de dominio válido apunta a 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 instalados todos los paquetes, puede continuar con el siguiente paso.
Crea un repositorio de Git
A continuación, deberá crear un directorio para almacenar el repositorio de Git. Creemos un directorio llamado myrepo dentro del directorio raíz web de Nginx:
mkdir /var/www/html/myrepo
Luego, cambie el directorio a myrepo y cree otro directorio para los usuarios:
cd /var/www/html/myrepo
mkdir user1.git
Luego, vaya al directorio del usuario e inicialice el repositorio de Git usando 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 los permisos adecuados con el siguiente comando:
chown -R www-data:www-data /var/www/html/myrepo
chmod -R 755 /var/www/html/myrepo
Luego, cree un usuario llamado user1 y establezca una contraseña:
htpasswd -c /var/www/html/myrepo/htpasswd user1
Puede configurar 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
Ejemplo de salida:
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 Nginx para servir el repositorio de Git.
nano /etc/nginx/conf.d/git.conf
Agrega 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 Nginx para ver si hay errores 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 computadora cliente usando el siguiente comando:
apt-get install git -y
Luego, crea un directorio para tu proyecto con el siguiente comando:
mkdir project
Luego, vaya al directorio de su proyecto e inicialice Git usando el siguiente comando:
cd project
git init
A continuación, configure Git con 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 HTTP Git usando el siguiente comando:
git remote add origin http://[email protected]/user1.git
Luego, cree un directorio llamado dev01 y agregue un archivo en él:
mkdir dev01
echo "This is my first application" > dev01/file1
Luego, agregue el directorio y el archivo creados al repositorio de Git:
git add .
Luego, 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 en el servidor HTTP de Git usando el siguiente comando:
git push origin master
Se le pedirá que proporcione su contraseña para iniciar sesión en el servidor Git:
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
Una vez conectado, obtendrá la siguiente salida:
git clone http://[email protected]/user1.git
También puede descargar su repositorio directamente desde el servidor Git usando el siguiente comando:
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.
Obtendrá el siguiente resultado:
git clone http://[email protected]/user1.git
Conclusión
En este tutorial, 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.