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

Soluci贸n al error: «user is not in the sudoers file» en Debian

NAS SYNOLOGY DSM 7.1 en VMware ESXI - Gu铆a instalaci贸n y configuraci贸n Synology DSM 7.1 en VMWARE

Multisesi贸n RDP en Windows 10 Pro