Idioma: Español
Esta guía le explica cómo desplegar el Servidor Autogestionado de ActivityInfo como una Web App de Azure para Contenedores, utilizando la imagen oficial de Docker. Está dirigida a profesionales de TI que estén familiarizados con Microsoft Azure.
Antes de empezar
El Servidor Autogestionado de ActivityInfo almacena sus datos en una base de datos SQLite. Esto tiene dos consecuencias para un despliegue de Web App de Azure:
- Debe adjuntar un volumen persistente para la base de datos, porque el sistema de archivos propio de una Web App se reinicia cada vez que el contenedor se reinicia o se mueve.
- Debe ejecutar una única instancia. El servidor está diseñado para escalar verticalmente, no horizontalmente: para soportar más usuarios concurrentes, dé a la instancia más núcleos de CPU y memoria en lugar de añadir instancias.
Azure App Service también termina la conexión HTTPS por usted y reenvía HTTP plano al contenedor. Por lo tanto, debe ejecutar ActivityInfo en modo proxy HTTPS.
Los pasos siguientes utilizan la CLI de Azure. Si lo prefiere, puede realizar los mismos pasos desde el portal de Azure. Primero inicie sesión con:
az login
Establecer variables
Los comandos de esta guía reutilizan algunos valores. Establézcalos una vez, eligiendo sus propios nombres de aplicación y cuenta de almacenamiento globalmente únicos:
RESOURCE_GROUP=activityinfo-rg
LOCATION=westeurope
PLAN=activityinfo-plan
APP=my-activityinfo
STORAGE_ACCOUNT=aistorage$RANDOM
SHARE=activityinfo-data
Crear un grupo de recursos
az group create --name $RESOURCE_GROUP --location $LOCATION
Crear un plan de App Service de Linux
Cree un plan de Linux con un único trabajador. Se requiere el nivel Básico B1 o superior para el almacenamiento personalizado, un dominio personalizado y el ajuste "Always On".
az appservice plan create \
--name $PLAN \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--is-linux \
--sku B1 \
--number-of-workers 1
Crear un recurso compartido de archivos para la base de datos
Cree una cuenta de almacenamiento y un recurso compartido de Azure Files. ActivityInfo almacena su base de datos SQLite y config.ini en este recurso compartido, para que los datos sobrevivan a reinicios y redespliegues.
az storage account create \
--name $STORAGE_ACCOUNT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--sku Standard_LRS
az storage share-rm create \
--resource-group $RESOURCE_GROUP \
--storage-account $STORAGE_ACCOUNT \
--name $SHARE \
--quota 10
Crear la aplicación web
Cree la aplicación web a partir de la imagen oficial de ActivityInfo en Docker Hub:
az webapp create \
--resource-group $RESOURCE_GROUP \
--plan $PLAN \
--name $APP \
--container-image-name activityinfo/activityinfo:5.0.0
Montar el recurso compartido de archivos
Monte el recurso compartido de archivos en el contenedor en /data. Primero lea la clave de la cuenta de almacenamiento, y luego añada el montaje:
STORAGE_KEY=$(az storage account keys list \
--resource-group $RESOURCE_GROUP \
--account-name $STORAGE_ACCOUNT \
--query "[0].value" --output tsv)
az webapp config storage-account add \
--resource-group $RESOURCE_GROUP \
--name $APP \
--custom-id activityinfo-data \
--storage-type AzureFiles \
--account-name $STORAGE_ACCOUNT \
--share-name $SHARE \
--access-key $STORAGE_KEY \
--mount-path /data
Configurar ActivityInfo
Establezca los ajustes de la aplicación. WEBSITES_PORT le dice a App Service que el contenedor escucha en el puerto de PC 8081. Las variables ACTIVITYINFO_* ponen el servidor en modo proxy HTTPS y apuntan su directorio de datos al recurso compartido montado.
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP \
--settings \
WEBSITES_PORT=8081 \
ACTIVITYINFO_SERVER_HTTPS_PROXY=TRUE \
ACTIVITYINFO_SERVER_DOMAIN=$APP.azurewebsites.net \
ACTIVITYINFO_DATA_DATA_DIRECTORY=/data
Permita "Always On" para que App Service mantenga el contenedor en ejecución y no lo descargue cuando la aplicación esté inactiva:
az webapp config set \
--resource-group $RESOURCE_GROUP \
--name $APP \
--always-on true
Crear la cuenta de administrador
Azure proporciona un certificado gestionado gratuito para el dominio azurewebsites.net, por lo que la aplicación está disponible a través de HTTPS inmediatamente. Navegue a https://<APP>.azurewebsites.net, donde se le pedirá que cree la primera cuenta de usuario administrador.
Usar un dominio personalizado
Para servir ActivityInfo desde su propio dominio, añada un dominio personalizado y un certificado gestionado a la aplicación web. A continuación, actualice el ajuste ACTIVITYINFO_SERVER_DOMAIN para que coincida, de modo que los enlaces en los correos electrónicos de notificación utilicen la dirección correcta:
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP \
--settings ACTIVITYINFO_SERVER_DOMAIN=activityinfo.example.gov
Rendimiento del almacenamiento
El recurso compartido de archivos montado anteriormente es Azure Files, un sistema de archivos de red al que el contenedor llega a través del protocolo SMB. Cada lectura y escritura viaja a través de la red, lo que añade latencia en comparación con un disco local. Las bases de datos realizan muchas escrituras pequeñas y síncronas y mantienen bloqueos de archivos durante las transacciones, por lo que son sensibles a esta latencia. En un servidor concurrido, el recurso compartido puede convertirse en el factor limitante de los tiempos de respuesta. Una Web App para Contenedores solo puede adjuntar almacenamiento en red, por lo que esta contrapartida se aplica a cualquier despliegue de instancia única en App Service.
Si necesita un mayor rendimiento de la base de datos, despliegue en Azure Kubernetes Service en su lugar. Allí puede adjuntar un disco gestionado Premium SSD v2 a un único pod, lo que proporciona una latencia cercana a la de un disco local con IOPS configurables, sin dejar de sobrevivir a la pérdida de un nodo.
Próximos pasos
Siga la guía de Configuración para configurar la Entrega de correo electrónico y el Inicio de sesión único a través de la interfaz basada en la web.