GitLab
GitLab héberge le code, la documentation (via Pages) et les pipelines de l'équipe. Depuis le 2026-11-04, il tourne sur Proxmox, derrière OPNsense, sous le nom gitlab.formuleets.ca.
En bref
| Adresse | https://gitlab.formuleets.ca (l'ancien nom gitlab2.formuleets.ca marche toujours) |
| Registry Docker | registry.gitlab.formuleets.ca |
| Pages | https://<groupe>.pages.formuleets.ca/<projet>, ou un domaine personnalisé comme cette documentation (https://doc.formuleets.ca) |
| Machine | VM 120 gitlab sur formule-pve-02, Ubuntu 22.04, 4 vCPU, 16 Go, disque de 300 Go |
| Version | GitLab CE 19.5.3 (installation Omnibus) |
| Certificat | Let's Encrypt, obtenu et renouvelé par Caddy sur OPNsense (GitLab lui-même ne fait plus de HTTPS depuis le 2026-11-05) |
| Code | VM décrite dans le dépôt infra/infra (vms-existantes.tf), protégée contre la destruction |
Réseau
Internet / école ──► 142.137.247.115 (OPNsense, interface DMZ)
│
├─ 80, 443 ─► Caddy (HTTPS) ─► GitLab 192.168.1.10:80 (registry :5050)
└─ 22 ──────► GitLab 192.168.1.10:22 (SSH git, redirection directe)
- L'IP publique
142.137.247.115est portée par OPNsense, avec la MAC qu'avait GitLab sur ce port de l'école. Le web (80, 443) arrive sur Caddy, le SSH git (22) est redirigé directement vers GitLab. - GitLab est sur le LAN d'OPNsense (
192.168.1.10) et sort vers Internet par OPNsense. - Accès d'administration temporaire : GitLab a encore une IP sur le réseau de l'école (
ens160, en DHCP, aujourd'hui10.194.24.50) pour le SSH. Elle contourne OPNsense et sera retirée quand le VLAN du club arrivera au bureau. - Le firewall local
ufwautorise les ports 80 et 443 depuis partout, le 5050 (registry) et le 8091 (Pages, domaines personnalisés) depuis OPNsense (192.168.1.1), et le 22 depuis les réseaux de l'école (10.0.0.0/8).
Les règles OPNsense qui laissent entrer le trafic sur la DMZ forcent la passerelle de réponse DMZ_GW. Sans elle, les règles semblent bonnes mais personne ne reçoit de réponse. Voir Réseau : VLAN et OPNsense.
Derrière Caddy
Depuis le 2026-11-05, Caddy (sur OPNsense) gère le HTTPS de GitLab, du registry et de Pages. GitLab ne fait plus que du HTTP sur le LAN. Les réglages ajoutés à /etc/gitlab/gitlab.rb :
letsencrypt['enable'] = false: c'est Caddy qui obtient les certificats ;nginx['listen_port'] = 80etnginx['listen_https'] = false, pareil pourpages_nginx, etregistry_nginxsur le port5050;proxy_set_headersavecX-Forwarded-Proto=https: GitLab sait que le visiteur est en HTTPS et génère des liens corrects ;real_ip_trusted_addresses=192.168.1.1etreal_ip_header=X-Forwarded-For: GitLab voit la vraie IP des visiteurs (journaux, limites de requêtes), et pas celle d'OPNsense.
L'ancienne configuration est sauvegardée dans /root/gitlab.rb.avant-caddy. Le script /root/retour-avant-caddy.sh la remet en place si besoin.
Après un gitlab-ctl reconfigure, Puma redémarre et Caddy affiche « GitLab is not responding ». Attends environ une minute avant de chercher plus loin.
Domaine personnalisé pour un site Pages
Depuis le 2026-11-10, cette documentation est servie sur https://doc.formuleets.ca. L'ancienne adresse https://general.pages.formuleets.ca/documentation/ redirige vers elle (code 308).
Le nginx de GitLab ne sert Pages que pour les noms en *.pages.formuleets.ca. Pour un autre nom, Caddy envoie les requêtes directement au démon Pages, qui écoute à part sur 192.168.1.10:8091 :
# /etc/gitlab/gitlab.rb (version précédente : /root/gitlab.rb.avant-doc)
gitlab_pages['external_http'] = ['192.168.1.10:8091']
Pour ajouter un domaine à un autre site Pages, par exemple exemple.formuleets.ca :
- Cloudflare : un enregistrement
Aexemplevers142.137.247.115, en DNS only. - GitLab, dans le projet → Déployer → Pages → Domaines & paramètres → Ajouter un domaine :
exemple.formuleets.ca, sans certificat (c'est Caddy qui fait le HTTPS). GitLab affiche un enregistrementTXTde vérification (_gitlab-pages-verification-code.exemple) : l'ajouter dans Cloudflare, puis cliquer sur Vérifier. - Caddy : un domaine
exemple.formuleets.ca(Auto HTTPS, défi DNS-01), et un manipulateurreverse_proxyvershttp://192.168.1.10, port8091. Puis Appliquer. - Si le site est fait pour une adresse à la racine (Docusaurus :
urletbaseUrl: '/'), mettre à jour sa configuration et le redéployer. - GitLab, même page : Domaine principal = le nouveau domaine. Les anciennes adresses redirigent alors vers lui.
Pages n'a pas de certificat : c'est Caddy qui fait le HTTPS. GitLab propose donc le domaine principal en http://, et la redirection passe par http://, puis Caddy bascule en https://. C'est normal.
GitLab interroge le DNS de l'école, qui garde en mémoire une réponse « n'existe pas » jusqu'à 30 minutes. Attends, ou force temporairement un autre résolveur sur GitLab : sudo resolvectl dns ens160 1.1.1.1 8.8.8.8 && sudo resolvectl flush-caches (le réglage disparaît au redémarrage). Les postes du club ont le même délai pour voir un nouveau nom : ipconfig /flushdns, puis attendre.
Changement d'adresse (2026-11-04)
GitLab est passé de gitlab2.formuleets.ca à gitlab.formuleets.ca. Il répond toujours sous l'ancien nom, sans redirection : Caddy a un certificat pour chacun des deux noms. Les clones existants continuent donc de marcher avec les identifiants déjà enregistrés.
- Ne supprime pas l'enregistrement DNS
gitlab2tant que des clones l'utilisent. - Pour mettre à jour un clone (facultatif), dans le dossier du dépôt :
Git redemandera une fois tes identifiants pour le nouveau nom.git remote set-url origin "$(git remote get-url origin | sed 's/gitlab2\.formuleets/gitlab.formuleets/')"
- Le registry n'a qu'un seul nom :
registry.gitlab.formuleets.ca. Les images référencées enregistry.gitlab2…doivent être mises à jour. Dans les pipelines,$CI_REGISTRYest déjà correct.
Runner
Le runner de l'instance (Christiannnne, tag formule) tourne encore sur VMware (10.194.24.34). Dans sa config, extra_hosts force gitlab.formuleets.ca et registry.gitlab.formuleets.ca vers 142.137.247.115 : les jobs passent par OPNsense. Détails dans Infra as Code.
Sauvegardes
Pas encore de sauvegarde automatique de la VM. Une sauvegarde GitLab (gitlab-backup, sans le registry) et la config (/etc/gitlab) ont été faites avant la migration. À mettre en place : sauvegarde de la VM 120 (vzdump, puis Proxmox Backup Server). Tâche OpenProject #136.
Ce qu'on a appris de la migration
- L'assistant d'import ESXi de Proxmox n'était pas utilisable ici : moins de 3 Mo/s (il lit le disque via l'interface web de l'ESXi), et il échoue sur une VM qui a un snapshot.
- Ce qui a marché : supprimer les snapshots dans l'ESXi, créer la VM vide sur Proxmox avec les mêmes MAC, puis copier le disque par SSH en 4 copies parallèles, chacune sur un quart du disque (environ 39 Mo/s, 2 h 30 pour 300 Go).
- Avant toute migration, la config réseau doit reconnaître les cartes par leur adresse MAC (netplan
match: macaddress). Les noms des cartes changent entre VMware et Proxmox. - Une IP en DHCP n'est pas fiable pour un serveur : celle de GitLab a changé en cours de route. Demande à l'école une réservation ou une IP fixe.
- Les changements matériels en attente (MAC, agent QEMU) ne s'appliquent qu'à un arrêt puis un démarrage depuis Proxmox, pas avec un
rebootlancé dans la VM.