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: