Mirroring de Github avec Gitea et Gitea-Mirror

1/52/53/54/55/5 (Pas encore de note)
Loading...
M

Bonjour à tous,

Aujourd’hui, nous allons voir comment créer un miroir de votre compte Github avec Gitea et Gitea-Mirror.
Je suis parti sur Gitea car c’est ce qui prend le moins de ressources dans les systèmes concurrents connus. Le mirroring est simple avec Gitea-Mirror, cela recrée tout correctement.

Tout sera fait avec Docker et Docker Compose qui sont les prérequis pour cet article. Tout est également fait avec un Debian 13 et je fournis aussi les configurations NGINX.

 

Installation de Gitea

Créez l’utilisateur Gitea avec la commande suivante :

adduser --disabled-password gitea

 

Notez son ID d’utilisateur qui nous servira pour la suite

id -u gitea

 

Ensuite, créez le dossier de données et ajoutez les droits avec l’ID obtenu avant :

mkdir /gitea/ && chown 1007:1007 /gitea/

 

Maintenant, créez le docker compose pour le déploiement de Gitea :

nano gitea-docker-compose.yml

 

Remplissez-le avec ceci en changeant l’**UID** et le **GID** :

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1007
      - USER_GID=1007
    restart: always
    networks:
      - gitea
    volumes:
      - /gitea/:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3333:3000"
      - "2222:22"

Lancez ensuite Gitea avec la commande suivante :

docker compose -f gitea-docker-compose.yml -d

 

Reverse Proxy pour Gitea

Pour avoir Gitea derrière un reverse proxy NGINX, vous pouvez utiliser le fichier de configuration suivant :

nano /etc/nginx/sites-enabled/gitea.vhost

Remplissez-le avec ceci en ajoutant votre certificat SSL et votre nom de domaine :

server {
    listen 443 ssl http2;
    server_name gitea.nicolas-simond.ch;

    # SSL configuration...
        ssl_certificate /etc/letsencrypt/live/nicolas-simond.ch/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nicolas-simond.ch/privkey.pem;

            location / {
        client_max_body_size 512M;
        proxy_pass http://localhost:3333;
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Vous pourrez ensuite vous rendre sur l’interface web de Gitea pour suivre l’assistant d’installation.

 

Installation de Gitea-Mirror

Créez le dossier de données et ajoutez les droits avec l’ID obtenu avant :

mkdir /gitea-mirror/ && chown 1007:1007 /gitea-mirror/

 

Maintenant, créez le docker compose pour le déploiement de Gitea :

nano gitea-mirror-docker-compose.yml

 

Remplissez-le avec ceci en changeant le **PUID** et le **PGID** et les variables **BETTER** :

# Minimal Gitea Mirror deployment
# Only includes what CANNOT be configured via the Web UI
# Everything else can be set up through the web interface after deployment

services:
  gitea-mirror:
    image: ghcr.io/raylabshq/gitea-mirror:latest
    container_name: gitea-mirror
    restart: unless-stopped
    ports:
      - "${PORT:-4321}:4321"
    user: ${PUID:-1007}:${PGID:-1007}
    volumes:
      - /gitea-mirror:/app/data
    environment:
      # === ABSOLUTELY REQUIRED ===
      # This MUST be set and CANNOT be changed via UI
      - BETTER_AUTH_SECRET="RANDOM_PASSWORD"  # Min 32 chars, required for sessions
      - BETTER_AUTH_URL=https://gitea-mirror.nicolas-simond.ch
      - BETTER_AUTH_TRUSTED_ORIGINS=https://gitea-mirror.nicolas-simond.ch
      # REVERSE PROXY: If accessing via a reverse proxy, set all three to your external URL:
      #   BETTER_AUTH_URL=https://gitea-mirror.example.com
      #   PUBLIC_BETTER_AUTH_URL=https://gitea-mirror.nicolas-simond.ch
      #   BETTER_AUTH_TRUSTED_ORIGINS=https://gitea-mirror.nicolas-simond.ch
      # Path-prefix deployments (e.g. /mirror) are supported at runtime via BASE_URL.

      # === CORE SETTINGS ===
      # These are technically required but have working defaults
      - NODE_ENV=production
      - DATABASE_URL=file:data/gitea-mirror.db
      - HOST=0.0.0.0
      - PORT=4321
      - BASE_URL=${BASE_URL:-/}
      - PUBLIC_BETTER_AUTH_URL=${PUBLIC_BETTER_AUTH_URL:-http://localhost:4321}
      # Optional concurrency controls (defaults match in-app defaults)
      # If you want perfect ordering of issues and PRs, set these at 1
      - MIRROR_ISSUE_CONCURRENCY=${MIRROR_ISSUE_CONCURRENCY:-3}
      - MIRROR_PULL_REQUEST_CONCURRENCY=${MIRROR_PULL_REQUEST_CONCURRENCY:-5}

    healthcheck:
      test:
        [
          "CMD-SHELL",
          "BASE=\"${BASE_URL:-/}\"; if [ \"$${BASE}\" = \"/\" ]; then BASE=\"\"; else BASE=\"$${BASE%/}\"; fi; wget --no-verbose --tries=3 --spider \"http://localhost:4321$${BASE}/api/health\"",
        ]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 15s

Lancez ensuite Gitea-Mirror avec la commande suivante :

docker compose -f gitea-mirror-docker-compose.yml

 

Reverse Proxy pour Gitea-Mirror

Pour avoir Gitea-Mirror derrière un reverse proxy NGINX, vous pouvez utiliser le fichier de configuration suivant :

nano /etc/nginx/sites-enabled/gitea-mirror.vhost

Remplissez-le avec ceci en ajoutant votre certificat SSL et votre nom de domaine :

server {
    listen 443 ssl http2;
    server_name gitea-mirror.nicolas-simond.ch;

    # SSL configuration...
        ssl_certificate /etc/letsencrypt/live/nicolas-simond.ch/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/nicolas-simond.ch/privkey.pem;

            location / {
        client_max_body_size 512M;
        proxy_pass http://localhost:4321;
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Accédez ensuite à l’interface web de Gitea-Mirror pour créer votre administrateur.

 

Configuration de la synchronisation

Dans l’interface, configurez vos utilisateurs et token d’API Github et Gitea comme ceci, adaptez les autres options selon l’usage que vous souhaitez en faire :

 

Dans l’onglet des logs, vous verrez les informations sur la synchronisation des repository :


 

Et sur votre profil, vous verrez tous les dépôts apparaitre :

 

L’exemple en live est disponible ici : https://gitea.nicolas-simond.ch/nicolas 🙂

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

0 Commentaires
Plus récents
Plus anciens Populaires