Tutorial Práctico: Implementación de Flooky AI desde Cero
Este tutorial documenta paso a paso cómo implementar Flooky AI, un chat de IA privado basado en la API de Claude, desde la creación de cuentas hasta el despliegue completo.
📋 Índice
- Creación de la cuenta Azure
- Configuración del proyecto en Azure DevOps
- Creación de los repositorios
- Instalación y configuración del agente de pipeline en WSL
- Despliegue de la infraestructura con Terraform
- Crear y configurar SonarQube localmente
- Despliegue de la aplicación Flooky AI
- Configuración del dominio y correo electrónico
- Configuración de Grafana y alertas en Slack
1. Creación de la cuenta Azure
1.1. Registro en el portal de Azure
- Abre portal.azure.com y selecciona "Crear una cuenta gratuita"
- Regístrate con tu dirección de correo electrónico personal
- Introduce tus datos personales y de facturación
- Verifica tu identidad a través de SMS
- Proporciona tu tarjeta de crédito para verificación (no habrá cargos iniciales)
1.2. Creación del grupo de recursos
Una vez dentro del portal:
- En el panel lateral izquierdo, haz clic en "Grupos de recursos"
- Haz clic en "+ Crear"
- Completa la información:
- Suscripción: Selecciona tu suscripción
-
Grupo de recursos:
Anass-rg
-
Región:
West Europe
- Haz clic en "Revisar + crear" y luego en "Crear"
También puedes usar Azure CLI si prefieres la línea de comandos:
az login
az group create --name flooky-ai-rg --location westeurope
2. Configuración del proyecto en Azure DevOps
2.1. Creación de la organización y el proyecto
- Accede a dev.azure.com e inicia sesión con la misma cuenta de Microsoft
- Crea una nueva organización:
- Haz clic en "New organization"
- Nombra la organización: "FlookyAI"
- Selecciona la ubicación del host: "West Europe"
- Dentro de la organización, crea un nuevo proyecto:
- Haz clic en "New project"
-
Nombre:
FlookyAI
-
Visibilidad:
Private
-
Control de versiones:
Git
-
Metodología de trabajo:
Agile
- Haz clic en "Create project"
2.2. Generación del PAT (Personal Access Token)
Para permitir la conexión del agente de pipeline:
- Haz clic en tu avatar en la esquina superior derecha
- Selecciona "Personal Access Tokens"
- Selecciona "New Token"
- Configura el token con:
-
Nombre:
"FlookyAI-Pipeline-Agent"
-
Organización:
FlookyAI
-
Expiración:
120 días
-
Scope:
Custom defined
-
Agent Pools:
Read & manage
-
Build:
Read & execute
-
Code:
Read & write
-
Service Connections:
Read & query
-
Nombre:
- Copia y guarda el token generado en un lugar seguro (solo se muestra una vez)
💡 Nota: Puedes generar más PAT para otras herramientas según sea necesario.
3. Creación de los repositorios
3.1. Repositorio principal FlookyAI
- En Azure DevOps, ve a "Repos" > "Files"
- Inicializa el repositorio con un README
- Crea la aplicación IA en este repositorio
La aplicación está disponible en mi repositorio GitHub. Puedes clonar el repositorio con este comando:
git clone https://github.com/ciscoAnass/Flooky-AI.git
- Crea el archivo
azure-pipelines.yml
para CI/CD:
Configuración Inicial
trigger:
- main
pool:
name: Default
variables:
webAppName: 'Flooky-WebApp'
azureSubscription: 'SC-SlothAI'
pythonVersion: '3.10'
Explicación:
- El pipeline se activa automáticamente cuando hay cambios en la rama
main
- Se ejecuta en el grupo de agentes predeterminado
- Define tres variables importantes: nombre de la app web, la conexión de servicio de Azure, y la versión de Python a usar
Etapa 1: Build
- stage: Build
displayName: 'Build stage'
jobs:
- job: BuildJob
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
addToPath: true
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
displayName: 'Archive project files'
- task: PublishBuildArtifacts@1
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
publishLocation: 'Container'
displayName: 'Publish artifacts'
Explicación:
- Esta etapa prepara el código para el despliegue
- Configura el entorno con Python 3.10
- Actualiza pip e instala todas las dependencias del proyecto
- Crea un archivo ZIP con todos los archivos del proyecto
- Publica este ZIP como un "artefacto" llamado "drop" para usarlo en las siguientes etapas
Etapa 2: Analysis
- stage: Analysis
displayName: 'SonarQube'
dependsOn: Build
condition: succeeded()
jobs:
- job: SonarQube
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
addToPath: true
- script: |
pip install -r requirements.txt
pip install pytest pytest-cov
pytest --cov=. --cov-report=xml
displayName: 'Setup and Test'
- task: SonarQubePrepare@7
inputs:
SonarQube: 'SonarQube-Local'
scannerMode: 'CLI'
configMode: 'manual'
projectKey: 'FlookyAI_FlookyAI_acddf0f9-4761-4ebd-ba6b-e2bf470dfcaf'
projectName: 'FlookyAI'
extraProperties: |
sonar.sources=.
sonar.python.coverage.reportPaths=coverage.xml
sonar.exclusions=**/*.pyc,**/__pycache__/**,**/tests/**
- task: SonarQubeAnalyze@7
- task: SonarQubePublish@7
inputs:
pollingTimeoutSec: '300'
Explicación:
- Esta etapa analiza la calidad del código usando SonarQube
- Solo se ejecuta si la etapa de Build fue exitosa
- Configura Python y reinstala las dependencias
- Prepara SonarQube con la configuración necesaria para analizar el código Python
- Ejecuta las pruebas del proyecto y genera un informe de cobertura
- Realiza el análisis de código y publica los resultados en SonarQube
- Excluye archivos innecesarios como bytecode de Python y permite enfocarse en el código fuente real
Etapa 3: Deploy
- stage: Deploy
displayName: 'Deploy stage'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeployJob
displayName: 'Deploy to Azure Web App'
environment: 'production'
strategy:
runOnce:
deploy:
steps:
# Deploy to Azure Web App
- task: AzureWebApp@1
inputs:
azureSubscription: '$(azureSubscription)'
appType: 'webAppLinux'
appName: '$(webAppName)'
package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
runtimeStack: 'PYTHON|3.10'
startupCommand: 'pip install -r requirements.txt && pip install gunicorn && gunicorn --bind=0.0.0.0:8000 app:app'
displayName: 'Deploy to Azure Web App'
Explicación:
- Esta etapa despliega la aplicación en Azure Web App
- Solo se ejecuta si la etapa de Build fue exitosa
- Define que se está desplegando en el entorno de "producción"
- Usa la tarea AzureWebApp para subir el archivo ZIP a la aplicación web de Azure
- Configura la aplicación para usar Python 3.10 en Linux
- Establece un comando de inicio que:
- Instala las dependencias del proyecto
- Instala el servidor web Gunicorn
- Inicia la aplicación usando Gunicorn en el puerto 8000
- La aplicación queda desplegada y funcionando en Azure
3.2. Repositorio de infraestructura
-
En Azure DevOps, crea un nuevo repositorio:
- Haz clic en el nombre del repositorio actual > "New repository"
-
Nombre:
FlookyAI-Infrastructure
-
Tipo:
Git
- Añadir README: Marcado
- Haz clic en "Create"
Crea el archivo
main.tf
:
data "azurerm_resource_group" "rg" {
name = "Anass-RG"
}
resource "azurerm_service_plan" "anass-webapp-plan" {
name = "Flooky-plan"
location = data.azurerm_resource_group.rg.location
resource_group_name = data.azurerm_resource_group.rg.name
os_type = "Linux"
sku_name = "B2"
}
resource "azurerm_linux_web_app" "FlookyAIWebApp" {
name = "Flooky-WebApp"
resource_group_name = data.azurerm_resource_group.rg.name
location = data.azurerm_resource_group.rg.location
service_plan_id = azurerm_service_plan.anass-webapp-plan.id
site_config {
application_stack {
python_version = "3.9"
}
always_on = true
}
}
Este archivo Terraform (main.tf
) configura recursos en Azure:
- Utiliza un grupo de recursos existente llamado "Anass-RG"
- Crea un plan de servicio llamado "Flooky-plan" con tipo Linux y SKU B2
- Crea una aplicación web Linux llamada "Flooky-WebApp" que:
- Usa el plan de servicio creado anteriormente
- Configura Python 3.9 como entorno de ejecución
- Mantiene la aplicación siempre activa (always on)
En resumen: es un script de infraestructura como código que despliega una aplicación web Python en Azure usando un grupo de recursos existente.
- Crea el archivo
provider.tf
:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "4.8.0"
}
}
backend "azurerm" {
}
}
provider "azurerm" {
features {}
skip_provider_registration = true
}
Este fragmento de código Terraform configura:
- El proveedor de Azure (azurerm) indicando que se usará la versión 4.8.0 del proveedor de HashiCorp
- Un backend de estado remoto en Azure (donde Terraform guardará el estado de la infraestructura), aunque los detalles específicos del backend no están definidos en este fragmento
- La configuración del proveedor Azure con opciones básicas:
-
features {}
activa características predeterminadas -
skip_provider_registration = true
evita que Terraform intente registrar los proveedores de recursos en Azure
-
En resumen: este código establece la configuración necesaria para que Terraform pueda conectarse y gestionar recursos en Azure, usando un estado remoto almacenado también en Azure.
- Crea el archivo
azure-pipelines.yml
para CI/CD:
Configuración Inicial
trigger:
- main
pool:
name: Default
Explicación:
- El pipeline se activa automáticamente cuando hay cambios en la rama
main
- Se ejecuta en el grupo de agentes predeterminado
Paso 1: Instalación de Terraform
- task: TerraformInstaller@1
inputs:
terraformVersion: 'latest'
displayName: 'Instalar Terraform'
Explicación:
- Instala la última versión de Terraform en el agente
- Esta herramienta es necesaria para ejecutar los comandos de infraestructura como código
Paso 2: Inicialización de Terraform
- task: TerraformTaskV4@4
inputs:
provider: 'azurerm'
command: 'init'
backendServiceArm: 'SC-SlothAI'
backendAzureRmResourceGroupName: 'Anass-RG'
backendAzureRmStorageAccountName: 'flookystorage'
backendAzureRmContainerName: 'flookycontainer'
backendAzureRmKey: 'terraform.tfstate'
displayName: 'Terraform Init'
Explicación:
- Inicializa Terraform (
terraform init
) para preparar el entorno de trabajo - Configura el backend remoto en Azure para guardar el estado de la infraestructura:
- Usa la conexión de servicio 'SC-SlothAI' para autenticarse
- Almacena el estado en el grupo de recursos 'Anass-RG'
- Usa la cuenta de almacenamiento 'flookystorage'
- Guarda el archivo de estado en el contenedor 'flookycontainer'
- Nombra el archivo de estado como 'terraform.tfstate'
Paso 3: Plan de Terraform
- task: TerraformTaskV4@4
inputs:
provider: 'azurerm'
command: 'plan'
environmentServiceNameAzureRM: 'SC-SlothAI'
displayName: 'Terraform Plan'
Explicación:
- Ejecuta
terraform plan
para crear un plan de los cambios a realizar - Este paso muestra qué recursos se crearán, modificarán o eliminarán
- Usa la conexión de servicio 'SC-SlothAI' para autenticarse con Azure
Paso 4: Aplicación de Terraform
- task: TerraformTaskV4@4
inputs:
provider: 'azurerm'
command: 'apply'
environmentServiceNameAzureRM: 'SC-SlothAI'
displayName: 'Terraform Apply'
Explicación:
- Ejecuta
terraform apply
para implementar los cambios en la infraestructura - Este paso crea o actualiza los recursos definidos en los archivos de Terraform
- Usa la conexión de servicio 'SC-SlothAI' para autenticarse con Azure
- Implementa automáticamente la infraestructura sin intervención manual
4. Instalación y configuración del agente de pipeline en WSL
4.1. Instalación de WSL en Windows
- Abre PowerShell como administrador y ejecuta el comando para instalar WSL con Ubuntu:
wsl --install -d Ubuntu
- Espera a que se complete la instalación
- Cuando se abra la terminal de Ubuntu, crea un usuario y contraseña
4.2. Actualización de Ubuntu e instalación de dependencias
Actualiza los paquetes del sistema:
sudo apt update && sudo apt upgrade -y
Instala las dependencias necesarias:
sudo apt install -y curl git libicu-dev
4.3. Creación del usuario para el agente
Crea un nuevo usuario para el agente:
sudo adduser azagent
Añade el usuario al grupo sudo:
sudo usermod -aG sudo azagent
Cambia al nuevo usuario:
sudo su - azagent
4.4. Descarga e instalación del agente
Crea un directorio para el agente:
mkdir ~/agent && cd ~/agent
Descarga el paquete del agente:
curl -O https://vstsagentpackage.azureedge.net/agent/3.227.2/vsts-agent-linux-x64-3.227.2.tar.gz
Extrae el paquete:
tar zxvf vsts-agent-linux-x64-3.227.2.tar.gz
Ejecuta el script de configuración:
./config.sh
Durante la configuración, proporciona la siguiente información:
-
URL del servidor:
https://dev.azure.com/FlookyAI
- PAT: Pega el token que generaste anteriormente
-
Nombre del pool de agentes:
SelfHostedAgents
(si no existe, se creará) -
Nombre del agente:
WSL-Agent-01
(o el nombre que prefieras)
Instala el agente como servicio:
sudo ./svc.sh install azagent
Inicia el servicio:
sudo ./svc.sh start
Verifica que el servicio está en funcionamiento:
sudo ./svc.sh status
4.5. Verificación del agente en Azure DevOps
- En Azure DevOps, ve a "Project settings" (icono de engranaje en la parte inferior izquierda)
- Selecciona "Agent pools" en el menú lateral
- Haz clic en el pool "SelfHostedAgents"
- Verifica que tu agente aparece como "Online"
✅ El agente debe aparecer con status "Online" y estar listo para ejecutar jobs
5. Despliegue de la infraestructura con Terraform
5.1. Creación de recursos para el estado de Terraform
Crea un grupo de recursos para el estado de Terraform:
az group create --name tfstate --location westeurope
Crea una cuenta de almacenamiento:
az storage account create --name anassstorage --resource-group tfstate --sku Standard_LRS
Crea un contenedor de blobs:
az storage container create --name tfstate --account-name anassstorage
5.2. Creación de una conexión de servicio en Azure DevOps
- En Azure DevOps, ve a "Project settings" > "Service connections"
- Haz clic en "New service connection"
- Selecciona "Azure Resource Manager"
- Selecciona "Service principal (automatic)"
- Completa la información:
-
Scope level:
Subscription
- Subscription: Selecciona tu suscripción
-
Resource group:
anass-rg
-
Service connection name:
SC-Flooky
- Grant access to all pipelines: Marcado
-
Scope level:
- Haz clic en "Save"
5.3. Creación y ejecución del pipeline de infraestructura
- En Azure DevOps, ve a "Pipelines" > "Pipelines"
- Haz clic en "New pipeline"
- Selecciona "Azure Repos Git"
- Selecciona el repositorio "FlookyAI-Infrastructure"
- Selecciona "Existing Azure Pipelines YAML file"
- Selecciona "/azure-pipelines.yml"
- Revisa el pipeline y haz clic en "Run"
6. Crear y configurar SonarQube localmente
6.1. Instalar SonarQube Server en Ubuntu WSL
Configuración de Requisitos Previos
Primero, preparemos tu entorno Ubuntu WSL:
# Actualiza tu sistema
sudo apt update && sudo apt upgrade -y
# Instala Java 17 (requerido por SonarQube)
sudo apt install openjdk-17-jdk -y
# Verifica la instalación de Java
java -version
# Instala wget y unzip
sudo apt install wget unzip -y
6.2. Instalar y Configurar SonarQube Community Edition
Crear un usuario dedicado para SonarQube
sudo adduser sonarqube
sudo usermod -aG sudo sonarqube
Cambiar al usuario sonarqube
sudo su - sonarqube
Descargar SonarQube Community Edition (última versión LTS)
cd /opt
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.3.0.82913.zip
Extraer SonarQube
sudo unzip sonarqube-10.3.0.82913.zip
sudo mv sonarqube-10.3.0.82913 sonarqube
sudo chown -R sonarqube:sonarqube sonarqube
Configurar SonarQube
Edita el archivo de configuración de SonarQube:
sudo nano /opt/sonarqube/conf/sonar.properties
Agrega estas líneas al archivo de configuración:
# Configuración del servidor web
sonar.web.host=0.0.0.0
sonar.web.port=9000
# Base de datos (usando H2 embebida para simplicidad)
sonar.embeddedDatabase.port=9092
Iniciar SonarQube
Navega al directorio bin de SonarQube:
cd /opt/sonarqube/bin/linux-x86-64
Inicia SonarQube:
./sonar.sh start
Verifica si está en ejecución:
./sonar.sh status
Espera unos minutos a que SonarQube se inicie por completo, luego accede desde tu navegador a: http://localhost:9000
- Inicia sesión con
admin
/admin
- Se te pedirá que cambies la contraseña: establece una nueva segura
- Completa el asistente de configuración inicial
6.3. Instalar y configurar SonarQube Scanner
Descargar SonarQube Scanner
cd /opt
sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip
Extraer el Scanner
sudo unzip sonar-scanner-cli-5.0.1.3006-linux.zip
sudo mv sonar-scanner-5.0.1.3006-linux sonar-scanner
sudo chown -R sonarqube:sonarqube sonar-scanner
Añadir el scanner al PATH
echo 'export PATH="/opt/sonar-scanner/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
6.4. Crear Tu Primer Proyecto
- En la interfaz web de SonarQube, haz clic en "Create Project"
- Selecciona "Manually"
- Introduce:
-
Project key:
Flooky-AI
-
Display name:
Flooky AI
-
Project key:
Configurar el Proyecto para el Análisis
Ve a la terminal y clona el repositorio de Flooky-AI:
git clone https://fatimaassim20@dev.azure.com/fatimaassim20/FlookyAI/_git/FlookyAI
Crea un archivo sonar-project.properties
en la raíz de tu proyecto:
# En el directorio de tu proyecto
nano sonar-project.properties
Agrega este contenido:
sonar.projectKey=Flooky-AI
sonar.projectName=Flooky AI
sonar.projectVersion=1.0
sonar.sources=.
sonar.host.url=http://localhost:9000
sonar.token=TU_TOKEN_GENERADO_AQUÍ
Ejecutar Tu Primer Análisis
# En el directorio de tu proyecto
sonar-scanner
7. Despliegue de la aplicación Flooky AI
7.1. Obtención de la API Key de Claude
- Regístrate en la plataforma de Anthropic para obtener acceso a la API de Claude: https://www.anthropic.com/ y solicita acceso a la API
- Una vez aprobado, genera una clave API desde el dashboard:
- Tu clave se verá similar a:
sk_ant_api_k3y123456789...
- Tu clave se verá similar a:
- Guarda esta clave para utilizarla más adelante
7.2. Almacenamiento de la clave API en Azure Key Vault
- En el portal de Azure, busca y selecciona el Key Vault "flooky-ai-kv" creado por Terraform
- Ve a "Secrets" > "Generate/Import"
- Completa la información:
-
Método de carga:
Manual
-
Nombre:
CLAUDE-API-KEY
- Valor: Pega tu clave API de Claude
-
Método de carga:
- Haz clic en "Create"
7.3. Creación y ejecución del pipeline de la aplicación
- En Azure DevOps, ve a "Pipelines" > "Pipelines"
- Haz clic en "New pipeline"
- Selecciona "Azure Repos Git"
- Selecciona el repositorio "FlookyAI"
- Selecciona "Existing Azure Pipelines YAML file"
- Selecciona "/azure-pipelines.yml"
- Revisa el pipeline y haz clic en "Run"
7.4. Verificación del despliegue
- Una vez completado el pipeline, accede al portal de Azure
- Busca y selecciona el App Service "flooky-ai"
- Haz clic en "Browse" o en la URL para verificar que la aplicación está funcionando
8. Configuración del dominio y correo electrónico
8.1. Compra del dominio en Hostinger
- Accede a Hostinger
- Busca el dominio "flooky.space" y verifica su disponibilidad
- Añade el dominio al carrito y completa el proceso de compra
- Una vez adquirido, accede al panel de control de Hostinger
8.2. Configuración del dominio para Azure App Service
- En el portal de Azure, accede a tu App Service "flooky-ai"
- En el menú lateral, selecciona "Dominios personalizados"
- Haz clic en "Añadir dominio personalizado"
- Sigue las instrucciones para obtener los registros DNS necesarios
- En el panel de control de Hostinger, ve a la sección "DNS / Nameservers"
- Añade los registros DNS proporcionados por Azure:
- Registro A para @
- Registro TXT para verificación
- Regresa a Azure y completa el proceso de validación y adición del dominio
Comprobamos que todo funciona y visitamos flooky.space
8.3. Configuración de SSL/TLS
- En el App Service, ve a "TLS/SSL settings"
- Para un certificado gratuito gestionado por Azure:
- Selecciona "Private Key Certificates (.pfx)"
- Haz clic en "Create App Service Managed Certificate"
- Selecciona tu dominio personalizado
- Haz clic en "Create"
- Una vez creado el certificado:
- Ve a "SSL bindings"
- Haz clic en "Add SSL Binding"
- Selecciona tu dominio y el certificado
- Haz clic en "Add Binding"
- Establece "HTTPS Only" en "On"
8.4. Configuración de Zoho Mail
- Accede a Zoho Mail y regístrate
- Selecciona "Add an existing domain" e introduce "flooky.space"
- Sigue las instrucciones para verificar la propiedad del dominio
- Configura los registros MX, SPF, DKIM y DMARC según las instrucciones de Zoho
- Crea las cuentas de correo necesarias:
hello@flooky.space
- Configura las firmas y ajustes adicionales según tus preferencias
9. Configuración de Grafana y alertas en Slack
9.1. Despliegue y Configuración de Grafana con Docker
En el terminal de Ubuntu WSL ejecuta este comando:
docker run -d \
--name=grafana \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
-e "GF_SECURITY_ADMIN_PASSWORD=Anass@1234" \
--restart=unless-stopped \
grafana/grafana:latest
- Accede al navegador con este enlace: http://localhost:3000
- Ve a "Connection String" y conecta tu cuenta Azure por ahí
9.2. Creación de dashboards
Crea un nuevo dashboard:
Configura paneles para monitorizar:
CPU y memoria del App Service:
- Memoria RAM
- Tiempo promedio de respuesta
- Requests
- Data Out
- Tráfico de Red
9.3. Configuración de alertas en Slack
- Crea un canal en Slack para las alertas (ej.
#flooky-ai-alerts
) - Instala la aplicación "Incoming WebHooks" en tu workspace de Slack
Configurar grafana.ini
En Grafana:
- Ve a Alerting > Notification channels
- Haz clic en "New channel"
- Configura:
-
Name:
Slack Alerts
-
Type:
Slack
- URL: Pega la URL del webhook
-
Name:
- Haz clic en "Test" para verificar
- Guarda el canal de notificación
- Configura reglas de alerta para los paneles importantes
🎉 ¡Felicidades!
Has completado exitosamente la implementación de Flooky AI desde cero. Tu aplicación ahora debería estar:
- ✅ Desplegada en Azure Web App
- ✅ Con un dominio personalizado (flooky.space) configurado
- ✅ Con SSL/TLS habilitado
- ✅ Integrada con pipelines de CI/CD en Azure DevOps
- ✅ Con análisis de código en SonarQube
- ✅ Monitoreada con Grafana
- ✅ Con alertas configuradas en Slack
- ✅ Con correo empresarial funcional
📚 Recursos Adicionales
- Documentación oficial de Azure DevOps
- Documentación de Terraform para Azure
- Guía de SonarQube
- Documentación de Grafana
- API de Claude - Anthropic
🤝 Contribución
Si encuentras algún error o tienes sugerencias de mejora, no dudes en:
- Crear un issue en el repositorio
- Enviar un pull request con tus mejoras
- Contactar al equipo de desarrollo
📝 Licencia
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE
para más detalles.
Desarrollado por: Anass Assim
Institución: I.E.S Rodrigo Caro
Curso: Administración de Sistemas Informáticos en Red
Fecha: 2025