380 lines
9.3 KiB
Markdown
380 lines
9.3 KiB
Markdown
# Gitea - Servidor Git Autoalojado
|
|
|
|
Gitea es un servidor Git ligero y autoalojado, similar a GitHub o GitLab.
|
|
|
|
## 📋 Descripción
|
|
|
|
Este stack despliega Gitea con:
|
|
- Base de datos PostgreSQL
|
|
- Servidor SSH para operaciones Git
|
|
- Gitea Actions (CI/CD similar a GitHub Actions)
|
|
- Act Runner para ejecutar pipelines
|
|
- Integración con Traefik y Authentik
|
|
|
|
## 🚀 Despliegue
|
|
|
|
### Prerequisitos
|
|
|
|
1. **Red Docker**: Asegúrate de que la red `proxy` existe
|
|
2. **Registro DNS**: Configura el registro A para tu dominio Gitea
|
|
3. **Puerto SSH**: El puerto SSH debe estar disponible (por defecto 222)
|
|
|
|
### Desde Portainer
|
|
|
|
1. Ve a **Stacks** → **Add stack**
|
|
2. Nombre: `gitea`
|
|
3. Selecciona **Repository** o **Git repository**
|
|
4. Configura:
|
|
- Repository URL: `<tu-repositorio>`
|
|
- Repository reference: `main`
|
|
- Compose path: `gitea/docker-compose.yml`
|
|
5. Carga el archivo de variables de entorno: `gitea/stack.env`
|
|
6. Haz clic en **Deploy the stack**
|
|
|
|
### Variables de Entorno Importantes
|
|
|
|
Edita el archivo `stack.env`:
|
|
|
|
```env
|
|
# Imágenes
|
|
GITEA_IMAGE=gitea/gitea:latest
|
|
GITEA_POSTGRES_IMAGE=postgres:16
|
|
GITEA_RUNNER_IMAGE=gitea/act_runner:latest
|
|
|
|
# Base de datos
|
|
GITEA_DB_PASSWORD=tu-password-seguro-aleatorio
|
|
|
|
# Dominios
|
|
GITEA_DOMAIN=git.tudominio.com
|
|
GITEA_ROOT_URL=https://git.tudominio.com
|
|
|
|
# SSH
|
|
GITEA_SSH_DOMAIN=git.tudominio.com
|
|
GITEA_SSH_PORT=222
|
|
|
|
# Gitea Actions Runner
|
|
GITEA_RUNNER_REGISTRATION_TOKEN=tu-token-de-registro
|
|
```
|
|
|
|
## ⚙️ Configuración Post-Instalación
|
|
|
|
### 1. Primer Acceso
|
|
|
|
1. Accede a `https://git.tudominio.com`
|
|
2. Completa la configuración inicial:
|
|
- Base de datos: Ya está configurada (PostgreSQL)
|
|
- Configuración del servidor: Usa los valores predefinidos
|
|
- **Importante**: Crea la cuenta de administrador en este paso
|
|
3. Haz clic en **Install Gitea**
|
|
|
|
### 2. Configurar Gitea Actions
|
|
|
|
Para habilitar CI/CD con Gitea Actions:
|
|
|
|
#### Paso 1: Generar Token de Registro
|
|
|
|
1. Accede a Gitea como administrador
|
|
2. Ve a **Site Administration** → **Actions** → **Runners**
|
|
3. Haz clic en **Create new Runner**
|
|
4. Copia el **Registration Token**
|
|
|
|
#### Paso 2: Actualizar el Stack
|
|
|
|
1. Edita el archivo `stack.env`
|
|
2. Añade el token:
|
|
```env
|
|
GITEA_RUNNER_REGISTRATION_TOKEN=tu-token-copiado
|
|
```
|
|
3. Actualiza el stack en Portainer
|
|
|
|
#### Paso 3: Verificar el Runner
|
|
|
|
1. En Gitea, ve a **Site Administration** → **Actions** → **Runners**
|
|
2. Deberías ver el runner registrado y activo
|
|
3. Nombre del runner: `act-runner-docker` (o el configurado en `GITEA_RUNNER_NAME`)
|
|
|
|
### 3. Configurar SSH
|
|
|
|
Para usar Git con SSH:
|
|
|
|
```bash
|
|
# Clonar repositorio con SSH
|
|
git clone ssh://git@git.tudominio.com:222/usuario/repositorio.git
|
|
|
|
# O configurar SSH en ~/.ssh/config
|
|
Host git.tudominio.com
|
|
HostName git.tudominio.com
|
|
Port 222
|
|
User git
|
|
IdentityFile ~/.ssh/id_ed25519
|
|
```
|
|
|
|
### 4. Integración con Authentik (SSO)
|
|
|
|
Este stack tiene una configuración especial para Authentik:
|
|
|
|
#### Rutas Protegidas
|
|
|
|
- `/user/login` - Página de login (protegida con SSO)
|
|
- `/explore` - Explorar repositorios públicos (protegida)
|
|
- `/TheHomelessSherlock` - Perfil de usuario específico (protegido)
|
|
|
|
#### Rutas Públicas
|
|
|
|
- Repositorios públicos accesibles sin autenticación
|
|
- API Git (clone, pull, push) funciona sin SSO
|
|
|
|
#### Configurar OAuth con Authentik
|
|
|
|
1. En Authentik, crea una aplicación para Gitea:
|
|
- Tipo: **OAuth2/OpenID Provider**
|
|
- Client type: **Confidential**
|
|
- Redirect URIs: `https://git.tudominio.com/user/oauth2/authentik/callback`
|
|
|
|
2. En Gitea, ve a **Site Administration** → **Authentication Sources** → **Add Authentication Source**
|
|
3. Tipo: **OAuth2**
|
|
4. Configura:
|
|
- Provider: **OpenID Connect**
|
|
- Client ID: (de Authentik)
|
|
- Client Secret: (de Authentik)
|
|
- OpenID Connect Auto Discovery URL: `https://auth.tudominio.com/application/o/gitea/.well-known/openid-configuration`
|
|
|
|
5. Actualiza las variables en `stack.env`:
|
|
```env
|
|
GITEA_ENABLE_OPENID_SIGNIN=true
|
|
GITEA_ENABLE_OPENID_SIGNUP=true
|
|
GITEA_DISABLE_LOGIN_FORM=false # Mantén false para permitir login local también
|
|
```
|
|
|
|
## 🔧 Configuración Avanzada
|
|
|
|
### Personalización de la UI
|
|
|
|
Las siguientes opciones están preconfiguradas:
|
|
|
|
- **Tema por defecto**: Oscuro (`gitea-dark`)
|
|
- **Registro deshabilitado**: Solo administradores pueden crear usuarios (o usar SSO)
|
|
- **Visibilidad por defecto**: Privada
|
|
- **Requiere login para ver**: Activado
|
|
|
|
Para cambiar estas opciones, edita `stack.env` y actualiza el stack.
|
|
|
|
### Limitar Acceso por Organización
|
|
|
|
```env
|
|
GITEA_DEFAULT_ALLOW_CREATE_ORGANIZATION=false
|
|
GITEA_DEFAULT_ORG_VISIBILITY=private
|
|
```
|
|
|
|
### Notificaciones por Email
|
|
|
|
Añade al archivo `stack.env`:
|
|
|
|
```env
|
|
GITEA__mailer__ENABLED=true
|
|
GITEA__mailer__FROM=gitea@tudominio.com
|
|
GITEA__mailer__PROTOCOL=smtp
|
|
GITEA__mailer__SMTP_ADDR=smtp.tudominio.com
|
|
GITEA__mailer__SMTP_PORT=587
|
|
GITEA__mailer__USER=gitea@tudominio.com
|
|
GITEA__mailer__PASSWD=tu-password-smtp
|
|
```
|
|
|
|
### Configurar Webhooks
|
|
|
|
Gitea soporta webhooks para integración con otros servicios:
|
|
|
|
1. Ve a tu repositorio → **Settings** → **Webhooks**
|
|
2. Añade un webhook con la URL de destino
|
|
3. Selecciona los eventos que quieres recibir
|
|
|
|
### Ejemplo de Workflow con Gitea Actions
|
|
|
|
Crea `.gitea/workflows/build.yml` en tu repositorio:
|
|
|
|
```yaml
|
|
name: Build and Test
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: '20'
|
|
|
|
- name: Install dependencies
|
|
run: npm install
|
|
|
|
- name: Build
|
|
run: npm run build
|
|
|
|
- name: Test
|
|
run: npm test
|
|
```
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### No puedo hacer push/pull por SSH
|
|
|
|
1. Verifica que el puerto SSH está abierto:
|
|
```bash
|
|
telnet git.tudominio.com 222
|
|
```
|
|
|
|
2. Verifica tu clave SSH:
|
|
```bash
|
|
ssh -T git@git.tudominio.com -p 222
|
|
```
|
|
|
|
3. Añade tu clave SSH en Gitea:
|
|
- Ve a **Settings** → **SSH / GPG Keys** → **Add Key**
|
|
|
|
### El runner de Actions no se registra
|
|
|
|
1. Verifica los logs:
|
|
```bash
|
|
docker logs gitea-act-runner
|
|
```
|
|
|
|
2. Verifica que el token es correcto en `stack.env`
|
|
|
|
3. Regenera el token en Gitea si es necesario
|
|
|
|
4. Asegúrate de que el runner puede comunicarse con Gitea:
|
|
```bash
|
|
docker exec gitea-act-runner ping gitea
|
|
```
|
|
|
|
### Error de permisos con volúmenes
|
|
|
|
Si usas SELinux, los volúmenes ya tienen `:Z`:
|
|
|
|
```bash
|
|
# Si persisten problemas
|
|
sudo chcon -Rt svirt_sandbox_file_t /opt/gitea/data
|
|
sudo chcon -Rt svirt_sandbox_file_t /opt/gitea/postgres
|
|
```
|
|
|
|
### OAuth con Authentik no funciona
|
|
|
|
1. Verifica que la Redirect URI en Authentik es exacta
|
|
2. Comprueba que el Discovery URL es accesible desde el contenedor:
|
|
```bash
|
|
docker exec gitea curl https://auth.tudominio.com/application/o/gitea/.well-known/openid-configuration
|
|
```
|
|
3. Revisa los logs de Gitea: `docker logs gitea`
|
|
|
|
### La base de datos no inicia
|
|
|
|
1. Verifica los logs de PostgreSQL:
|
|
```bash
|
|
docker logs gitea-postgres
|
|
```
|
|
|
|
2. Verifica los permisos del directorio de datos:
|
|
```bash
|
|
ls -lh /opt/gitea/postgres
|
|
```
|
|
|
|
3. Si necesitas reiniciar desde cero:
|
|
```bash
|
|
docker compose down
|
|
sudo rm -rf /opt/gitea/postgres/*
|
|
docker compose up -d
|
|
```
|
|
|
|
## 📚 Recursos Adicionales
|
|
|
|
- [Documentación oficial de Gitea](https://docs.gitea.io/)
|
|
- [Gitea Actions](https://docs.gitea.io/en-us/usage/actions/overview/)
|
|
- [Act Runner](https://gitea.com/gitea/act_runner)
|
|
- [Migrar desde GitHub/GitLab](https://docs.gitea.io/en-us/usage/migrations/)
|
|
|
|
## 🔒 Seguridad
|
|
|
|
- **SSH**: Usa claves SSH en lugar de passwords para Git
|
|
- **2FA**: Habilita autenticación de dos factores en tu cuenta
|
|
- **Tokens**: Usa tokens de acceso con permisos limitados para CI/CD
|
|
- **Webhooks**: Verifica siempre las firmas de webhooks
|
|
- **Backups**: Realiza backups regulares de la base de datos y repositorios
|
|
|
|
## 💾 Backups
|
|
|
|
### Backup de la Base de Datos
|
|
|
|
```bash
|
|
# Backup completo
|
|
docker exec gitea-postgres pg_dump -U gitea gitea > gitea_backup_$(date +%Y%m%d).sql
|
|
|
|
# Restaurar
|
|
cat gitea_backup_YYYYMMDD.sql | docker exec -i gitea-postgres psql -U gitea gitea
|
|
```
|
|
|
|
### Backup de Repositorios y Datos
|
|
|
|
```bash
|
|
# Backup completo de datos
|
|
sudo tar -czf gitea-data-backup-$(date +%Y%m%d).tar.gz /opt/gitea/data
|
|
|
|
# Restaurar
|
|
sudo tar -xzf gitea-data-backup-YYYYMMDD.tar.gz -C /
|
|
```
|
|
|
|
### Backup Automático
|
|
|
|
Considera usar el comando nativo de Gitea:
|
|
|
|
```bash
|
|
docker exec -u git gitea gitea dump -c /data/gitea/conf/app.ini
|
|
```
|
|
|
|
Esto crea un archivo `gitea-dump-*.zip` con todo lo necesario para restaurar.
|
|
|
|
## 🔄 Actualizaciones
|
|
|
|
1. **Backup primero**: Siempre haz backup antes de actualizar
|
|
2. Actualiza la versión en `stack.env`:
|
|
```env
|
|
GITEA_IMAGE=gitea/gitea:1.21.0
|
|
```
|
|
3. Actualiza el stack en Portainer
|
|
4. Verifica los logs: `docker logs gitea`
|
|
5. Prueba que todo funciona correctamente
|
|
|
|
## 📊 Monitoreo
|
|
|
|
### Ver Estadísticas
|
|
|
|
- Accede a **Site Administration** → **Dashboard**
|
|
- Revisa usuarios, repositorios, organizaciones, etc.
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# Logs de Gitea
|
|
docker logs -f gitea
|
|
|
|
# Logs de PostgreSQL
|
|
docker logs -f gitea-postgres
|
|
|
|
# Logs del Runner
|
|
docker logs -f gitea-act-runner
|
|
```
|
|
|
|
### Métricas
|
|
|
|
Gitea soporta exportación de métricas para Prometheus:
|
|
|
|
1. Habilita métricas en `stack.env`:
|
|
```env
|
|
GITEA__metrics__ENABLED=true
|
|
GITEA__metrics__TOKEN=tu-token-secreto
|
|
```
|
|
|
|
2. Las métricas estarán disponibles en: `https://git.tudominio.com/metrics?token=tu-token-secreto`
|