Bienvenue sur le GitLab Maison Graciet

🏠 GitLab Maison Graciet — Documentation Infrastructure

Bienvenue dans le numérique utile.

Instance GitLab privée hébergée sur gitlab.montools.org, servant de miroir de sauvegarde de l'ensemble des dépôts GitHub de Maison Graciet et Ocade Fusion.


🏗️ Architecture

Serveur

  • Hébergement : Serveur Plesk (montools.org)
  • GitLab : GitLab CE v18.8.3 (Docker)
  • Accès web : https://gitlab.montools.org (SSL via Plesk, reverse proxy sur port 8929)
  • Accès SSH Git : port 2222

Docker Compose

Le fichier docker-compose.yml se trouve dans /var/www/vhosts/gitlab.montools.org/httpdocs/.

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: gitlab.montools.org
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.montools.org'
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        nginx['proxy_set_headers'] = {
          "X-Forwarded-Proto" => "https",
          "X-Forwarded-Ssl" => "on"
        }
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        letsencrypt['enable'] = false
        gitlab_rails['import_sources'] = ['github', 'bitbucket', 'bitbucket_server', 'git', 'gitea', 'gitlab_project']
        gitlab_rails['omniauth_providers'] = [
          {
            name: "github",
            app_id: "VOTRE_CLIENT_ID",
            app_secret: "VOTRE_CLIENT_SECRET",
            args: { scope: "user:email" }
          }
        ]
        puma['worker_processes'] = 2
        sidekiq['max_concurrency'] = 10
        postgresql['shared_buffers'] = "256MB"
        prometheus_monitoring['enable'] = false
    ports:
      - '8929:80'
      - '2222:22'
    volumes:
      - gitlab_config:/etc/gitlab
      - gitlab_logs:/var/log/gitlab
      - gitlab_data:/var/opt/gitlab
    shm_size: '256m'
volumes:
  gitlab_config:
  gitlab_logs:
  gitlab_data:

Organisation des groupes

Groupe GitLab Organisation GitHub Contenu
maison-graciet maison-graciet Thèmes, plugins, outils internes, projets clients historiques
ocade-graciet-sites ocade-graciet-sites Sites WordPress clients
ocade-graciet-system ocade-graciet-system Plugins système, automatisations, documentation technique

🔄 Système de miroir (Pull Mirror)

Principe

GitLab CE ne supporte pas le pull mirror natif (fonctionnalité Premium). Un script bash exécuté quotidiennement par cron effectue la synchronisation :

  1. Clone bare de chaque dépôt depuis GitHub (première exécution uniquement)
  2. Fetch incrémentiel des modifications depuis GitHub (exécutions suivantes)
  3. Push mirror vers GitLab

Fichiers

Fichier Emplacement Rôle
pull-mirror.sh /opt/gitlab-mirror/pull-mirror.sh Script de synchronisation
Clones bare /opt/gitlab-mirror/repos/ Dépôts intermédiaires (bare)
Logs /var/log/gitlab-mirror.log Journal d'exécution

Cron

Exécution quotidienne à 1h du matin :

0 1 * * * /opt/gitlab-mirror/pull-mirror.sh >> /var/log/gitlab-mirror.log 2>&1

Lancer manuellement une synchronisation

/opt/gitlab-mirror/pull-mirror.sh

Consulter les logs

# Dernière exécution
tail -50 /var/log/gitlab-mirror.log

# Rechercher les erreurs
grep "❌" /var/log/gitlab-mirror.log

Ajouter un nouveau dépôt au miroir

Étape 1 : Importer le dépôt dans GitLab

Option A — Via l'interface web (recommandé pour un seul repo) :

  1. Aller sur https://gitlab.montools.org
  2. New project → Import project → GitHub
  3. S'authentifier avec le Personal Access Token GitHub
  4. Sélectionner le bon groupe de destination dans le dropdown (maison-graciet, ocade-graciet-sites ou ocade-graciet-system)
  5. Décocher "Import collaborators"
  6. Cliquer Import

Option B — Via "Repository by URL" :

  1. New project → Import project → Repository by URL
  2. Git repository URL : https://TOKEN_GITHUB@github.com/ORG/REPO.git
  3. Sélectionner le groupe de destination
  4. Cliquer Create project

Étape 2 : Ajouter le dépôt au script de miroir

Éditer le script :

nano /opt/gitlab-mirror/pull-mirror.sh

Ajouter une ligne dans le tableau REPOS=(), dans la section du groupe correspondant :

# Format : "chemin_gitlab|chemin_github"
"ocade-graciet-sites/nom-du-repo|ocade-graciet-sites/nom-du-repo"

Exemples :

