Git es un sistema de control de versiones gratuito y de código abierto que se puede utilizar para realizar un seguimiento de los cambios de código. Git te permite crear muchos repositorios para la misma aplicación y coordinar el trabajo en 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 cómo instalar un servidor HTTP Git con Nginx en Ubuntu 16.04.
Requisitos
- Servidor Ubuntu 16.04 nuevo instalado en su sistema.
- Usuario Sudo con privilegios de root.
- Dirección IP estática 192.168.15.189 configurada en su servidor
1 Primeros pasos
Antes de comenzar, deberá actualizar su sistema con la última versión estable.
Puede hacerlo ejecutando el siguiente comando:
sudo apt-get update -y
sudo apt-get upgrade -y
Una vez que su sistema esté actualizado, reinícielo e inicie sesión con el usuario sudo.
2 Instalar paquetes necesarios
Primero, deberá instalar algunos paquetes necesarios, incluidos nginx, git, nano y fcgiwrap en su sistema. Puede instalarlos todos ejecutando el siguiente comando:
sudo apt-get install nginx git nano fcgiwrap apache2-utils -y
Una vez que se hayan instalado todos los paquetes necesarios, deberá crear un directorio para el repositorio de Git. Puede hacerlo ejecutando el siguiente comando:
sudo mkdir /var/www/html/git
A continuación, otorgue el permiso adecuado al directorio de Git:
sudo chown -R www-data:www-data /var/www/html/git
Una vez que haya terminado, puede proceder a configurar el servidor web Nginx.
3 Configurar Nginx
Primero, deberá configurar Nginx para pasar el tráfico de Git a Git. Puede hacerlo editando el archivo de configuración predeterminado de Nginx:
sudo nano /etc/nginx/sites-available/default
Cambie 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 } }
Guarde y cierre el archivo cuando haya terminado. Luego pruebe Nginx para cualquier error de configuración con el siguiente comando:
sudo nginx -t
Si todo está bien, debería ver 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, deberá crear una cuenta de usuario que deberá usar para navegar o confirmar el repositorio. Puede crear un usuario con el nombre hitesh usando la utilidad htpasswd:
sudo htpasswd -c /var/www/html/git/htpasswd hitesh
Finalmente, reinicie Nginx para aplicar todos los cambios con el siguiente comando:
sudo systemctl restart nginx
Puede verificar el estado del servidor Nginx con el siguiente comando:
sudo systemctl status nginx
Debería ver 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 2017-06-20 23:00:11 IST; 51min ago Process: 12415 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 7616 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS) Process: 12423 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 12419 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 12427 (nginx) CGroup: /system.slice/nginx.service ??????12427 nginx: master process /usr/sbin/nginx -g daemon on; master_process on ??????12431 nginx: worker process Jun 20 23:00:11 localhost systemd[1]: Stopped A high performance web server and a reverse proxy server. Jun 20 23:00:11 localhost systemd[1]: Starting A high performance web server and a reverse proxy server... Jun 20 23:00:11 localhost systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument Jun 20 23:00:11 localhost systemd[1]: Started A high performance web server and a reverse proxy server.
4 Crear repositorio Git
Una vez que todo esté configurado correctamente, es hora de crear el repositorio de Git.
Puede crear un repositorio con el nombre repo.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 777 .
A continuación, deberá permitir el servicio http a través del cortafuegos UFW. Por defecto, UFW está deshabilitado en su sistema, por lo que debe habilitarlo primero. Puede habilitarlo con el siguiente comando:
sudo ufw enable
Una vez que el firewall UFW está habilitado, puede habilitar el servicio HTTP ejecutando el siguiente comando:
sudo ufw allow http
Ahora puede comprobar el estado del cortafuegos UFW ejecutando el siguiente comando:
sudo ufw status
Ok, eso es todo para la configuración del lado del servidor. Ahora puede pasar al lado del cliente para probar Git.
5 Probar Git en la máquina cliente
Antes de comenzar, deberá instalar git en el sistema cliente. Puede 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, cambie el directorio a testproject e inicie el nuevo repositorio remoto con el siguiente comando:
cd ~/testproject
git init
git remote add origin http://[email protected]/hitesh.git
A continuación, cree algunos archivos y directorios 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, ejecute el siguiente comando para agregar todos los archivos y directorios al repositorio:
git add .
git commit -a -m "Add files and directoires"
Debería ver el siguiente resultado:
[master 002fac9] Add files and directoires 3 files changed, 3 insertions(+) create mode 100644 repo1 create mode 100644 repo2 create mode 100644 repo3
A continuación, envíe todos los archivos y directorios al servidor Git con el siguiente comando:
git push origin master
Debería ver el siguiente resultado:
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 sus archivos y directorios se han enviado a su servidor Git.
El proceso de creación de su repositorio Git ahora está completo. Ahora puede clonar fácilmente su repositorio en el futuro. Puede clonar su repositorio usando el siguiente comando en el sistema remoto:
git clone [email protected]:/var/www/html/git/hitesh.git
Debería ver el siguiente resultado:
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, cambie el directorio al repositorio clonado con el siguiente comando:
cd hitesh
tree
Debería ver el siguiente resultado:
. |-- test1 | `-- repo1 |-- test2 | `-- repo2 `-- test3 `-- repo3 3 directories, 3 files
Conclusión
Espero que ahora pueda insertar, extraer, clonar y confirmar fácilmente el código fuente utilizando el servidor Git. Siéntete libre de comentarme si tienes alguna duda.