Description
GitLab est une plateforme DevOps complète qui couvre tout le cycle de vie d'un projet logiciel, en un seul produit :
- Forge Git : dépôt, branches, merge requests, code review
- CI/CD : pipelines (.gitlab-ci.yml), runners Go, registry d'images
- Container Registry : images Docker, Helm charts, packages
- Issue Tracker : tickets, boards Kanban, milestones
- Wiki : documentation par projet
- Monitoring : Prometheus + Grafana intégrés (depuis v13)
- Pages : hébergement statique (comme GitHub Pages)
- Web IDE : édition de fichiers en ligne (VS Code-like)
- Sécurité : SAST, DAST, dependency scanning (Ultimate)
- Planning : epics, roadmaps (Ultimate)
Édition Community (CE) — open source, gratuite :
- Forge, CI/CD, registry, wiki, issues, pages
- Pas de SAML, pas d'audit logs avancés, pas de compliance, pas de multi-cluster
Édition Enterprise (EE) — propriétaire, payante :
- SAML SSO, audit events, IP allow-listing
- Multi-cluster Kubernetes, deploy boards
- Compliance, vulnerability management avancé
Cas d'usage :
- Remplacer GitHub + CI/CD + Docker Hub + Jira + Wiki par un seul outil self-hosted
- Workflow DevOps complet sans dépendre du cloud
- Projets open source : auto-héberger ses propres projets
- Entreprises : conformité RGPD, contrôle total des données
Concurrents directs : [[app-forgejo]] / [[app-gitea]] (légers, mono-machine) vs GitLab (lourd, full-featured).
Installation
Via Docker Compose (méthode officielle Omnibus-like)
# docker-compose.yml
version: '3.8'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: unless-stopped
hostname: gitlab.example.com
environment:
- GITLAB_OMNIBUS_CONFIG=true
shm_size: '256m'
ports:
- "22:22" # SSH
- "80:80" # HTTP
- "443:443" # HTTPS
volumes:
- gitlab-config:/etc/gitlab
- gitlab-logs:/var/log/gitlab
- gitlab-data:/var/opt/gitlab
networks:
- proxy
volumes:
gitlab-config:
gitlab-logs:
gitlab-data:
networks:
proxy:
external: true
Méthode recommandée : Omnibus (bare-metal)
# Sur Ubuntu/Debian curl -L https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce # Configuration dans /etc/gitlab/gitlab.rb puis : sudo gitlab-ctl reconfigure
⚠️ Ne pas exposer ports 80/443 du conteneur si reverse proxy en amont — utiliser Traefik/Nginx.
Configuration
- Premier accès : on vous demandera de définir un mot de passe pour l'utilisateur
root - SMTP : configurer dans
gitlab.rb(gitlab_rails['smtp_*']) - Reverse proxy : [[traefik]] recommandé avec
nginx['listen_port'] = 8080dans le conteneur - Backups :
gitlab-backup create(cron recommandé) - Runners : ajouter des runners auto-hébergés pour vos pipelines
- LDAP/SAML : SAML = EE, LDAP = CE (config dans
gitlab.rb)
Alternatives
- [[app-forgejo]] — Fork communautaire Gitea, plus léger, 100% libre
- [[app-gitea]] — Forge légère, n'inclut pas la CI complète (Gitea Actions)
- [[app-woodpecker-ci]] + Forgejo — Stack léger équivalent à GitLab
- GitHub Enterprise — Managé, pas self-hosted
- Gitea + Drone CI (historique) — Stack légère complète
- OneDev — Concurrent direct, all-in-one en Java
Sécurité
- HTTPS obligatoire (Traefik ou Let's Encrypt intégré)
- Auth forte : 2FA activable par utilisateur
- SAML : EE uniquement, sinon LDAP/OAuth
- Audit logs : CE basique, EE avancé
- IP allowlist : EE uniquement
- Container scanning : EE uniquement
- Backups :
gitlab-backup create(chiffrement supporté) - Runners non-privilégiés : faire tourner les runners en rootless Docker
