This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "suite-logs",
|
||||
"description": "Stack de monitoreo con Grafana, Prometheus, Loki, Tempo y Alloy",
|
||||
"type": "docker-compose",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"buildCommand": "docker-compose pull",
|
||||
"deployCommand": "docker-compose up -d",
|
||||
"healthCheckPath": "/",
|
||||
"healthCheckPort": 3500,
|
||||
"healthCheckProtocol": "http",
|
||||
"environment": {
|
||||
"COMPOSE_PROJECT_NAME": "suite-logs"
|
||||
},
|
||||
"services": [
|
||||
{
|
||||
"name": "grafana",
|
||||
"port": 3500,
|
||||
"protocol": "http",
|
||||
"path": "/"
|
||||
},
|
||||
{
|
||||
"name": "prometheus",
|
||||
"port": 9090,
|
||||
"protocol": "http",
|
||||
"path": "/"
|
||||
},
|
||||
{
|
||||
"name": "loki",
|
||||
"port": 3100,
|
||||
"protocol": "http",
|
||||
"path": "/"
|
||||
},
|
||||
{
|
||||
"name": "tempo",
|
||||
"port": 3200,
|
||||
"protocol": "http",
|
||||
"path": "/"
|
||||
},
|
||||
{
|
||||
"name": "alloy",
|
||||
"port": 12345,
|
||||
"protocol": "http",
|
||||
"path": "/"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# Configuración de autenticación para Grafana
|
||||
# IMPORTANTE: Cambia estos valores por credenciales seguras
|
||||
GRAFANA_ADMIN_USER=admin
|
||||
GRAFANA_ADMIN_PASSWORD=cambiar_por_contraseña_segura
|
||||
|
||||
# Configuración de red
|
||||
# Puertos donde se expondrán los servicios
|
||||
GRAFANA_PORT=3500
|
||||
PROMETHEUS_PORT=9090
|
||||
LOKI_PORT=3100
|
||||
TEMPO_PORT=3200
|
||||
ALLOY_PORT=12345
|
||||
ALLOY_UI_PORT=12345
|
||||
|
||||
# Configuración de volúmenes
|
||||
# Rutas donde se almacenarán los datos persistentes
|
||||
PROMETHEUS_DATA_PATH=./data/prometheus
|
||||
LOKI_DATA_PATH=./data/loki
|
||||
TEMPO_DATA_PATH=./data/tempo
|
||||
ALLOY_DATA_PATH=./data/alloy
|
||||
GRAFANA_DATA_PATH=./data/grafana
|
||||
|
||||
# Configuración de Alloy
|
||||
ALLOY_HOSTNAME=alloy
|
||||
|
||||
# Configuración del proyecto
|
||||
COMPOSE_PROJECT_NAME=suite-logs
|
||||
|
||||
# INSTRUCCIONES:
|
||||
# 1. Copia este archivo a .env: cp .env.example .env
|
||||
# 2. Edita .env y cambia GRAFANA_ADMIN_PASSWORD por una contraseña segura
|
||||
# 3. Opcionalmente modifica los puertos si hay conflictos
|
||||
# 4. Nunca subas el archivo .env al repositorio (ya está en .gitignore)
|
||||
@@ -0,0 +1,35 @@
|
||||
name: Deploy to Coolify
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Deploy to Coolify
|
||||
run: |
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"deploymentUuid": "${{ secrets.COOLIFY_DEPLOYMENT_UUID }}",
|
||||
"gitCommitSha": "${{ github.sha }}",
|
||||
"gitBranch": "${{ github.ref_name }}"
|
||||
}' \
|
||||
${{ secrets.COOLIFY_WEBHOOK_URL }}
|
||||
|
||||
- name: Notify deployment
|
||||
if: always()
|
||||
run: |
|
||||
if [ "${{ job.status }}" == "success" ]; then
|
||||
echo "✅ Deployment successful"
|
||||
else
|
||||
echo "❌ Deployment failed"
|
||||
fi
|
||||
@@ -9,4 +9,10 @@ wheels/
|
||||
# Virtual environments
|
||||
.venv
|
||||
|
||||
# Data directories
|
||||
data
|
||||
|
||||
# Environment variables (contienen credenciales)
|
||||
.env
|
||||
.env.local
|
||||
.env.production
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
# Configuración de Despliegue Automático
|
||||
|
||||
Este documento explica cómo configurar el despliegue automático desde Gitea a Coolify.
|
||||
|
||||
## Pasos de Configuración
|
||||
|
||||
### 1. En Gitea
|
||||
|
||||
1. Ve a tu repositorio en Gitea
|
||||
2. Habilita Gitea Actions si no está habilitado
|
||||
3. Configura los siguientes secrets en Settings → Secrets:
|
||||
- `COOLIFY_TOKEN`: Token de API de Coolify
|
||||
- `COOLIFY_WEBHOOK_URL`: URL del webhook de Coolify
|
||||
- `COOLIFY_DEPLOYMENT_UUID`: UUID del deployment en Coolify
|
||||
|
||||
### 2. En Coolify
|
||||
|
||||
1. **Crear nuevo proyecto:**
|
||||
- Nombre: `suite-logs`
|
||||
- Tipo: Docker Compose
|
||||
- Repositorio: URL de tu repositorio en Gitea
|
||||
|
||||
2. **Configurar Source:**
|
||||
- Branch: `master` (o `main`)
|
||||
- Auto Deploy: Habilitado
|
||||
- Dockerfile/Compose path: `docker-compose.yml`
|
||||
|
||||
3. **Variables de entorno:**
|
||||
```env
|
||||
COMPOSE_PROJECT_NAME=suite-logs
|
||||
```
|
||||
|
||||
4. **Configurar dominios/puertos:**
|
||||
- Grafana: puerto 3500
|
||||
- Prometheus: puerto 9090
|
||||
- Loki: puerto 3100
|
||||
- Tempo: puerto 3200
|
||||
- Alloy: puerto 12345
|
||||
|
||||
5. **Obtener webhook URL:**
|
||||
- Ve a la configuración del proyecto
|
||||
- Copia la URL del webhook
|
||||
- Úsala como `COOLIFY_WEBHOOK_URL` en Gitea
|
||||
|
||||
### 3. Configuración de Red
|
||||
|
||||
Asegúrate de que Coolify tenga acceso a:
|
||||
- Puerto 3500 (Grafana)
|
||||
- Puerto 9090 (Prometheus)
|
||||
- Puerto 3100 (Loki)
|
||||
- Puerto 3200 (Tempo)
|
||||
- Puerto 12345 (Alloy)
|
||||
|
||||
### 4. Monitoreo de Despliegues
|
||||
|
||||
El pipeline de Gitea Actions:
|
||||
- Se ejecuta automáticamente en push a master/main
|
||||
- Envía webhook a Coolify para iniciar despliegue
|
||||
- Reporta estado del despliegue
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Pipeline falla
|
||||
1. Verifica que los secrets estén configurados correctamente
|
||||
2. Revisa logs en Gitea Actions
|
||||
3. Verifica conectividad entre Gitea y Coolify
|
||||
|
||||
### Despliegue falla en Coolify
|
||||
1. Revisa logs en Coolify dashboard
|
||||
2. Verifica que docker-compose.yml sea válido
|
||||
3. Asegúrate de que los volúmenes tengan permisos correctos
|
||||
|
||||
### Servicios no se conectan
|
||||
1. Verifica configuración de red en docker-compose.yml
|
||||
2. Revisa logs de cada servicio
|
||||
3. Verifica que los archivos de configuración existan
|
||||
|
||||
## Comandos Útiles
|
||||
|
||||
```bash
|
||||
# Verificar estado local
|
||||
docker-compose ps
|
||||
|
||||
# Ver logs de todos los servicios
|
||||
docker-compose logs -f
|
||||
|
||||
# Reiniciar servicios específicos
|
||||
docker-compose restart grafana
|
||||
|
||||
# Limpiar y reiniciar todo
|
||||
docker-compose down && docker-compose up -d
|
||||
```
|
||||
|
||||
## URLs de Acceso Post-Despliegue
|
||||
|
||||
Una vez desplegado en Coolify:
|
||||
- **Grafana**: https://tu-dominio.com/grafana (o puerto configurado)
|
||||
- **Prometheus**: https://tu-dominio.com/prometheus
|
||||
- **Loki**: https://tu-dominio.com/loki
|
||||
- **Tempo**: https://tu-dominio.com/tempo
|
||||
- **Alloy**: https://tu-dominio.com/alloy
|
||||
|
||||
## Secrets Necesarios en Gitea
|
||||
|
||||
```yaml
|
||||
# En Settings → Secrets de tu repositorio
|
||||
COOLIFY_TOKEN: "tu_token_de_coolify_api"
|
||||
COOLIFY_WEBHOOK_URL: "https://coolify.tudominio.com/webhooks/deploy/uuid"
|
||||
COOLIFY_DEPLOYMENT_UUID: "uuid-de-tu-deployment"
|
||||
```
|
||||
@@ -28,7 +28,7 @@ Todos en la carpeta **"Observability Stack"** en Grafana:
|
||||
## Acceso
|
||||
|
||||
- URL: http://localhost:3500
|
||||
- Usuario: `admin`
|
||||
- Contraseña: `admin123`
|
||||
- Usuario: Ver `GRAFANA_ADMIN_USER` en `.env`
|
||||
- Contraseña: Ver `GRAFANA_ADMIN_PASSWORD` en `.env`
|
||||
|
||||
Los dashboards se actualizan automáticamente cada 10 segundos si modificas los archivos JSON.
|
||||
@@ -8,9 +8,21 @@ Esta configuraci�n incluye un stack completo de monitoreo con:
|
||||
## Estructura de Archivos
|
||||
|
||||
|
||||
## Uso
|
||||
## Configuración Inicial
|
||||
|
||||
### Iniciar los servicios
|
||||
### 1. Configurar variables de entorno
|
||||
|
||||
```bash
|
||||
# Copiar archivo de ejemplo
|
||||
cp .env.example .env
|
||||
|
||||
# Editar archivo .env y cambiar la contraseña de Grafana
|
||||
nano .env
|
||||
```
|
||||
|
||||
**IMPORTANTE**: Cambia `GRAFANA_ADMIN_PASSWORD` por una contraseña segura.
|
||||
|
||||
### 2. Iniciar los servicios
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
@@ -40,8 +52,8 @@ docker-compose down
|
||||
## Acceso a los Servicios
|
||||
|
||||
- **Grafana**: http://localhost:3500
|
||||
- Usuario: `admin`
|
||||
- Contrase�a: `admin123`
|
||||
- Usuario: Ver `GRAFANA_ADMIN_USER` en `.env`
|
||||
- Contrase�a: Ver `GRAFANA_ADMIN_PASSWORD` en `.env`
|
||||
|
||||
- **Prometheus**: http://localhost:9090
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@ type = sqlite3
|
||||
path = /var/lib/grafana/grafana.db
|
||||
|
||||
[security]
|
||||
# Usuario administrador por defecto
|
||||
admin_user = admin
|
||||
# Contraseña administrador por defecto
|
||||
admin_password = admin123
|
||||
# Usuario administrador por defecto (se sobrescribe con variables de entorno)
|
||||
# admin_user = admin
|
||||
# Contraseña administrador por defecto (se sobrescribe con variables de entorno)
|
||||
# admin_password = admin123
|
||||
# Clave secreta para cookies
|
||||
secret_key = your_secret_key_here
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de despliegue para Coolify
|
||||
# Este script se ejecuta cuando Coolify despliega la aplicación
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Iniciando despliegue de Suite Logs..."
|
||||
|
||||
# Verificar que Docker Compose esté disponible
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
echo "❌ Docker Compose no está instalado"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar que el archivo docker-compose.yml existe
|
||||
if [ ! -f "docker-compose.yml" ]; then
|
||||
echo "❌ No se encuentra docker-compose.yml"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Detener servicios existentes
|
||||
echo "⏹️ Deteniendo servicios existentes..."
|
||||
docker-compose down --remove-orphans || true
|
||||
|
||||
# Limpiar imágenes antiguas
|
||||
echo "🧹 Limpiando imágenes antiguas..."
|
||||
docker image prune -f || true
|
||||
|
||||
# Descargar nuevas imágenes
|
||||
echo "📥 Descargando nuevas imágenes..."
|
||||
docker-compose pull
|
||||
|
||||
# Crear directorios necesarios si no existen
|
||||
echo "📁 Verificando directorios..."
|
||||
mkdir -p config/{prometheus,loki,tempo,alloy,grafana/provisioning}
|
||||
|
||||
# Iniciar servicios
|
||||
echo "▶️ Iniciando servicios..."
|
||||
docker-compose up -d
|
||||
|
||||
# Verificar que los servicios estén corriendo
|
||||
echo "🔍 Verificando servicios..."
|
||||
sleep 10
|
||||
|
||||
# Health checks
|
||||
services=("prometheus:9090" "loki:3100" "tempo:3200" "alloy:12345" "grafana:3500")
|
||||
for service in "${services[@]}"; do
|
||||
name=${service%%:*}
|
||||
port=${service##*:}
|
||||
|
||||
if docker-compose ps | grep -q "$name.*Up"; then
|
||||
echo "✅ $name está corriendo"
|
||||
else
|
||||
echo "❌ $name no está corriendo"
|
||||
docker-compose logs "$name"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "🎉 Despliegue completado exitosamente!"
|
||||
echo "📊 Grafana: http://localhost:3500 (credenciales en .env)"
|
||||
echo "📈 Prometheus: http://localhost:9090"
|
||||
echo "📝 Loki: http://localhost:3100"
|
||||
echo "🔍 Tempo: http://localhost:3200"
|
||||
echo "🔧 Alloy: http://localhost:12345"
|
||||
+8
-8
@@ -4,7 +4,7 @@ services:
|
||||
image: prom/prometheus:latest
|
||||
container_name: prometheus
|
||||
ports:
|
||||
- "9090:9090"
|
||||
- "${PROMETHEUS_PORT:-9090}:9090"
|
||||
volumes:
|
||||
- ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus_data:/prometheus
|
||||
@@ -24,7 +24,7 @@ services:
|
||||
image: grafana/loki:latest
|
||||
container_name: loki
|
||||
ports:
|
||||
- "3100:3100"
|
||||
- "${LOKI_PORT:-3100}:3100"
|
||||
volumes:
|
||||
- ./config/loki/loki.yaml:/etc/loki/local-config.yaml
|
||||
- loki_data:/loki
|
||||
@@ -38,7 +38,7 @@ services:
|
||||
image: grafana/tempo:latest
|
||||
container_name: tempo
|
||||
ports:
|
||||
- "3200:3200" # Solo puerto de consulta, sin endpoints de recepción
|
||||
- "${TEMPO_PORT:-3200}:3200" # Solo puerto de consulta, sin endpoints de recepción
|
||||
volumes:
|
||||
- ./config/tempo/tempo.yaml:/etc/tempo/tempo.yaml
|
||||
- tempo_data:/var/tempo
|
||||
@@ -53,7 +53,7 @@ services:
|
||||
image: grafana/alloy:latest
|
||||
container_name: alloy
|
||||
ports:
|
||||
- "12345:12345" # Puerto para la UI de Alloy
|
||||
- "${ALLOY_UI_PORT:-12345}:12345" # Puerto para la UI de Alloy
|
||||
# Puertos para métricas
|
||||
- "9999:9999" # HTTP receiver para métricas externas
|
||||
# Puertos para logs
|
||||
@@ -80,7 +80,7 @@ services:
|
||||
- --server.http.listen-addr=0.0.0.0:12345
|
||||
- /etc/alloy/config.river
|
||||
environment:
|
||||
- ALLOY_HOSTNAME=alloy
|
||||
- ALLOY_HOSTNAME=${ALLOY_HOSTNAME:-alloy}
|
||||
networks:
|
||||
- monitoring
|
||||
restart: unless-stopped
|
||||
@@ -94,10 +94,10 @@ services:
|
||||
image: grafana/grafana:latest
|
||||
container_name: grafana
|
||||
ports:
|
||||
- "3500:3000"
|
||||
- "${GRAFANA_PORT:-3500}:3000"
|
||||
environment:
|
||||
- GF_SECURITY_ADMIN_USER=admin
|
||||
- GF_SECURITY_ADMIN_PASSWORD=admin123
|
||||
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin}
|
||||
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin123}
|
||||
- GF_PATHS_DATA=/var/lib/grafana
|
||||
- GF_PATHS_LOGS=/var/log/grafana
|
||||
- GF_PATHS_PLUGINS=/var/lib/grafana/plugins
|
||||
|
||||
Reference in New Issue
Block a user