# Nouveau site client dans ocade-graciet-sites
"ocade-graciet-sites/nouveau-client|ocade-graciet-sites/nouveau-client"

# Nouveau plugin dans ocade-graciet-system
"ocade-graciet-system/mon-plugin|ocade-graciet-system/mon-plugin"

# Nouveau projet dans maison-graciet
"maison-graciet/mon-projet|maison-graciet/mon-projet"

Étape 3 : Lancer une synchronisation initiale

/opt/gitlab-mirror/pull-mirror.sh

Le script détectera automatiquement que le repo n'a pas encore été cloné et fera le clone initial. Les exécutions suivantes ne feront que les mises à jour incrémentelles.

Étape 4 : Vérifier

# Vérifier dans les logs
tail -20 /var/log/gitlab-mirror.log

# Vérifier que le clone bare existe
ls /opt/gitlab-mirror/repos/GROUPE/NOM-REPO.git

Ajouter une nouvelle organisation GitHub complète

Étape 1 : Créer le groupe dans GitLab

  1. Aller sur https://gitlab.montools.org
  2. Groups → New group
  3. Nommer le groupe identiquement à l'organisation GitHub
  4. Visibilité : Private

Étape 2 : Importer tous les repos

  1. New project → Import project → GitHub
  2. Onglet Organization
  3. Sélectionner l'organisation dans le dropdown
  4. Changer le groupe de destination pour chaque repo
  5. Cliquer Import all repositories

Étape 3 : Récupérer la liste des repos importés

curl --header "PRIVATE-TOKEN: VOTRE_TOKEN_GITLAB" \
  "https://gitlab.montools.org/api/v4/groups/NOM-DU-GROUPE/projects?per_page=100&simple=true" \
  | jq -r '.[].path'

Étape 4 : Ajouter au script de miroir

Ajouter chaque repo dans le tableau REPOS=() du script /opt/gitlab-mirror/pull-mirror.sh, en suivant le format :

"nom-du-groupe/nom-repo|nom-org-github/nom-repo"

🔑 Tokens et accès

Tokens nécessaires

Token Service Scopes Utilisation
Personal Access Token GitHub repo, read:org Accès aux dépôts pour le miroir
Personal Access Token GitLab api API GitLab pour le script
OAuth App GitHub Import via interface GitLab

Renouveler un token GitHub

  1. GitHub → Settings → Developer settings → Personal access tokens
  2. Générer un nouveau token avec les scopes repo et read:org
  3. Mettre à jour GITHUB_TOKEN dans /opt/gitlab-mirror/pull-mirror.sh

Renouveler un token GitLab

  1. GitLab → User Settings → Personal access tokens
  2. Créer un nouveau token avec le scope api
  3. Mettre à jour GITLAB_TOKEN dans /opt/gitlab-mirror/pull-mirror.sh

🛠️ Maintenance

Redémarrer GitLab

cd /var/www/vhosts/gitlab.montools.org/httpdocs
docker compose down
docker compose up -d

Attendre 5-10 minutes que GitLab soit complètement opérationnel.

Reconfigurer GitLab (après modification du docker-compose.yml)

docker compose exec gitlab gitlab-ctl reconfigure

Console Rails (modifications avancées)

docker compose exec gitlab gitlab-rails console -e production

Vérifier l'état de GitLab

docker compose ps
docker compose logs -f gitlab

Vérifier l'espace disque des clones bare

du -sh /opt/gitlab-mirror/repos/
du -sh /opt/gitlab-mirror/repos/*/

Nettoyer les logs de miroir

# Garder les 30 derniers jours
find /var/log/gitlab-mirror.log -mtime +30 -delete

⚠️ Points d'attention

  1. Tokens GitHub : ils expirent. Penser à les renouveler avant expiration et mettre à jour le script.
  2. Sens unique : la synchronisation va de GitHub → GitLab uniquement. Ne pas modifier les dépôts directement sur GitLab, ils seront écrasés au prochain mirror.
  3. Noms sensibles à la casse : certains repos GitHub ont des majuscules (ex: IA, Proxmox, MHV-2023). Les noms dans le script doivent correspondre exactement.
  4. Nouveaux repos : tout nouveau dépôt créé sur GitHub doit être ajouté manuellement (import + script). Voir la section "Ajouter un nouveau dépôt".
  5. Sign-up : désactiver l'inscription publique si ce n'est pas déjà fait (Admin → Settings → General → Sign-up restrictions).

Dernière mise à jour : 9 février 2026 Infrastructure mise en place par Maison Graciet — Bienvenue dans le numérique utile.

Bienvenue sur le GitLab Maison Graciet

Bienvenue sur le GitLab Maison Graciet

Don't have an account yet? Register now

or sign in with