En este post explicaré el despliegue en docker de GitLab, GitLab es un servicio parecido a GitHub pero que lo podemos montar y gestionar por nuestra cuenta.
Por lo que si queremos gestionar nuestros proyectos privados (ya sean de la empresa o personales) es una muy buena manera de hacerlo. Además, ofrece una infinidad de opciones para conectar con herramientas de terceros: Jenkins, Prometheus, Influxdb.
Vamos a desplegar, con un docker-compose.yml, el cual, desplegará los siguientes contenedores:
Para no dejar expuesto el puerto 22, el contenedor de gitlab mapeara el puerto 22 interno hacia el puerto 2222 público.
Si no tienes el ejecutable docker-compone, aquí expliqué como tenerlo http://chechy.xyz/docker-compose-ese-gran-aliado/
El contenido del docker-compose.yml será el siguiente (tenemos que cambiar el valor external_url, por la url qué usaremos, cómo también los valores de traefik.gitlab_backend y traefik.frontend.rule) :
version: '3.4'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
hostname: 'gitlab'
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['gitlab_shell_ssh_port'] = 8022
external_url 'http://gitlab'
nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.crt'
nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.key'
pages_external_url 'http://gitlab'
pages_nginx['redirect_http_to_http'] = true
pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.crt"
pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.key"
networks:
gitlab:
aliases:
- gitlab
ports:
- '8022:22'
- '8080:80'
- '8443:443'
volumes:
- 'gitlab-config-volume:/etc/gitlab'
- 'gitlab-log-volume:/var/log/gitlab'
- 'gitlab-data-volume:/var/opt/gitlab'
- './docker-volumes/gitlab/ssl:/etc/gitlab/ssl'
gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
container_name: gitlab-runner
environment:
- 'DOCKER_NETWORK_MODE=gitlab_gitlab'
links:
- gitlab
networks:
- gitlab
volumes:
- 'gitlab-runner-config-volume:/etc/gitlab'
- './docker-volumes/gitlab/ssl/gitlab.crt:/etc/gitlab-runner/certs/ca.crt'
- '/var/run/docker.sock:/var/run/docker.sock'
volumes:
gitlab-config-volume:
gitlab-log-volume:
gitlab-data-volume:
gitlab-runner-config-volume:
networks:
gitlab:
driver: bridge
Creamos el directorio de gitlab y el docker-compose
mkdir gitlab && vim docker-compose.yml
Creamos la red traefik, para los contenedores
docker network create traefik
Construiremos los contenedores, con arranque en background con el comando:
docker-compose up -d
Tarda un poco en iniciar ya que carga varias cosas. Si se quiere ver que está haciendo:
docker-compose logs -f
Una vez iniciado nos podemos conectar mediante la URL que le hemos indicado en el docker-compose (external_url ‘http://dockerlab001’)y nos aparecerá la siguiente pantalla para establecer la contraseña del usuario root:
Entramos con el usuario root y la contraseña qué acabamos de establecer:
Ya tenemos gitlab funcionando. Ahora ya podemos proceder a crear grupos, usuarios y conectarlo, por ejemplo, a jenkins, para los despliegues.
Aquí podéis consultar todas las opciones del fichero de configuración de gitlab: