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 🙂




