Page:
Backup y Restauración
Clone
Backup y Restauración
Protege tus repositorios Git, base de datos y configuración con backups regulares.
⚠️ Importancia de los Backups
Un servidor Git sin backups es un riesgo crítico:
- 💔 Pérdida de código fuente
- 💔 Pérdida de historial de commits
- 💔 Pérdida de issues y pull requests
- 💔 Pérdida de configuración y usuarios
📦 ¿Qué respaldar?
Gitea almacena datos en dos lugares principales:
- Volumen
gitea_data: Repositorios, configuración, avatares, LFS - Volumen
gitea_db: Base de datos PostgreSQL con metadatos
🔄 Backup Manual
Método Completo (Recomendado)
# 1. Detener Gitea (mantener DB corriendo)
docker compose stop gitea
# 2. Backup de datos de Gitea
docker run --rm \
-v gitea_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/gitea-data-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .
# 3. Backup de PostgreSQL
docker compose exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d-%H%M%S).sql
# 4. Reiniciar Gitea
docker compose start gitea
# 5. Verificar backups
ls -lh gitea-*.tar.gz
ls -lh gitea-*.sql
Método Rápido (Sin Downtime)
Para Gitea, si aceptas posibles inconsistencias menores:
# Backup en caliente
docker run --rm \
-v gitea_data:/data \
-v $(pwd):/backup \
alpine tar czf /backup/gitea-data-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .
# DB backup (sin detener)
docker compose exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d-%H%M%S).sql
🔙 Restauración
Restaurar Completamente
# 1. Detener todos los servicios
docker compose down
# 2. Eliminar volúmenes antiguos (¡CUIDADO!)
docker volume rm gitea_data gitea_db
# 3. Crear nuevos volúmenes
docker volume create gitea_data
docker volume create gitea_db
# 4. Restaurar datos de Gitea
docker run --rm \
-v gitea_data:/data \
-v $(pwd):/backup \
alpine sh -c "cd /data && tar xzf /backup/gitea-data-20241203-120000.tar.gz"
# 5. Iniciar solo PostgreSQL
docker compose up -d gitea-db
# 6. Esperar a que PostgreSQL esté listo
sleep 10
# 7. Restaurar base de datos
docker compose exec -T gitea-db psql -U gitea gitea < gitea-db-20241203-120000.sql
# 8. Iniciar todo
docker compose up -d
# 9. Verificar
docker compose logs -f
Restaurar Solo Repositorios
Si solo necesitas restaurar repositorios específicos:
# Extraer backup a directorio temporal
mkdir temp-restore
tar xzf gitea-data-20241203.tar.gz -C temp-restore
# Copiar repositorios específicos
docker cp temp-restore/git/repositories/usuario/repo.git gitea:/data/git/repositories/usuario/
# Reiniciar Gitea
docker compose restart gitea
🤖 Backup Automático
Opción 1: Cron Job
Crea un script /root/backup-gitea.sh:
#!/bin/bash
BACKUP_DIR="/backups/gitea"
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p $BACKUP_DIR
cd /path/to/gitea
# Backup Gitea data
docker run --rm \
-v gitea_data:/data \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/gitea-data-$DATE.tar.gz -C /data .
# Backup PostgreSQL
docker compose exec -T gitea-db pg_dump -U gitea gitea > $BACKUP_DIR/gitea-db-$DATE.sql
# Comprimir SQL
gzip $BACKUP_DIR/gitea-db-$DATE.sql
# Eliminar backups antiguos (más de 30 días)
find $BACKUP_DIR -name "gitea-*" -mtime +30 -delete
echo "Backup completado: $DATE"
Hazlo ejecutable y añade a cron:
chmod +x /root/backup-gitea.sh
# Editar crontab
crontab -e
# Añadir línea (backup diario a las 2 AM)
0 2 * * * /root/backup-gitea.sh >> /var/log/gitea-backup.log 2>&1
Opción 2: docker-volume-backup
Usa offen/docker-volume-backup:
services:
backup:
image: offen/docker-volume-backup:latest
environment:
BACKUP_CRON_EXPRESSION: "0 2 * * *" # 2 AM diario
BACKUP_FILENAME: "gitea-backup-%Y%m%d-%H%M%S.tar.gz"
BACKUP_RETENTION_DAYS: "30"
volumes:
- gitea_data:/backup/gitea_data:ro
- /backups:/archive
Opción 3: Duplicati
Configura Duplicati para respaldar:
/var/lib/docker/volumes/gitea_data/_data- Los archivos SQL generados por cron
📤 Backup Remoto
rsync a Servidor Remoto
# En el script de backup, añade:
rsync -avz --delete /backups/gitea/ usuario@servidor-remoto:/backups/gitea/
Subir a Cloud Storage
AWS S3:
aws s3 sync /backups/gitea/ s3://mi-bucket/gitea-backups/
Google Drive (con rclone):
rclone sync /backups/gitea/ gdrive:gitea-backups/
🧪 Probar Restauración
CRÍTICO: Prueba tus backups regularmente:
# 1. Crear entorno de prueba
mkdir /tmp/gitea-test
cd /tmp/gitea-test
# 2. Copiar compose files
cp /path/to/gitea/docker-compose.yml .
cp /path/to/gitea/.env .
# 3. Restaurar y verificar
# (Usa los pasos de restauración anteriores)
# 4. Verificar que todo funciona
docker compose up -d
# Accede a http://localhost:3000 y verifica repos
📋 Checklist de Backup
- ✅ Backup automático configurado
- ✅ Backups se ejecutan regularmente
- ✅ Backups se copian a ubicación remota
- ✅ Rotación de backups antiguos configurada
- ✅ Proceso de restauración documentado
- ✅ Restauración probada al menos una vez
- ✅ Alertas configuradas si falla el backup
🔍 Verificar Integridad
# Verificar archivos tar.gz
tar tzf gitea-data-20241203.tar.gz > /dev/null && echo "OK" || echo "CORRUPTO"
# Verificar SQL
gzip -t gitea-db-20241203.sql.gz && echo "OK" || echo "CORRUPTO"
# Ver tamaño de backups
du -sh gitea-*.tar.gz
🆘 Recuperación de Desastres
Pérdida Completa del Servidor
- Instalar Docker y Docker Compose en nuevo servidor
- Clonar repositorio de configuración
- Restaurar
.envdesde backup o recrear - Seguir pasos de Restaurar Completamente
- Configurar DNS apuntando al nuevo servidor
- Verificar SSL y acceso
Corrupción de Base de Datos
Si PostgreSQL falla:
# Detener todo
docker compose down
# Eliminar solo volumen de DB
docker volume rm gitea_db
# Recrear y restaurar solo DB
docker volume create gitea_db
docker compose up -d gitea-db
sleep 10
docker compose exec -T gitea-db psql -U gitea gitea < gitea-db-backup.sql
# Iniciar Gitea
docker compose up -d gitea
Siguiente: Actualización
📚 Wiki de Gitea
Inicio
🚀 Despliegue
⚙️ Configuración
🔧 Mantenimiento
📖 Enlaces Útiles
Última actualización: Diciembre 2025