# Implementación en Azure

## Requisitos previos

1. En una estación de trabajo con acceso a su nube de Azure, instale las siguientes herramientas si aún no las tiene disponibles:
   * Azure CLI: <https://learn.microsoft.com/en-us/cli/azure/install-azure-cli>
   * AWS CLI: <https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html>
   * Helm: <https://helm.sh/docs/intro/install/>
   * Kubectl: <https://kubernetes.io/docs/tasks/tools/>
2. Cree un nuevo clúster AKS, o elija un clúster existente para instalar Violet. El clúster debe tener al menos 2 nodos con al menos 8 GB de RAM. **Standard DS2\_V3** o más grande es una buena elección. No son necesarias otras configuraciones más allá de los valores predeterminados. El nodo recomendado tiene las siguientes propiedades mínimas:
   1. arquitectura: **amd64**
   2. osImage: **Ubuntu 22.04.5 LTS o superior**
3. Conecte su kubectl de la estación de trabajo al nuevo clúster AKS. Sustituya `<resource-group-name>` y `<aks-cluster-name>` por su nuevo clúster AKS en lo siguiente:

```bash
az login --scope https://management.core.windows.net//.default
az aks get-credentials --resource-group <resource-group-name> --name <aks-cluster-name>
```

## Instalación del Helm Chart de Violet

1. Agregue las credenciales de AWS de Violet al entorno de su terminal actual. Estos valores son proporcionados por Violet Labs y son específicos para su instalación:

```bash
export AWS_ACCESS_KEY_ID=<your-access-key>
export AWS_SECRET_ACCESS_KEY=<your-access-key-secret>
export AWS_DEFAULT_REGION=us-west-1 
```

2. Cree un nuevo archivo `violet-values.yml` que contenga sus credenciales de AWS y la configuración específica de la aplicación:

```yaml
domain: # El dominio donde se servirá Violet. El subdominio debe ser "violet": violet.mydomain.com
customerName: # El nombre del cliente de su licencia. Proporcionado por Violet
licenseKey: # Su clave de licencia. Proporcionada por Violet y es un uuid
adminEmail: # correo electrónico del usuario administrador para el cliente
adminName: # nombre completo del usuario administrador ("Nombre Apellido") para el cliente

aws:
  accessKeyId: # Su clave de acceso de AWS, proporcionada por Violet
  accessKeySecret: # Su secreto de AWS, proporcionado por Violet

neo4j:
  volúmenes:
    datos:
      dinámico:
        storageClassName: gp2

# opcional: Esto es obligatorio si desea usar una base de datos externa en lugar de una postgres interna creada automáticamente por el chart de helm
postgresql:
  enabled: false # Esto desactiva la base de datos postgresql interna
  auth:
    host: # nombre de host para la base de datos externa (p. ej. '[db_name].postgres.database.azure.com')
    password: # contraseña para el usuario de la base de datos de la aplicación, usada por la app
    username: # nombre de usuario para el usuario de la base de datos de la aplicación, usado por la app
    adminPassword: # nombre de usuario para la BD, con permisos de migraciones y seed
    adminUsername: # contraseña para la BD, con permisos de migraciones y seed
```

3. Cree un nuevo namespace de Kubernetes para la instalación de Violet:

```bash
kubectl create namespace violet
```

4. Instale el chart del controlador ingress nginx que permite a AKS configurar un balanceador de carga para enrutar el tráfico desde Internet a la nueva implementación de Violet:

```bash
helm install --namespace kube-system nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --set controller.service.annotations."service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path"=/healthz --set controller.service.externalTrafficPolicy=Local
```

5. Instale el agente de registros mezmo. Esto transmite los registros de su clúster al equipo de Violet para asistencia en solución de problemas y monitoreo.

```
kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-namespace.yaml

# Obtenga <mezmo-ingestion-key> de su entrada en 1Pass
kubectl create secret generic logdna-agent-key -n logdna-agent --from-literal=logdna-agent-key=<mezmo-ingestion-key> 

kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-resources.yaml
```

6. Instale el chart external-secrets. Esto se utiliza para cargar algunos secretos específicos del cliente desde AWS en la implementación de Violet:

```bash
helm repo add external-secrets https://charts.external-secrets.io
helm repo update
helm upgrade --namespace external-secrets --create-namespace --install --wait external-secrets external-secrets/external-secrets
```

7. Cree un secreto que permita a Kubernetes acceder al repositorio de Charts de Helm de Violet:

```bash
kubectl create secret docker-registry --namespace violet ecr-creds --docker-server=911167899009.dkr.ecr.us-west-1.amazonaws.com --docker-username=AWS --docker-password=$(aws ecr get-login-password)
```

8. Inicie sesión en el repositorio de Helm:

```bash
aws ecr get-login-password | helm registry login --username AWS --password-stdin 911167899009.dkr.ecr.us-west-1.amazonaws.com
```

9. Instale el chart de Helm de Violet:

```bash
helm upgrade --namespace violet --create-namespace --install myviolet oci://911167899009.dkr.ecr.us-west-1.amazonaws.com/violet-helm --version 1.0.0-main -f violet-values.yml
```

Tenga en cuenta que puede tardar hasta 5 minutos en ejecutar los scripts de aprovisionamiento de la base de datos. Puede comprobar el estado de la implementación viendo los pods:

```
kubectl get pods -n violet
```

Después de completar la instalación, el chart de helm mostrará alguna información y comandos que incluyen la URL para acceder a su nueva implementación, cómo obtener la dirección IP en la que se sirve la implementación (para configurar reglas DNS) y cómo obtener la contraseña autogenerada para el `violet_admin@violetlabs.com` cuenta.
