Phase 4.4 — GitLab
Provisionnement de la VM via OpenTofu, configuration via Ansible.
Vue d'ensemble
GitLab CE héberge le code source et la CI/CD du projet. Authentification via Keycloak (OIDC), secrets depuis Vault.
| Rôle | Valeur |
|---|---|
| VM | 102 — gitlab (192.168.1.21) |
| Nœud Proxmox | pve01 |
| Groupe Ansible | gitlab |
| URL | https://gitlab.mounik.ovh |
| RAM | 8 Go (minimum recommandé) |
| TLS | Traefik (VM 101) — GitLab écoute en HTTP |
1. Provisionnement OpenTofu
# gitlab.tf — appel au module vm
module "gitlab" {
source = "./modules/vm"
name = "gitlab"
target_node = "pve01"
vmid = 102
cores = 4
memory = 8192
balloon = 4096
disk_size = "200G"
ip = "192.168.1.21"
ssh_key = local.ssh_key
depends_on = [module.keycloak]
}
Exécution :
cd homelab-proxmox/opentofu
tofu plan -target=module.gitlab -out=tfplan
tofu apply tfplan
2. Configuration Ansible
Le playbook ansible/playbooks/04-gitlab.yml applique le rôle gitlab :
ansible-playbook -i inventory/homelab.yml playbooks/04-gitlab.yml
Le rôle gitlab :
1. Installe les dépendances (curl, openssh-server, postfix)
2. Ajoute le dépôt officiel GitLab CE et installe le paquet gitlab-ce
3. Configure /etc/gitlab/gitlab.rb (nginx HTTP, Vault, Let's Encrypt désactivé)
4. Reconfigure GitLab (gitlab-ctl reconfigure)
5. Active l'OIDC Keycloak via gitlab-rails runner
6. Installe et enregistre le GitLab Runner (shell, tag homelab)
Variable sensible : vault_token, vault_kc_gitlab_secret, gitlab_runner_token (à passer via Vault).
3. Intégration Vault (CI/CD)
Variables à configurer dans l'interface GitLab (Settings → CI/CD → Variables) :
| Variable | Source |
|---|---|
VAULT_ADDR |
https://192.168.1.22:8200 |
VAULT_TOKEN |
Token créé dans Vault |
HARBOR_PASSWORD |
vault kv get homelab/harbor |
DD_API_TOKEN |
Interface DefectDojo |
GITLAB_TOKEN |
GitLab.com (token push manifests) |
ARGOCD_PASSWORD |
vault kv get homelab/argocd |
4. Vérification
gitlab-ctl status
curl -I https://gitlab.mounik.ovh
Livrable : GitLab CE fonctionnel, OIDC Keycloak, Vault intégré, runner shell prêt.
Pour aller plus loin
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 4.5 — Harbor — registry Docker privé
- Playbooks Ansible — dans
ansible/du dépôt