Refactor: Use Gitea Secrets for fully automated deployment
All checks were successful
deploy-tunnel / deploy (push) Successful in 4s
All checks were successful
deploy-tunnel / deploy (push) Successful in 4s
- Workflow ahora crea .env y credentials.json desde secrets - Eliminado setup-ci.sh (ya no es necesario) - No requiere setup manual en el servidor - Workflow verifica/crea la red Docker 'principal' - README actualizado con instrucciones de configuración de secrets Configuración requerida en Gitea Settings > Secrets: - TUNNEL_ID: El ID del tunnel de Cloudflare - TUNNEL_CREDENTIALS: El contenido completo de credentials.json
This commit is contained in:
@@ -9,19 +9,38 @@ jobs:
|
||||
deploy:
|
||||
runs-on: docker
|
||||
env:
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
TUNNEL_ID: ${{ secrets.TUNNEL_ID }}
|
||||
TUNNEL_CREDENTIALS: ${{ secrets.TUNNEL_CREDENTIALS }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Check and setup tunnel if needed
|
||||
run: ./setup-ci.sh
|
||||
- name: Create .env file from secrets
|
||||
run: |
|
||||
cat > .env << EOF
|
||||
TUNNEL_ID=${{ secrets.TUNNEL_ID }}
|
||||
EOF
|
||||
|
||||
- name: Create credentials.json from secret
|
||||
run: |
|
||||
echo '${{ secrets.TUNNEL_CREDENTIALS }}' > credentials.json
|
||||
|
||||
- name: Verify tunnel configuration
|
||||
run: |
|
||||
if [ ! -f credentials.json ] || [ ! -f .env ]; then
|
||||
echo "❌ Error: credentials.json o .env no se crearon correctamente"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Archivos de configuración creados desde secrets"
|
||||
|
||||
- name: Ensure external docker network exists
|
||||
run: |
|
||||
docker network inspect principal >/dev/null 2>&1 || docker network create principal
|
||||
|
||||
- name: Pull fresh cloudflared image
|
||||
run: docker compose pull
|
||||
|
||||
- name: Clean up stack
|
||||
run: docker compose --project-name cloudflared-tunnel down
|
||||
run: docker compose --project-name cloudflared-tunnel down || true
|
||||
|
||||
- name: Update stack
|
||||
run: docker compose --project-name cloudflared-tunnel up -d --remove-orphans --wait
|
||||
|
||||
69
README.md
69
README.md
@@ -150,44 +150,63 @@ El contenedor se conecta a la red `principal` para poder comunicarse con Traefik
|
||||
Este repositorio incluye un workflow de Gitea Actions (`.gitea/workflows/deploy.yml`) que automáticamente despliega el tunnel cuando haces push a `main`.
|
||||
|
||||
**¿Qué hace el workflow?**
|
||||
1. Ejecuta `setup-ci.sh` para verificar que existan `credentials.json` y `.env`
|
||||
2. Descarga la última imagen de `cloudflare/cloudflared`
|
||||
3. Detiene el stack actual
|
||||
4. Levanta el stack actualizado
|
||||
5. Muestra los logs del tunnel
|
||||
1. Crea `.env` y `credentials.json` desde Gitea Secrets
|
||||
2. Verifica que la red Docker `principal` exista (la crea si no)
|
||||
3. Descarga la última imagen de `cloudflare/cloudflared`
|
||||
4. Detiene el stack actual
|
||||
5. Levanta el stack actualizado
|
||||
6. Muestra los logs del tunnel
|
||||
|
||||
### Setup inicial para CI/CD
|
||||
### Configurar Secrets en Gitea
|
||||
|
||||
**Primera vez en el servidor donde corre el gitea-runner:**
|
||||
**Paso 1: Crear el tunnel y obtener las credenciales**
|
||||
|
||||
En tu PC local (o donde prefieras):
|
||||
|
||||
```bash
|
||||
# 1. El runner clonará el repo automáticamente en su workspace
|
||||
# 2. SSH al servidor y navega al workspace del runner
|
||||
cd /ruta/donde/runner/clona/el/repo
|
||||
# Clonar el repo
|
||||
git clone https://gitea.nucleoriofrio.com/nucleo000/cloudflareTunnel.git
|
||||
cd cloudflareTunnel
|
||||
|
||||
# 3. Ejecuta setup.sh UNA SOLA VEZ (requiere login interactivo)
|
||||
# Ejecutar setup para crear el tunnel
|
||||
./setup.sh
|
||||
```
|
||||
|
||||
El script creará `credentials.json` y `.env` que **persisten** en el workspace del runner entre ejecuciones.
|
||||
Esto genera:
|
||||
- `credentials.json` - Contiene las credenciales del tunnel
|
||||
- `.env` - Contiene el TUNNEL_ID
|
||||
|
||||
**De ahí en adelante:**
|
||||
- Cada `git push` ejecuta el workflow automáticamente
|
||||
- `setup-ci.sh` verifica que los archivos existan
|
||||
- Si existen, continúa con el deploy
|
||||
- Si no existen, el workflow falla con instrucciones
|
||||
|
||||
### (Opcional) Variables de entorno en Gitea Secrets
|
||||
|
||||
Puedes configurar secrets en Gitea para el workflow (aunque actualmente no son necesarios con el enfoque de setup manual):
|
||||
**Paso 2: Configurar los secrets en Gitea**
|
||||
|
||||
Ve a tu repositorio en Gitea:
|
||||
```
|
||||
Settings > Secrets > Actions:
|
||||
- CLOUDFLARE_ACCOUNT_ID: tu-account-id
|
||||
- CLOUDFLARE_API_TOKEN: tu-api-token
|
||||
Settings > Secrets > Actions
|
||||
```
|
||||
|
||||
**Nota**: `credentials.json` y `.env` se generan localmente y NO se commitean al repo (están en `.gitignore`), por seguridad.
|
||||
Agrega estos **2 secrets**:
|
||||
|
||||
1. **`TUNNEL_ID`** (tipo: Secret)
|
||||
```bash
|
||||
# Obtén el valor de .env
|
||||
cat .env
|
||||
# Copia el valor después de TUNNEL_ID=
|
||||
```
|
||||
|
||||
2. **`TUNNEL_CREDENTIALS`** (tipo: Secret)
|
||||
```bash
|
||||
# Copia TODO el contenido de credentials.json
|
||||
cat credentials.json
|
||||
# Debe ser un JSON válido que empiece con { y termine con }
|
||||
```
|
||||
|
||||
**Paso 3: ¡Listo!**
|
||||
|
||||
Ahora cada `git push` a `main` desplegará automáticamente el tunnel usando los secrets configurados.
|
||||
|
||||
**Importante:**
|
||||
- No necesitas ejecutar nada manualmente en el servidor
|
||||
- Los secrets están seguros en Gitea
|
||||
- `credentials.json` y `.env` NUNCA se commitean al repo (están en `.gitignore`)
|
||||
|
||||
## ✅ Verificación
|
||||
|
||||
|
||||
50
setup-ci.sh
50
setup-ci.sh
@@ -1,50 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Setup no interactivo para CI/CD (Gitea Actions)
|
||||
# Usa Cloudflare API Token en vez de login interactivo
|
||||
|
||||
set -e
|
||||
|
||||
TUNNEL_NAME="nucleorio-tunnel"
|
||||
DOMAIN="nucleoriofrio.com"
|
||||
ACCOUNT_ID="${CLOUDFLARE_ACCOUNT_ID}"
|
||||
API_TOKEN="${CLOUDFLARE_API_TOKEN}"
|
||||
|
||||
echo "🤖 Cloudflare Tunnel CI Setup"
|
||||
echo "=============================="
|
||||
echo ""
|
||||
|
||||
# Verificar variables de entorno
|
||||
if [ -z "$ACCOUNT_ID" ]; then
|
||||
echo "❌ CLOUDFLARE_ACCOUNT_ID no está configurado"
|
||||
echo " Configúralo en Gitea: Settings > Secrets"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$API_TOKEN" ]; then
|
||||
echo "❌ CLOUDFLARE_API_TOKEN no está configurado"
|
||||
echo " Configúralo en Gitea: Settings > Secrets"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar si ya existen los archivos
|
||||
if [ -f "credentials.json" ] && [ -f ".env" ]; then
|
||||
echo "✓ credentials.json y .env ya existen"
|
||||
TUNNEL_ID=$(jq -r '.TunnelID' credentials.json 2>/dev/null || echo "")
|
||||
|
||||
if [ -n "$TUNNEL_ID" ]; then
|
||||
echo "✓ TUNNEL_ID: $TUNNEL_ID"
|
||||
echo "✓ Setup ya está completo, no se requiere acción"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "⚠️ Archivos de configuración no encontrados"
|
||||
echo ""
|
||||
echo "Para CI/CD automatizado necesitas:"
|
||||
echo "1. Ejecutar ./setup.sh manualmente UNA VEZ en el servidor"
|
||||
echo "2. Esto genera credentials.json y .env"
|
||||
echo "3. Estos archivos persisten entre deploys del runner"
|
||||
echo ""
|
||||
echo "El workflow automáticamente los usará en futuros deploys."
|
||||
echo ""
|
||||
exit 1
|
||||
Reference in New Issue
Block a user