zkt25/sk1/prepare-app.sh

137 lines
5.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Скрипт для подготовки и развертывания приложения
# Цвета для вывода
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Проверяем, установлен ли Azure CLI
if ! command -v az &> /dev/null; then
echo -e "${RED}Azure CLI is not installed. Please install it before running the script.${NC}"
echo "Instr: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli"
exit 1
fi
# Проверяем, авторизован ли пользователь в Azure
echo -e "${YELLOW}Checking authorization in Azure...${NC}"
az account show > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${YELLOW}Azure authorization required. Starting the sign-in process..${NC}"
az login
if [ $? -ne 0 ]; then
echo -e "${RED}Azure Authorization Error. Exit.${NC}"
exit 1
fi
fi
# Загружаем переменные окружения
if [ -f .env ]; then
echo -e "${GREEN}Loading environment variables from a file${NC}"
export $(grep -v '^#' .env | xargs)
else
echo -e "${RED}File .env not found. Please create one based on .env.example${NC}"
exit 1
fi
# Проверяем наличие нужных переменных
if [[ -z "$AZURE_RESOURCE_GROUP" || -z "$AZURE_LOCATION" || -z "$AZURE_STORAGE_ACCOUNT" ]]; then
echo -e "${RED}Not all required environment variables are defined in the .env file.${NC}"
exit 1
fi
# Создаем группу ресурсов, если она не существует
echo -e "${YELLOW}Создание группы ресурсов ${AZURE_RESOURCE_GROUP}...${NC}"
az group create --name $AZURE_RESOURCE_GROUP --location $AZURE_LOCATION
# Создаем реестр контейнеров, если он не существует
echo -e "${YELLOW}Creating a container registry...${NC}"
az acr create --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_CONTAINER_REGISTRY --sku Basic --admin-enabled true
# Получаем учетные данные реестра
echo -e "${YELLOW}Getting container registry credentials...${NC}"
REGISTRY_USERNAME=$(az acr credential show --name $AZURE_CONTAINER_REGISTRY --query "username" -o tsv)
REGISTRY_PASSWORD=$(az acr credential show --name $AZURE_CONTAINER_REGISTRY --query "passwords[0].value" -o tsv)
REGISTRY_URL=$(az acr show --name $AZURE_CONTAINER_REGISTRY --query "loginServer" -o tsv)
# Создаем учетную запись хранения, если она не существует
echo -e "${YELLOW}Creating storage account...${NC}"
az storage account create \
--name $AZURE_STORAGE_ACCOUNT \
--resource-group $AZURE_RESOURCE_GROUP \
--location $AZURE_LOCATION \
--sku Standard_LRS
# Получаем ключ учетной записи хранения
STORAGE_ACCOUNT_KEY=$(az storage account keys list --resource-group $AZURE_RESOURCE_GROUP --account-name $AZURE_STORAGE_ACCOUNT --query "[0].value" -o tsv)
# Создаем файловый ресурс для MongoDB
echo -e "${YELLOW}Creating a File Resource for MongoDB...${NC}"
az storage share create \
--name mongodb-data \
--account-name $AZURE_STORAGE_ACCOUNT \
--account-key $STORAGE_ACCOUNT_KEY
# Создаем ключ хранилища для Azure Key Vault
echo -e "${YELLOW}Creating a Key Vault...${NC}"
az keyvault create \
--name $AZURE_KEY_VAULT_NAME \
--resource-group $AZURE_RESOURCE_GROUP \
--location $AZURE_LOCATION
# Генерируем секретный ключ JWT
JWT_SECRET=$(openssl rand -hex 32)
# Добавляем секреты в Key Vault
echo -e "${YELLOW}Adding secrets to Key Vault...${NC}"
az keyvault secret set --vault-name $AZURE_KEY_VAULT_NAME --name "MONGODB-ROOT-USERNAME" --value $MONGODB_ROOT_USERNAME
az keyvault secret set --vault-name $AZURE_KEY_VAULT_NAME --name "MONGODB-ROOT-PASSWORD" --value $MONGODB_ROOT_PASSWORD
az keyvault secret set --vault-name $AZURE_KEY_VAULT_NAME --name "JWT-SECRET" --value $JWT_SECRET
# Создаем директорию и копируем туда файлы для сборки Docker-образа
echo -e "${YELLOW}Preparing files for building Docker image...${NC}"
mkdir -p build
cp -r src/* build/
cp Dockerfile build/
cp package.json build/
# Авторизуемся в реестре контейнеров
echo -e "${YELLOW}Авторизация в реестре контейнеров...${NC}"
az acr login --name $AZURE_CONTAINER_REGISTRY
# Сборка и публикация Docker-образа
echo -e "${YELLOW}Authorization in the container registry...${NC}"
cd build
docker build -t ${REGISTRY_URL}/brabus-app:latest .
docker push ${REGISTRY_URL}/brabus-app:latest
cd ..
# Создаем переменные для развертывания
export AZURE_CONTAINER_REGISTRY_URL=$REGISTRY_URL
export MONGODB_URI="mongodb://${MONGODB_ROOT_USERNAME}:${MONGODB_ROOT_PASSWORD}@mongodb:27017/brabus?authSource=admin"
export STORAGE_ACCOUNT_NAME=$AZURE_STORAGE_ACCOUNT
export STORAGE_ACCOUNT_KEY=$STORAGE_ACCOUNT_KEY
# Применяем шаблон развертывания
echo -e "${YELLOW}Applying deployment template...${NC}"
envsubst < azure_deployment.yml > azure_deployment_filled.yml
az container create --resource-group $AZURE_RESOURCE_GROUP --file azure_deployment_filled.yml
# Получаем публичный IP-адрес контейнера
CONTAINER_IP=$(az container show --resource-group $AZURE_RESOURCE_GROUP --name brabus-container-group --query "ipAddress.ip" -o tsv)
echo -e "${GREEN}Deployment completed SUCCERFULLY!!!!${NC}"
echo -e "${GREEN}The application is available AT: http://${CONTAINER_IP}:3000${NC}"
echo -e "${YELLOW}Note: To configure HTTPS, you must configure a domain name and SSL certificate${NC}"