17 de octubre de 2019

Instalar Git en un servidor local de Windows

Hace unas semanas mi empresa contrató a un nuevo programador para el área web, la mía, por lo que viendo que en el futuro cercano íbamos a ser dos programadores trabajando sobre el mismo código, decidí que era buena idea empezar a usar Git como control de versiones. Abrí una cuenta en GitLab (repositorios privados sin límite de colaboradores por 0 €), subí el proyecto y seguí con mis cosas.

Cuando una semana más tarde se lo comenté al gerente casi le da un pasmo:

- ¿Has subido nuestro código fuente a un sitio de esos de la nube?
- Sí, bueno... me dijiste que me contratabas para modernizar la empresa y es lo que hago...
- Si no dudo que esos servidores sean muy seguros, pero yo estaría más tranquilo si el código se queda en casa.
- Bueno, pues nada, lo monto en local en el server de la oficina... 😒

* * *

La infraestructura de mi oficina implica una red local formada por un par de servidores Windows, un AS/400 y los portátiles que usamos los programadores, todo ello conectado a una VPN.

La idea es, tocando lo menos posible, instalar en uno de los servidores Windows git para alojar allí los repositorios de código. Como no soy ningún entendido en materia de seguridad paso de intentar configurar nada para acceder desde el exterior.

El primer paso se realiza en el servidor Windows. Hay que instalar Chocolatey si no lo está ya además de OpenSSH para Win32, para lo que hay que tener permisos de administrador.


*** EN EL SERVIDOR ***

# Instalar chocolatey, un instalador de aplicaciones para PowerShell

# Ver la política de permisos de PS
> Get-ExecutionPolicy

# Si devuelve "Restricted", entonces ejecutar
> Set-ExecutionPolicy AllSigned

# Instalar Chocolatey
> Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Comprobar la instalación
> choco -?

# Instalar win32-openssh

# En una ventana de powershell de administrador
> Run choco install win32-openssh -params '"/SSHServerFeature /KeyBasedAuthenticationFeature"' -confirm

# Reiniciar el powershell para que se carguen en el $path los nuevos comandos

# Crear variables de entorno de git y añadirlas al path
> $gitPath = Join-Path -Path $env:ProgramFiles -ChildPath "git\mingw64\bin"
> $machinePath = [Environment]::GetEnvironmentVariable('Path', 'MACHINE')
> [Environment]::SetEnvironmentVariable('Path', "$gitPath;$machinePath", 'Machine')

# Posicionarse en el directorio donde se almacenará el repositorio
> cd E:/Proyectos/Git_Server

# Hacer click derecho y lanzar la consola de Git con la instrucción "Git Bash Here"

# Crear el repositorio vacío
> git clone --bare E:/Proyectos/Git_Server/dominar_el_mundo.git

# Cerrar el Git Bash


El siguiente paso se realiza en las máquinas de desarrollo, las que ejercerán de cliente git y desde las que van a submitir el código al servidor.


*** EN EL CLIENTE ***

# Crear la variable de entorno necesaria para usar openssh con git
> $env:GIT_SSH_COMMAND = '"C:\Program Files\OpenSSH\ssh.exe" -T'

# Posicionarse en el directorio donde se creará el repositorio
> cd C:/git

# Crear con git el repositorio vacío en la máquina local (esto crea el directorio C:/git/dominar_el_mundo, por lo que no hace falta crearlo antes)
> git init dominar_el_mundo

# Posicionarse dentro del directorio recién creado
> cd dominar_el_mundo

# Añadir el repositorio remoto como origin
> git remote add origin //192.168.1.12/e/Proyectos/Git_Server/dominar_el_mundo.git

# Work around para evitar una issue conocida al lanzar comandos git desde PowerShell
> git config --local remote.origin.uploadpack "powershell git-upload-pack"
> git config --local remote.origin.receivepack "powershell git-receive-pack"
> git fetch origin


Habiendo hecho esto ya tenemos configurada la máquina de desarrollo y estamos listos para crear nuestras ramas (recordad que no es buena idea programar directamente desde la rama "master").

Por cierto, esta configuración está obviando el uso de encriptación y roles para logarnos al servidor local porque para eso habría que crear usuarios de Windows en dicho servidor y por algún motivo no están por la labor... 🙈

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...