| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -e |
|
|
| |
| RESOURCE_GROUP="irminsul-rg" |
| LOCATION="eastus" |
| ACR_NAME="irminsulacr" |
| ENVIRONMENT="irminsul-env" |
| APP_NAME="irminsul" |
| IMAGE_TAG="latest" |
|
|
| |
| if [[ -z "$PINECONE_API_KEY" ]]; then |
| echo "ERROR: PINECONE_API_KEY environment variable is not set." |
| echo " export PINECONE_API_KEY=your_key" |
| exit 1 |
| fi |
|
|
| if [[ -z "$GROQ_API_KEY" ]]; then |
| echo "ERROR: GROQ_API_KEY environment variable is not set." |
| echo " export GROQ_API_KEY=your_key" |
| exit 1 |
| fi |
|
|
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Irminsul β Azure Container Apps Deployment" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "" |
|
|
| |
| echo "[1/5] Creating resource group: $RESOURCE_GROUP" |
| az group create \ |
| --name "$RESOURCE_GROUP" \ |
| --location "$LOCATION" \ |
| --output none |
| echo " β Resource group ready" |
|
|
| |
| echo "[2/5] Creating container registry: $ACR_NAME" |
| az acr create \ |
| --resource-group "$RESOURCE_GROUP" \ |
| --name "$ACR_NAME" \ |
| --sku Basic \ |
| --admin-enabled true \ |
| --output none |
| echo " β ACR created" |
|
|
| |
| echo "[3/5] Building Docker image via ACR Tasks..." |
| echo " This uploads your source code to Azure and builds in the cloud." |
| az acr build \ |
| --registry "$ACR_NAME" \ |
| --image "${APP_NAME}:${IMAGE_TAG}" \ |
| . |
| echo " β Image built and pushed: ${ACR_NAME}.azurecr.io/${APP_NAME}:${IMAGE_TAG}" |
|
|
| |
| echo "[4/5] Creating Container Apps environment: $ENVIRONMENT" |
| az containerapp env create \ |
| --name "$ENVIRONMENT" \ |
| --resource-group "$RESOURCE_GROUP" \ |
| --location "$LOCATION" \ |
| --output none |
| echo " β Environment ready" |
|
|
| |
| echo "[5/5] Deploying container app: $APP_NAME" |
|
|
| |
| ACR_LOGIN_SERVER=$(az acr show --name "$ACR_NAME" --query loginServer --output tsv) |
| ACR_USERNAME=$(az acr credential show --name "$ACR_NAME" --query username --output tsv) |
| ACR_PASSWORD=$(az acr credential show --name "$ACR_NAME" --query "passwords[0].value" --output tsv) |
|
|
| az containerapp create \ |
| --name "$APP_NAME" \ |
| --resource-group "$RESOURCE_GROUP" \ |
| --environment "$ENVIRONMENT" \ |
| --image "${ACR_LOGIN_SERVER}/${APP_NAME}:${IMAGE_TAG}" \ |
| --registry-server "$ACR_LOGIN_SERVER" \ |
| --registry-username "$ACR_USERNAME" \ |
| --registry-password "$ACR_PASSWORD" \ |
| --target-port 8000 \ |
| --ingress external \ |
| --min-replicas 0 \ |
| --max-replicas 3 \ |
| --cpu 1.0 \ |
| --memory 2.0Gi \ |
| --env-vars \ |
| PINECONE_API_KEY=secretref:pinecone-key \ |
| GROQ_API_KEY=secretref:groq-key \ |
| PINECONE_INDEX=llmops-rag \ |
| LLM_BACKEND=groq \ |
| EMBED_MODEL=sentence-transformers/all-MiniLM-L6-v2 \ |
| --secrets \ |
| pinecone-key="$PINECONE_API_KEY" \ |
| groq-key="$GROQ_API_KEY" \ |
| --output none |
|
|
| echo " β Container app deployed" |
|
|
| |
| LIVE_URL=$(az containerapp show \ |
| --name "$APP_NAME" \ |
| --resource-group "$RESOURCE_GROUP" \ |
| --query "properties.configuration.ingress.fqdn" \ |
| --output tsv) |
|
|
| echo "" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Deployment complete!" |
| echo "" |
| echo " Live URL: https://${LIVE_URL}" |
| echo " Health: https://${LIVE_URL}/health" |
| echo " API docs: https://${LIVE_URL}/docs" |
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ" |
| echo "" |
| echo " To tear down everything and stop billing:" |
| echo " az group delete --name $RESOURCE_GROUP --yes --no-wait" |
| echo "" |
|
|