Cómo instalar GitLab en Docker - Servidor Git autohospedado

GitLab | Git Server | Docker | Self-Hosted | DevOps

GitLab en Docker: Servidor Git autohospedado con CI/CD, proyectos privados, users, webhooks, registry Docker, backup automático (alternativa GitHub Enterprise) 🐙📦

GitLab es un servidor Git completo autohospedado con CI/CD integrado, proyectos privados/públicos, gestión usuarios, webhooks, registry Docker privado, backup automático, y todo auto-administrado en tu homelab. Alternativa de GitHub Enterprise sin suscripción. Community Edition gratuita, Enterprise Edition con features premium. Production-ready Docker.

¿Qué es GitLab en Docker?

GitLab es un servidor Git completo autohospedado que proporciona control de versiones, CI/CD integrado, gestión de proyectos, usuarios y permisos, webhooks, registry Docker privado, y todas las features de GitHub Enterprise sin necesidad de suscripción, completamente bajo tu control en Docker. Ideal para equipos de desarrollo y homelabs profesionales.

Propuesta clave: Git server enterprise-grade self-hosted. Repositorios privados/públicos ilimitados. CI/CD pipelines integradas (.gitlab-ci.yml). Gestión usuarios multi-tenant. Webhooks, API REST completa. Docker registry privado integrado. SSH + HTTPS Git access. Backup automático. Issues, Merge Requests, Discussions. Wiki integrado. Container registry. Package registry. Communities, groups, permissions granulares. Zero cloud, 100% privacidad. Community Edition gratuita, Enterprise Edition paid. Production-ready. Omnibus config Docker. Soporte PostgreSQL, Redis (opcional).

Para equipos de desarrollo: Servidor Git profesional. CI/CD automático. Control total privacidad. Zero suscripción GitHub Enterprise.

Características principales

Git repositories

Repositorios privados/públicos ilimitados. SSH + HTTPS access. Full Git features.

CI/CD integrado

Pipelines nativas .gitlab-ci.yml. Runners auto-escalables. Artifacts, caches.

Container registry

Docker registry privado integrado. Push/pull imágenes. Integración CI/CD.

Gestión usuarios

Multi-tenant. Roles (Admin, Maintainer, Developer). LDAP/OAuth opcional.

Merge Requests

Code review integrado. Discussions, aprobaciones. Auto-merge.

Issues + Epics

Tracking tareas. Epics (subissues). Labels, asignaciones, milestones.

Webhooks + API

API REST completa. Webhooks para eventos. Integraciones externas.

Backup automático

Backup scheduled. Restore fácil. Disaster recovery.

Requisitos del sistema

  • Docker & Docker Compose v2+
  • 8 GB - 16 GB RAM mínimo (GitLab consume recursos)
  • 50 GB espacio disco mínimo (repositorios, CI/CD artifacts)
  • /mnt/media/gitlab directorio accesible (o configurar ruta)
  • Puertos TCP: 80, 443 (HTTP/HTTPS), 22 (SSH, opcional)
  • Dominio válido externo (NO localhost) - ej: gitlab.tudominio.com
  • CPU: 4+ cores (GitLab es pesado, 6+ recomendado)
  • Acceso internet (para webhooks, OAuth, notificaciones)
  • PostgreSQL o SQLite (integrado en contenedor)
⚠️ IMPORTANTE: GitLab REQUIERE un dominio externo válido (no localhost). HTTPS altamente recomendado. Consume muchos recursos (RAM, CPU, disco).
Resource-heavy: GitLab es bastante pesado. Mínimo 8GB RAM. En Raspberry Pi puede no funcionar bien. Mejor en servidor dedicado o VPS.

Estructura directorios /mnt/media

GitLab necesita carpetas para config, logs y datos:

/mnt/media/gitlab/ ├── config/ # Configuración GitLab ├── logs/ # Logs (aplicación) └── data/ # Datos (repositorios, DB, etc)

Instalación con Docker Compose

Paso 1: Preparar estructura directorios

# Crear carpetas GitLab sudo mkdir -p /mnt/media/gitlab/{config,logs,data} # Permisos sudo chown -R 1000:1000 /mnt/media/gitlab sudo chmod -R 755 /mnt/media/gitlab

Paso 2: Crear docker-compose.yml

mkdir -p ~/gitlab && cd ~/gitlab cat > docker-compose.yml << 'DOCKER' version: '3.8' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: gitlab.example.com environment: GITLAB_OMNIBUS_CONFIG: | # Configuración externa (CAMBIAR a tu dominio) external_url 'http://gitlab.example.com' # Si tienes HTTPS (recomendado) # external_url 'https://gitlab.example.com' # nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.crt' # nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.key' # PostgreSQL (usar SQLite integrado es más simple) # gitlab_rails['db_adapter'] = 'postgresql' # SSH Port (si quieres cambiar de 22) # gitlab_rails['gitlab_shell_ssh_port'] = 2424 ports: - "80:80" - "443:443" - "22:22" volumes: - /mnt/media/gitlab/config:/etc/gitlab - /mnt/media/gitlab/logs:/var/log/gitlab - /mnt/media/gitlab/data:/var/opt/gitlab shm_size: '256m' DOCKER

Paso 3: Configurar dominio y HTTPS

⚠️ IMPORTANTE: Cambia gitlab.example.com en docker-compose.yml a tu dominio real (ej: gitlab.miempresa.com). Sin esto GitLab no funcionará correctamente.

Paso 4: Iniciar GitLab

