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 :
- Clone bare de chaque dépôt depuis GitHub (première exécution uniquement)
- Fetch incrémentiel des modifications depuis GitHub (exécutions suivantes)
- 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) :
- Aller sur
https://gitlab.montools.org - New project → Import project → GitHub
- S'authentifier avec le Personal Access Token GitHub
- Sélectionner le bon groupe de destination dans le dropdown (maison-graciet, ocade-graciet-sites ou ocade-graciet-system)
- Décocher "Import collaborators"
- Cliquer Import
Option B — Via "Repository by URL" :
- New project → Import project → Repository by URL
- Git repository URL :
https://TOKEN_GITHUB@github.com/ORG/REPO.git - Sélectionner le groupe de destination
- 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
- Aller sur
https://gitlab.montools.org - Groups → New group
- Nommer le groupe identiquement à l'organisation GitHub
- Visibilité : Private
Étape 2 : Importer tous les repos
- New project → Import project → GitHub
- Onglet Organization
- Sélectionner l'organisation dans le dropdown
- Changer le groupe de destination pour chaque repo
- 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
- GitHub → Settings → Developer settings → Personal access tokens
- Générer un nouveau token avec les scopes
repoetread:org - Mettre à jour
GITHUB_TOKENdans/opt/gitlab-mirror/pull-mirror.sh
Renouveler un token GitLab
- GitLab → User Settings → Personal access tokens
- Créer un nouveau token avec le scope
api - Mettre à jour
GITLAB_TOKENdans/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
- Tokens GitHub : ils expirent. Penser à les renouveler avant expiration et mettre à jour le script.
- 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.
-
Noms sensibles à la casse : certains repos GitHub ont des majuscules (ex:
IA,Proxmox,MHV-2023). Les noms dans le script doivent correspondre exactement. - 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".
- 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.