# Gitea Servidor Git autoalojado ligero y rápido, escrito en Go. Alternativa a GitLab y GitHub on-premises, optimizado para consumir pocos recursos. ## Características - 🚀 **Ligero y rápido**: Escrito en Go, consume menos recursos que GitLab - 📦 **Repositorios ilimitados**: Sin límites de repos, usuarios u organizaciones - 👥 **Gestión de usuarios y equipos**: Control de acceso granular - 🔀 **Pull Requests y Code Review**: Flujo de trabajo completo de desarrollo - 🐛 **Issue Tracking**: Sistema integrado de gestión de incidencias - 📊 **Wiki y Proyectos**: Documentación y gestión de tareas - 🔐 **Autenticación múltiple**: LDAP, OAuth2, OpenID Connect - 🌐 **Interfaz web intuitiva**: Similar a GitHub/GitLab ## Requisitos Previos - Docker Engine instalado - Portainer configurado (recomendado) - **Para Traefik o NPM**: Red Docker `proxy` creada - **Dominio configurado**: Para acceso HTTPS - **DB_PASSWORD generada**: Contraseña segura para PostgreSQL ⚠️ **IMPORTANTE**: Gitea requiere PostgreSQL. Este compose incluye un contenedor PostgreSQL 16 Alpine. ## Generar DB_PASSWORD **Antes de cualquier despliegue**, genera una contraseña segura para PostgreSQL: ```bash openssl rand -base64 32 ``` Guarda el resultado, lo necesitarás como valor de `DB_PASSWORD`. > ⚠️ **Importante**: Usa comillas simples en el archivo `.env` si la contraseña contiene caracteres especiales. > Ejemplo: `DB_PASSWORD='tu_password_generado'` --- ## Despliegue con Portainer ### Opción A: Git Repository (Recomendada) Permite mantener la configuración actualizada automáticamente desde Git. 1. En Portainer, ve a **Stacks** → **Add stack** 2. Nombra el stack: `gitea` 3. Selecciona **Git Repository** 4. Configura: - **Repository URL**: `https://git.ictiberia.com/groales/gitea` - **Repository reference**: `refs/heads/main` - **Compose path**: `docker-compose.yml` - **Additional paths**: Solo para Traefik: `docker-compose.override.traefik.yml.example` 5. En **Environment variables**, añade: **Para Traefik**: ``` DOMAIN_HOST=gitea.tudominio.com DB_PASSWORD='tu_password_generado' ``` **Para NPM**: ``` DB_PASSWORD='tu_password_generado' ``` ⚠️ **Nota para NPM**: No uses Additional paths, el docker-compose.yml base es suficiente. 6. Haz clic en **Deploy the stack** #### Configuración de WebSocket - **Traefik**: Ya configurado en el override - **NPM**: Puede requerir activar **WebSocket Support** para push/pull en tiempo real ### Opción B: Web Editor Copia y pega el contenido consolidado según tu configuración de proxy. 1. En Portainer, ve a **Stacks** → **Add stack** 2. Nombra el stack: `gitea` 3. Selecciona **Web editor** 4. Copia el contenido según tu entorno:
📋 Despliegue con Traefik ```yaml services: gitea: container_name: gitea image: gitea/gitea:latest restart: unless-stopped environment: USER_UID: 1000 USER_GID: 1000 GITEA__database__DB_TYPE: postgres GITEA__database__HOST: gitea-db:5432 GITEA__database__NAME: ${DB_NAME:-gitea} GITEA__database__USER: ${DB_USER:-gitea} GITEA__database__PASSWD: ${DB_PASSWORD} TZ: Europe/Madrid volumes: - gitea_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro networks: - proxy - gitea-internal depends_on: - gitea-db labels: # HTTP → HTTPS redirect - "traefik.enable=true" - "traefik.http.routers.gitea-http.rule=Host(`${DOMAIN_HOST}`)" - "traefik.http.routers.gitea-http.entrypoints=web" - "traefik.http.routers.gitea-http.middlewares=redirect-to-https@docker" # HTTPS router - "traefik.http.routers.gitea.rule=Host(`${DOMAIN_HOST}`)" - "traefik.http.routers.gitea.entrypoints=websecure" - "traefik.http.routers.gitea.tls=true" - "traefik.http.routers.gitea.tls.certresolver=letsencrypt" - "traefik.http.routers.gitea.service=gitea-svc" - "traefik.http.services.gitea-svc.loadbalancer.server.port=3000" # Redirect middleware - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" - "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true" gitea-db: container_name: gitea-db image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${DB_NAME:-gitea} POSTGRES_USER: ${DB_USER:-gitea} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - gitea_db:/var/lib/postgresql/data networks: - gitea-internal volumes: gitea_data: name: gitea_data gitea_db: name: gitea_db networks: proxy: external: true gitea-internal: name: gitea-internal ``` **Variables de entorno necesarias**: ``` DOMAIN_HOST=gitea.tudominio.com DB_PASSWORD='tu_password_generado' ```
📋 Despliegue con Nginx Proxy Manager ```yaml services: gitea: container_name: gitea image: gitea/gitea:latest restart: unless-stopped environment: USER_UID: 1000 USER_GID: 1000 GITEA__database__DB_TYPE: postgres GITEA__database__HOST: gitea-db:5432 GITEA__database__NAME: ${DB_NAME:-gitea} GITEA__database__USER: ${DB_USER:-gitea} GITEA__database__PASSWD: ${DB_PASSWORD} TZ: Europe/Madrid volumes: - gitea_data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro networks: - proxy - gitea-internal depends_on: - gitea-db gitea-db: container_name: gitea-db image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${DB_NAME:-gitea} POSTGRES_USER: ${DB_USER:-gitea} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - gitea_db:/var/lib/postgresql/data networks: - gitea-internal volumes: gitea_data: name: gitea_data gitea_db: name: gitea_db networks: proxy: external: true gitea-internal: name: gitea-internal ``` **Variables de entorno necesarias**: ``` DB_PASSWORD='tu_password_generado' ``` **⚠️ IMPORTANTE**: Debes configurar en NPM: 1. Crea un Proxy Host apuntando a `gitea:3000` 2. Configura SSL con Let's Encrypt 3. Opcionalmente activa **WebSocket Support** para mejor rendimiento
5. En **Environment variables**, añade las variables correspondientes 6. Haz clic en **Deploy the stack** ## Despliegue con Docker CLI ### 1. Clonar el repositorio ```bash git clone https://git.ictiberia.com/groales/gitea.git cd gitea ``` ### 2. Elegir modo de despliegue #### Opción A: Traefik ```bash cp docker-compose.override.traefik.yml.example docker-compose.override.yml cp .env.example .env # Editar .env y configurar DOMAIN_HOST y DB_PASSWORD ``` #### Opción B: Nginx Proxy Manager No necesitas archivo override, usa el `docker-compose.yml` base directamente. Copiar y configurar `.env`: ```bash cp .env.example .env # Editar .env y configurar DB_PASSWORD ``` ### 3. Iniciar el servicio ```bash docker compose up -d ``` ### 4. Verificar el despliegue ```bash docker compose logs -f gitea docker compose logs -f gitea-db ``` ## Configuración Inicial ### 1. Acceder a Gitea Visita `https://gitea.tudominio.com` y completa el asistente de instalación inicial. ### 2. Configuración Recomendada en el Asistente **Configuración de Base de Datos** (pre-rellenado): - Tipo: PostgreSQL - Host: `gitea-db:5432` - Usuario: `gitea` - Contraseña: (la que configuraste en `DB_PASSWORD`) - Nombre: `gitea` **Configuración General**: - **Título del sitio**: Nombre de tu instalación - **URL Base**: `https://gitea.tudominio.com` - **Ruta de repositorios Git**: `/data/git/repositories` (default) - **Ruta raíz LFS**: `/data/git/lfs` (default) **Configuración de Administrador**: - **Nombre de usuario**: Tu usuario admin - **Contraseña**: Contraseña fuerte y segura - **Email**: Tu email ⚠️ **Importante**: - Verifica que la URL base sea correcta (con HTTPS) - El primer usuario creado será automáticamente administrador ### 3. Configuración Post-Instalación Accede como administrador y configura: **En Site Administration → Configuration**: - Deshabilitar auto-registro si no lo necesitas - Configurar SMTP para notificaciones por email - Configurar límites de tamaño de repositorios si lo deseas ## Configuración de Email (SMTP) Para notificaciones y recuperación de contraseñas, edita el archivo de configuración: ```bash # Acceder al contenedor docker compose exec gitea bash # Editar app.ini vi /data/gitea/conf/app.ini ``` Añade la sección SMTP: ```ini [mailer] ENABLED = true FROM = gitea@tudominio.com PROTOCOL = smtp SMTP_ADDR = smtp.tudominio.com SMTP_PORT = 587 USER = gitea@tudominio.com PASSWD = tu_password_smtp ``` Reinicia Gitea: ```bash docker compose restart gitea ``` ## Uso Básico ### Crear un Repositorio 1. Inicia sesión en Gitea 2. Haz clic en el **+** en la esquina superior derecha 3. Selecciona **New Repository** 4. Configura nombre, descripción, visibilidad 5. Haz clic en **Create Repository** ### Clonar un Repositorio ```bash # Con HTTPS git clone https://gitea.tudominio.com/usuario/repo.git # Con SSH (requiere configurar clave SSH en Gitea) git clone git@gitea.tudominio.com:usuario/repo.git ``` ### Configurar SSH 1. Genera una clave SSH (si no tienes): ```bash ssh-keygen -t ed25519 -C "tu_email@ejemplo.com" ``` 2. Copia la clave pública: ```bash cat ~/.ssh/id_ed25519.pub ``` 3. En Gitea: **Settings** → **SSH / GPG Keys** → **Add Key** ## Backup y Restauración ### Backup Manual ```bash # Detener Gitea (mantener DB corriendo) docker compose stop gitea # 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).tar.gz -C /data . # Backup de PostgreSQL docker compose exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql # Reiniciar Gitea docker compose start gitea ``` ### Restauración ```bash # Detener servicios docker compose down # Restaurar datos de Gitea docker run --rm -v gitea_data:/data -v $(pwd):/backup alpine \ sh -c "cd /data && tar xzf /backup/gitea-data-20240101.tar.gz" # Iniciar solo la DB docker compose up -d gitea-db # Esperar a que PostgreSQL esté listo sleep 10 # Restaurar DB docker compose exec -T gitea-db psql -U gitea gitea < gitea-db-20240101.sql # Iniciar todo docker compose up -d ``` ### Backup Automático Considera usar: - [docker-volume-backup](https://github.com/offen/docker-volume-backup) - Cron job con el script de backup manual - Duplicati para backups regulares ⚠️ **CRÍTICO**: Un servidor Git requiere backups regulares y probados. ## Actualización ### Desde Portainer (Git Repository) 1. Ve a tu stack `gitea` 2. Haz clic en **Pull and redeploy** ### Desde CLI ```bash docker compose pull docker compose up -d ``` ⚠️ **Nota**: Gitea puede requerir ejecutar migraciones automáticamente al actualizar. ## Solución de Problemas ### Gitea no puede conectar a PostgreSQL **Síntomas**: Error de conexión a base de datos en el asistente **Soluciones**: ```bash # Verificar que ambos contenedores están corriendo docker compose ps # Verificar logs de PostgreSQL docker compose logs gitea-db # Verificar que están en la misma red docker network inspect gitea-internal # Verificar variable DB_PASSWORD docker compose exec gitea env | grep GITEA__database__PASSWD ``` ### Error en instalación inicial **Síntomas**: El asistente falla al guardar configuración **Soluciones**: 1. Verifica permisos del volumen `gitea_data` 2. Asegúrate de que USER_UID/USER_GID son correctos (1000 por defecto) 3. Revisa logs: `docker compose logs gitea` ### No puedo hacer push/pull via HTTPS **Síntomas**: Error de autenticación o SSL **Soluciones**: 1. Verifica que la URL base en Gitea es correcta (`https://gitea.tudominio.com`) 2. Comprueba que el certificado SSL es válido 3. Asegúrate de usar credenciales correctas 4. Para NPM: verifica que WebSocket Support está activado ### Problemas de rendimiento **Síntomas**: Git lento, interfaz web lenta **Soluciones**: 1. Verifica recursos del servidor (CPU, RAM, disco) 2. PostgreSQL puede necesitar tuning para muchos repos 3. Considera migrar a SSD si usas HDD 4. Revisa logs: `docker compose logs` ### Ver logs detallados ```bash # Logs de Gitea docker compose logs -f gitea # Logs de PostgreSQL docker compose logs -f gitea-db # Logs dentro del contenedor docker compose exec gitea cat /data/gitea/log/gitea.log ``` ### Reiniciar completamente ```bash # Cuidado: esto eliminará TODOS tus datos docker compose down -v docker compose up -d ``` ## Recursos Adicionales - [Documentación Oficial de Gitea](https://docs.gitea.com/) - [GitHub de Gitea](https://github.com/go-gitea/gitea) - [Wiki de este repositorio](https://git.ictiberia.com/groales/gitea/wiki) - [Repositorio en Gitea](https://git.ictiberia.com/groales/gitea) ## Seguridad - ⚠️ **Nunca** compartas tu DB_PASSWORD - ⚠️ Usa contraseñas fuertes para usuarios administradores - ⚠️ Deshabilita auto-registro si es una instalación privada - ⚠️ Realiza backups regulares y pruébalos - ⚠️ Mantén actualizado Gitea y PostgreSQL - ⚠️ Usa HTTPS en producción (obligatorio) - ⚠️ Configura SSH keys en lugar de contraseñas para git operations ## Licencia Este repositorio de configuración está bajo licencia MIT. Gitea es software libre bajo licencia MIT.