docker compose up -d # GitLab tarda 2-3 MINUTOS en iniciar completamente docker compose logs -f # Espera a ver "gitlab Reconfigured!" en logs

Paso 5: Obtener contraseña root inicial

docker compose exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password # O si no funciona, intenta: docker compose exec -it gitlab cat /etc/gitlab/initial_root_password

Acceder a GitLab

🐙 GitLab Web UI: http://gitlab.example.com (o https:// si configuraste SSL)

Credenciales iniciales

  • Usuario: root
  • Contraseña: (obtener con comando arriba)
⚠️ IMPORTANTE: Cambia la contraseña root después del primer login! Settings → Change password.
💡 SSH access: ssh://git@gitlab.example.com/user/project.git (reemplaza dominio y ruta)

Primeros pasos

1. Login y cambiar contraseña

  1. Abre http://gitlab.example.com
  2. Login: usuario root, contraseña (obtenida arriba)
  3. Click avatar (esquina superior derecha) → Settings
  4. Account → Change password
  5. Establece contraseña nueva segura

2. Crear proyecto nuevo

  1. Click "New project" (botón azul)
  2. Opción: "Create blank project"
  3. Project name: (ej: "mi-primer-proyecto")
  4. Project slug: auto-generado
  5. Visibility: Private (privado) o Public (público)
  6. Click "Create project"

3. Clonar proyecto y hacer commit

# Clonar proyecto (HTTPS) git clone http://gitlab.example.com/root/mi-primer-proyecto.git cd mi-primer-proyecto # O SSH (si tienes SSH configurado) git clone ssh://git@gitlab.example.com/root/mi-primer-proyecto.git # Hacer cambios y commit echo "Hello GitLab" > README.md git add . git commit -m "Initial commit" git push -u origin main

4. Crear usuario nuevo

  1. Admin area (icono admin en sidebar)
  2. Users → New user
  3. Fill: name, username, email
  4. Set password, click Create user

5. Agregar usuario a proyecto

  1. Project → Members
  2. Add members
  3. Selecciona usuario, rol (Developer, Maintainer, etc)
  4. Click "Add to project"

6. Configurar CI/CD (pipelines)

  1. En proyecto, crear archivo .gitlab-ci.yml:
  2. Ejemplo simple:
    stages: - build - test build: stage: build script: - echo "Building..." - ls -la test: stage: test script: - echo "Testing..." - echo "Test passed!"
  3. Commit y push → CI/CD pipeline ejecuta automático

7. Usar Container Registry

# Login al registry GitLab docker login gitlab.example.com # Username: usuario GitLab, Password: access token # Build y push imagen docker build -t gitlab.example.com/root/mi-imagen:latest . docker push gitlab.example.com/root/mi-imagen:latest # Pull desde registry docker pull gitlab.example.com/root/mi-imagen:latest

Casos de uso

  • Equipos de desarrollo: Git server profesional. CI/CD integrado. Control privacidad.
  • DevOps: Container registry privado. CI/CD pipelines. Artifacts.
  • Homelabs: Repositorios privados sin GitHub/GitLab.com. Backup local.
  • Educación: Servidor Git para estudiantes. Privado y controlado.
  • Compliance: Datos completamente on-premise. Sin cloud externo.

Gestión y mantenimiento

Ver estado

docker compose ps

Ver logs

docker compose logs -f gitlab

Detener GitLab

docker compose down

Actualizar a versión nueva

docker compose pull docker compose up -d

Backup (muy importante!)

docker compose exec -it gitlab gitlab-backup create # Encuentra el archivo backup en /mnt/media/gitlab/data/backups/ ls -lh /mnt/media/gitlab/data/backups/

Restore desde backup

docker compose down docker compose exec -it gitlab gitlab-backup restore BACKUP=timestamp_of_backup

Cambiar port SSH

# En docker-compose.yml, modifica GITLAB_OMNIBUS_CONFIG: gitlab_rails['gitlab_shell_ssh_port'] = 2424 # Y en ports: - "2424:22" docker compose up -d

GitLab Community Edition vs Enterprise Edition

  • Community Edition (CE): Gratuita, open source. Features completas Git/CI/CD. Perfect para homelabs y pequeños equipos.
  • Enterprise Edition (EE): Pago (suscripción GitLab). Features premium: LDAP sync, Geo replication, advanced security scanning, etc.

Para homelab, usa CE (imagen: gitlab/gitlab-ce:latest). Es completamente funcional y gratuita.

Configuración avanzada

HTTPS con Let's Encrypt

environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.example.com' letsencrypt['enable'] = true letsencrypt['contact_emails'] = ['admin@example.com']

LDAP / OAuth autenticación

# LDAP gitlab_rails['ldap_enabled'] = true gitlab_rails['ldap_servers'] = { 'main' => { 'host' => 'ldap.example.com', 'port' => 389, 'base_dn' => 'dc=example,dc=com' } }

PostgreSQL externo (opcional)

gitlab_rails['db_adapter'] = 'postgresql' gitlab_rails['db_host'] = 'postgres.example.com' gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_password'] = 'password' gitlab_rails['db_database'] = 'gitlab_prod'

Comentarios

Entradas populares de este blog

Cómo Instalar y configurar SERVIDOR VPN WIREGUARD en MIKROTIK 🔐 #VPN #Wireguard #Mikrotik #RouterOS

Cómo instalar y configurar DSM SYNOLOGY 7.2.2 en PC | Guía completa, instalación, RAID 1, SMB

Cómo INSTALAR y CONFIGURAR OpenVPN en MIKROTIK. Guía completa paso a paso.