Buenas, en este articulo vamos a explicar como instalar GitLab CE con un certificado SSL let´s encrypt gratuito con docker-compose en un servidor Ubuntu, el tutorial se realiza en un servidor dedicado, pero se podria realizar el mismo procedimiento en un servidor en la nube.

Antes de comenzar debemos tener un servidor Ubuntu instalado, GitLab recomienda usar 8gb de ram y 30gb de HD SSD, este servidor debe tener instalado Docker y Docker-compose, podemos verificar si estan correctamente instalados con estos comandos:

docker -v
Docker version 20.10.12, build 20.10.12-0ubuntu2~20.04.1
docker-compose -v
docker-compose version 1.26.0, build d4451659

Una vez dentro del server elevamos privilegios con «sudo su» y podemos comenzar.

Primero creamos los directorios para los ficheros:

mkdir  /root/gitlab
mkdir -p /mnt/gitlab/{config/ssl,logs,data}

Despues accedemos a la carpeta root/gitlab y generamos un archivo oculto con la variable de entorno de la ruta de configuracion:

cd ~/gitlab
echo GITLAB_HOME=/mnt/gitlab > .env

A continua cion crearemos el archivo «docker-compose.yml» que contendra la informacion del contenedor a crear:

vi docker-compose.yml
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.vidabio.es'
environment:

GITLAB_OMNIBUS_CONFIG: |
# Add any other gitlab.rb configuration here, each on its own line
external_url 'https://gitlab.vidabio.es'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/privkey.pem"
nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparams.pem"

ports:
- '80:80'
- '443:443'
- '2224:22'

volumes:
- '${GITLAB_HOME}/config:/etc/gitlab'
- '${GITLAB_HOME}/logs:/var/log/gitlab'
- '${GITLAB_HOME}/data:/var/opt/gitlab'
- '${GITLAB_HOME}/config/ssl:/etc/gitlab/ssl'

Nota: Ten en cuenta que debes modificar la URL por la tuya, esto se explica un poco mas abajo

y guardamos el archivo creado con vi:

wq!

En este punto es importante comentar que debemos disponer de una URL para utilizar un certificado SSL, en mi caso utilizare un subdominio alojado en AWS route53, que he creado para la ocasion «gitlab.vidabio.es».

Dado que voy a realizar la instalacion en un servidor que tengo en casa, debemos redireccionar los puertos 80 y 443, de la IP publica de nuestro router a la IP donde tenemos instalado el servidor Ubuntu y apuntar el subdominio de Route53 a nuestra IP publica (IP externa de nuestro router de casa):

En el caso de realizarlo en un servidor en la nube, habria que redireccionar este subdomnio a la IP del servidor en cuestion, donde hayamos instalado Ubuntu.

Seguimos con la instacion en el servidor Ubuntu

Intalamos certbot para poder tener el certificado SSL:

apt install certbot -y

Solicitamos los certificados Let´s encrypt, en este punto para no tener problemas, los datos deber ser correctos, correo y URL, y la URL debe ser alcanzable, sino la creacion de los certificados fallara:

certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email mail@mail.com -d gitlab.vidabio.es

Si todo ha dido bien recibiremos un mensaje de felicitacion y la hubicacion de nuestros nuevos certificados.

Ahora movemos los certificados a nuestra carpeta de configuracion de GitLab:

cp /etc/letsencrypt/live/gitlab.vidabio.es/fullchain.pem  /mnt/gitlab/config/ssl/
cp /etc/letsencrypt/live/gitlab.vidabio.es/privkey.pem  /mnt/gitlab/config/ssl/

Y usamos Openssl para generar CSR con 2048 bit y sha-2:

openssl dhparam -out /mnt/gitlab/config/ssl/dhparams.pem 2048

Ahora accedemos a la carpeta /root/gitlab y ejecutamos docker-compose, para ejecutar nuestro contenedor(esto puede tardar unos minutos):

cd /root/gitlab
docker-compose up -d

Verificamos que levanto el contenedor:

docker-compose ps

ya podemos acceder a la URL y establecer el passsword del usuario ROOT, tras esto podremos acceder con esas credenciales a nuestro GitLab:

Como nota adicional, si teneis problemas para establecer el password de root u olvidais este, existe una forma sencialla de volver a definirlo desde el servidor, solo debeis ejecutar este comando:

docker exec -it gitlab_web_1 gitlab-rake "gitlab:password:reset[root]"

esperar unos minutos y podreis volver a establecer el password del usuario root.

Enjoy