zkt25/sk1/prepare-app.sh

132 lines
6.2 KiB
Bash
Raw 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
# Скрипт для подготовки и развертывания приложения Brabus в Azure Cloud
# Цвета для вывода
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 not isnstalled. install please first.${NC}"
echo "instr: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli"
exit 1
fi
# Проверяем, авторизован ли пользователь в Azure
echo -e "${YELLOW}Azure authorization check...${NC}"
az account show > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${YELLOW}you need authorization in Azure. Log in process start...${NC}"
az login
if [ $? -ne 0 ]; then
echo -e "${RED}authorization error Azure. exit.${NC}"
exit 1
fi
fi
# Загружаем переменные окружения
if [ -f .env ]; then
echo -e "${GREEN}Load Variable environment files .env${NC}"
export $(grep -v '^#' .env | xargs)
else
echo -e "${RED}file .env not found. please create it using .env.example${NC}"
exit 1
fi
# Проверяем наличие нужных переменных
if [[ -z "$AZURE_RESOURCE_GROUP" || -z "$AZURE_LOCATION" || -z "$AZURE_STORAGE_ACCOUNT" ]]; then
echo -e "${RED}Not all conditions observe by .env${NC}"
exit 1
fi
# Создаем группу ресурсов, если она не существует
echo -e "${YELLOW}Creating resourse group ${AZURE_RESOURCE_GROUP}...${NC}"
az group create --name $AZURE_RESOURCE_GROUP --location $AZURE_LOCATION
# Создаем реестр контейнеров, если он не существует
echo -e "${YELLOW}Создание реестра контейнеров...${NC}"
az acr create --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_CONTAINER_REGISTRY --sku Basic --admin-enabled true
# Получаем учетные данные реестра
echo -e "${YELLOW}Получение учетных данных реестра контейнеров...${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}Создание учетной записи хранения...${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}Создание файлового ресурса для 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}Создание 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}Добавление секретов в 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}Подготовка файлов для сборки Docker-образа...${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}Сборка и публикация Docker-образа...${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}Применение шаблона развертывания...${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)
# Настройка HTTPS с Let's Encrypt
# Примечание: этот шаг требует дополнительной настройки DNS и доменного имени
# Здесь приведен упрощенный пример
echo -e "${GREEN}Развертывание завершено успешно!${NC}"
echo -e "${GREEN}Приложение доступно по адресу: http://${CONTAINER_IP}:3000${NC}"
echo -e "${YELLOW}Примечание: для настройки HTTPS необходимо настроить доменное имя и SSL-сертификат${NC}"