Buenas a todo@s!!
Hace mucho que no escribía un post. Así que para redimirme y siguiendo un poco esta corriente de automatizaciones, DevOps, CI y demás, voy a dedicar este post a montar un Gitlab.
Para quien no conozca 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.
Como venimos haciendo en los anteriores posts, la forma de montarlo va a ser con docker-compose y traefik.
Como esto tampoco tiene mucho misterio, dejo el docker-compose.yml y lo explico un poco por si hubiera dudas. Los servicios que vamos a montar van a ser los siguientes:
- redis
- postgresql
- gitlab
Docker-Compose
mkdir gitlab && vim docker-compose.yml
version: '3.2'
services:
redis:
restart: always
image: redis:alpine
container_name: gitlab_redis
networks:
- gitlab
labels:
- "traefik.enable=false"
postgresql:
restart: always
image: postgres:alpine
container_name: gitlab_postgresql
environment:
- POSTGRES_USER=gitlab
- POSTGRES_PASSWORD=gitlab
- POSTGRES_DB=gitdb
volumes:
- postgresql:/var/lib/postgresql/data:Z
networks:
- gitlab
labels:
- "traefik.enable=false"
gitlab:
image: gitlab/gitlab-ce
container_name: gitlab_server
restart: always
environment:
TZ: Europe/Madrid
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://git.example.com'
# Database
postgresql['enable'] = false
gitlab_rails['db_username'] = 'gitlab'
gitlab_rails['db_password'] = 'gitlab'
gitlab_rails['db_host'] = 'postgresql'
gitlab_rails['db_port'] = '5432'
gitlab_rails['db_database'] = 'gitdb'
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
# Redis
redis['enable'] = false
gitlab_rails['redis_host'] = 'redis'
gitlab_rails['redis_port'] = '6379'
# Mail
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = 'mail.example.com'
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = 'git@example.com'
gitlab_rails['smtp_password'] = 'password'
gitlab_rails['smtp_domain'] = 'mail.example.com'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
gitlab_rails['gitlab_email_from'] = 'git@example.com'
# SSH
gitlab_rails['gitlab_shell_ssh_port'] = '2222'
# Nginx
nginx['listen_https'] = false
nginx['listen_port'] = 80
nginx['proxy_set_headers'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
volumes:
- config:/etc/gitlab:Z
- data:/var/opt/gitlab:Z
- logs:/var/log/gitlab:Z
networks:
- gitlab
- traefik
ports:
- "2222:22"
depends_on:
- postgresql
- redis
labels:
- "traefik.gitlab_backend=git.example.com"
- "traefik.frontend.rule=Host:git.example.com"
- "traefik.docker.network=traefik"
- "traefik.port=80"
networks:
gitlab:
traefik:
external:
name: traefik
volumes:
config:
data:
logs:
postgresql:
Matizando un poco:
La conexión contra el email la hace contra uno personal por SSL. Gitlab tiene varios ejemplos de configuración de mail aquí.
Por defecto, utiliza el puerto 22 para SSH, pero como este puerto está utilizado por el propio servicio del host, se ha puesto en el 2222. Por lo que hay que indicárselo en la siguiente línea: gitlab_rails[‘gitlab_shell_ssh_port’] = ‘2222’ y a continuación mapear el puerto del contenedor 22 al puerto 2222 del host:
ports: - "2222:22"
Como en este caso vamos a utilizar un proxy web que es traefik, vamos a hacer que el contenedor escuche por http y que nginx pase las cabeceras adecuadas. Y así la conexión cifrada, la haremos desde el traefik
nginx['listen_https'] = false
nginx['listen_port'] = 80
nginx['proxy_set_headers'] = {
"X-Forwarded-Proto" => "https",
"X-Forwarded-Ssl" => "on"
}
Despliegue
Como ya hemos visto en algún post anterior, para lanzar el docker-compose en modo background hay que lanzarlo del siguiente modo:
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 y nos aparecerá la siguiente pantalla:

Aquí hay que poner la contraseña para el usuario root

Y nos autenticamos con el usuario root
Esto sería todo, ahora ya se podrían empezar a crear grupos, proyectos y conectarlo a los diferentes servicios que nos interesen.
Info interesante con todas las opciones de gitlab:
