Загрузить файлы в «sk1»
This commit is contained in:
parent
6452cf7e3d
commit
2edd538d1f
27
sk1/.env
Normal file
27
sk1/.env
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
NODE_ENV=production
|
||||
PORT=3000
|
||||
|
||||
|
||||
MONGODB_ROOT_USERNAME=brabus_admin
|
||||
MONGODB_ROOT_PASSWORD=ZKT_KASABUTSKI_77557755
|
||||
MONGODB_URI=mongodb://brabus_admin:ZKT_KASABUTSKI_77557755@mongodb:27017/brabus?authSource=admin
|
||||
|
||||
|
||||
JWT_SECRET=zkt_super_secret_key_what_be_very_long_and_secure
|
||||
|
||||
|
||||
AZURE_RESOURCE_GROUP=car-salon-rg
|
||||
AZURE_LOCATION=westeurope
|
||||
AZURE_APP_NAME=car-salon-zkt-kasabutski
|
||||
AZURE_CONTAINER_REGISTRY=carsalonacr123
|
||||
AZURE_SQL_SERVER=car-salon-server
|
||||
AZURE_SQL_DB=carsalondb
|
||||
AZURE_SQL_USER=kasabutskiadmin
|
||||
AZURE_SQL_PASSWORD=ZKT_KASABUTSKI_77557755
|
||||
AZURE_STORAGE_ACCOUNT=carsalonstorage
|
||||
|
||||
|
||||
# AZURE_STORAGE_CONNECTION_STRING=
|
||||
# AZURE_KEY_VAULT_URI=
|
||||
|
20
sk1/Dockerfile
Normal file
20
sk1/Dockerfile
Normal file
@ -0,0 +1,20 @@
|
||||
# Базовый образ Node.js
|
||||
FROM node:18-alpine
|
||||
|
||||
# Рабочая директория в контейнере
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Копирование package.json и package-lock.json
|
||||
COPY package*.json ./
|
||||
|
||||
# Установка зависимостей
|
||||
RUN npm install
|
||||
|
||||
# Копирование исходного кода
|
||||
COPY . .
|
||||
|
||||
# Открываем порт, который будет использовать приложение
|
||||
EXPOSE 3000
|
||||
|
||||
# Команда для запуска приложения
|
||||
CMD ["node", "server.js"]
|
135
sk1/README.md.md
Normal file
135
sk1/README.md.md
Normal file
@ -0,0 +1,135 @@
|
||||
# Веб-приложение Brabus Premium Automotive
|
||||
|
||||
## Описание приложения
|
||||
|
||||
Данное веб-приложение представляет собой официальный сайт автосалона Brabus Premium Automotive, специализирующегося на продаже премиальных автомобилей. Сайт включает следующие функции:
|
||||
|
||||
- Красивый и современный пользовательский интерфейс в стиле Apple
|
||||
- Карусель для демонстрации моделей автомобилей
|
||||
- Система аутентификации пользователей (регистрация/вход)
|
||||
- Корзина покупок
|
||||
- Адаптивный дизайн для мобильных устройств
|
||||
|
||||
## Использованные технологии
|
||||
|
||||
### Облачные сервисы Azure
|
||||
|
||||
1. **Azure Container Instances (ACI)** - для размещения контейнеров приложения
|
||||
2. **Azure Container Registry (ACR)** - для хранения Docker-образов
|
||||
3. **Azure Storage Account** - для хранения постоянных данных MongoDB
|
||||
4. **Azure Key Vault** - для управления секретами приложения
|
||||
|
||||
### Контейнеры Docker
|
||||
|
||||
- **Контейнер приложения** - Node.js сервер, обслуживающий фронтенд и API
|
||||
- **Контейнер MongoDB** - база данных для хранения информации о пользователях и заказах
|
||||
|
||||
### Сохранение данных
|
||||
|
||||
- **Постоянное хранилище** - Azure File Share для данных MongoDB
|
||||
- **Секреты** - хранятся в Azure Key Vault
|
||||
|
||||
## Описание файлов
|
||||
|
||||
### Основные файлы
|
||||
|
||||
- `Dockerfile` - описывает сборку контейнера Node.js
|
||||
- `docker-compose.yml` - конфигурация для локального развертывания приложения
|
||||
- `azure_deployment.yml` - шаблон для развертывания в Azure Container Instances
|
||||
- `package.json` - описание зависимостей Node.js приложения
|
||||
- `.env` - файл с переменными окружения (не включен в репозиторий для безопасности)
|
||||
- `.env.example` - пример файла переменных окружения
|
||||
|
||||
### Скрипты
|
||||
|
||||
- `prepare-app.sh` - скрипт для автоматического развертывания приложения в Azure
|
||||
- `remove-app.sh` - скрипт для удаления приложения из Azure
|
||||
|
||||
### Исходный код
|
||||
|
||||
- `src/server.js` - основной файл серверного приложения на Node.js
|
||||
- `src/public/` - папка с статическими файлами (HTML, CSS, JS)
|
||||
- `src/public/index.html` - главная страница
|
||||
- `src/public/login.html` - страница входа
|
||||
- `src/public/cart.html` - страница корзины
|
||||
- `src/public/styles.css` - стили приложения
|
||||
- `src/public/script.js` - клиентский JavaScript
|
||||
|
||||
## Инструкция по использованию
|
||||
|
||||
### Подготовка к развертыванию
|
||||
|
||||
1. Сначала убедитесь, что у вас установлены необходимые инструменты:
|
||||
- Docker
|
||||
- Azure CLI
|
||||
- bash (для Linux/Mac) или Git Bash (для Windows)
|
||||
|
||||
2. Создайте файл `.env` на основе `.env.example` и заполните его своими значениями:
|
||||
```
|
||||
# Azure настройки
|
||||
AZURE_RESOURCE_GROUP=brabus-resources
|
||||
AZURE_LOCATION=westeurope
|
||||
AZURE_CONTAINER_REGISTRY=brabusregistry
|
||||
AZURE_STORAGE_ACCOUNT=brabusstorage
|
||||
AZURE_KEY_VAULT_NAME=brabusvault
|
||||
|
||||
# MongoDB настройки
|
||||
MONGODB_ROOT_USERNAME=brabus_admin
|
||||
MONGODB_ROOT_PASSWORD=your_secure_password
|
||||
|
||||
# Другие настройки приложения
|
||||
NODE_ENV=production
|
||||
PORT=3000
|
||||
```
|
||||
|
||||
### Развертывание
|
||||
|
||||
1. Сделайте скрипты исполняемыми:
|
||||
```bash
|
||||
chmod +x prepare-app.sh remove-app.sh
|
||||
```
|
||||
|
||||
2. Запустите скрипт развертывания:
|
||||
```bash
|
||||
./prepare-app.sh
|
||||
```
|
||||
|
||||
3. После завершения развертывания вы увидите IP-адрес вашего приложения.
|
||||
|
||||
### Просмотр приложения
|
||||
|
||||
1. Откройте веб-браузер и перейдите по адресу, полученному после развертывания:
|
||||
```
|
||||
http://<IP-АДРЕС>:3000
|
||||
```
|
||||
|
||||
2. Для регистрации перейдите по ссылке "Login" в верхнем меню и создайте учетную запись.
|
||||
|
||||
### Удаление приложения
|
||||
|
||||
1. Чтобы удалить приложение и все связанные с ним ресурсы, выполните:
|
||||
```bash
|
||||
./remove-app.sh
|
||||
```
|
||||
|
||||
2. Следуйте инструкциям скрипта для выборочного или полного удаления ресурсов.
|
||||
|
||||
## Условия запуска скриптов
|
||||
|
||||
Скрипты `prepare-app.sh` и `remove-app.sh` требуют следующего:
|
||||
|
||||
1. Наличие установленного [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli)
|
||||
2. Активная подписка Azure (скрипты запросят авторизацию, если вы не вошли в систему)
|
||||
3. Правильно настроенный файл `.env` (или ввод параметров вручную для скрипта удаления)
|
||||
4. Для скрипта `prepare-app.sh` также требуется установленный Docker
|
||||
|
||||
## Внешние источники и использование генеративных моделей
|
||||
|
||||
При создании этого проекта были использованы следующие внешние источники:
|
||||
|
||||
1. Официальная документация Azure: [https://docs.microsoft.com/en-us/azure/](https://docs.microsoft.com/en-us/azure/)
|
||||
2. Документация Docker: [https://docs.docker.com/](https://docs.docker.com/)
|
||||
3. Руководство по Node.js и Express: [https://expressjs.com/](https://expressjs.com/)
|
||||
4. Шаблоны дизайна с [Dribbble](https://dribbble.com/) и [Behance](https://www.behance.net/)
|
||||
|
||||
Для помощи в написании документации и создании скриптов была использована генеративная модель Claude 3.7 Sonnet от Anthropic.
|
54
sk1/azure_deployment.yml
Normal file
54
sk1/azure_deployment.yml
Normal file
@ -0,0 +1,54 @@
|
||||
apiVersion: '2019-12-01'
|
||||
location: westus
|
||||
name: brabus-container-group
|
||||
properties:
|
||||
containers:
|
||||
- name: brabus-app
|
||||
properties:
|
||||
image: ${AZURE_CONTAINER_REGISTRY_URL}/brabus-app:latest
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1.0
|
||||
memoryInGB: 1.5
|
||||
ports:
|
||||
- port: 3000
|
||||
environmentVariables:
|
||||
- name: PORT
|
||||
value: '3000'
|
||||
- name: MONGODB_URI
|
||||
secureValue: ${MONGODB_URI}
|
||||
- name: JWT_SECRET
|
||||
secureValue: ${JWT_SECRET}
|
||||
- name: NODE_ENV
|
||||
value: 'production'
|
||||
- name: mongodb
|
||||
properties:
|
||||
image: mongo:latest
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1.0
|
||||
memoryInGB: 1.5
|
||||
ports:
|
||||
- port: 27017
|
||||
environmentVariables:
|
||||
- name: MONGO_INITDB_ROOT_USERNAME
|
||||
secureValue: ${MONGODB_ROOT_USERNAME}
|
||||
- name: MONGO_INITDB_ROOT_PASSWORD
|
||||
secureValue: ${MONGODB_ROOT_PASSWORD}
|
||||
volumeMounts:
|
||||
- name: mongodb-data
|
||||
mountPath: /data/db
|
||||
osType: Linux
|
||||
ipAddress:
|
||||
type: Public
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 3000
|
||||
volumes:
|
||||
- name: mongodb-data
|
||||
azureFile:
|
||||
shareName: mongodb-data
|
||||
storageAccountName: ${STORAGE_ACCOUNT_NAME}
|
||||
storageAccountKey: ${STORAGE_ACCOUNT_KEY}
|
||||
tags: {}
|
||||
type: Microsoft.ContainerInstance/containerGroups
|
54
sk1/azure_deployment_filled.yml
Normal file
54
sk1/azure_deployment_filled.yml
Normal file
@ -0,0 +1,54 @@
|
||||
apiVersion: '2019-12-01'
|
||||
location: westus
|
||||
name: brabus-container-group
|
||||
properties:
|
||||
containers:
|
||||
- name: brabus-app
|
||||
properties:
|
||||
image: carsalonacr123.azurecr.io/brabus-app:latest
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1.0
|
||||
memoryInGB: 1.5
|
||||
ports:
|
||||
- port: 3000
|
||||
environmentVariables:
|
||||
- name: PORT
|
||||
value: '3000'
|
||||
- name: MONGODB_URI
|
||||
secureValue: mongodb://brabus_admin:ZKT_KASABUTSKI_77557755@mongodb:27017/brabus?authSource=admin
|
||||
- name: JWT_SECRET
|
||||
secureValue: 6954f97ecc686eab533c9694d4d2595120d48eb27b0ad07a7b176e0a048ecdd4
|
||||
- name: NODE_ENV
|
||||
value: 'production'
|
||||
- name: mongodb
|
||||
properties:
|
||||
image: mongo:latest
|
||||
resources:
|
||||
requests:
|
||||
cpu: 1.0
|
||||
memoryInGB: 1.5
|
||||
ports:
|
||||
- port: 27017
|
||||
environmentVariables:
|
||||
- name: MONGO_INITDB_ROOT_USERNAME
|
||||
secureValue: brabus_admin
|
||||
- name: MONGO_INITDB_ROOT_PASSWORD
|
||||
secureValue: ZKT_KASABUTSKI_77557755
|
||||
volumeMounts:
|
||||
- name: mongodb-data
|
||||
mountPath: /data/db
|
||||
osType: Linux
|
||||
ipAddress:
|
||||
type: Public
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 3000
|
||||
volumes:
|
||||
- name: mongodb-data
|
||||
azureFile:
|
||||
shareName: mongodb-data
|
||||
storageAccountName: carsalonstorage
|
||||
storageAccountKey:
|
||||
tags: {}
|
||||
type: Microsoft.ContainerInstance/containerGroups
|
44
sk1/docker-compose.yml
Normal file
44
sk1/docker-compose.yml
Normal file
@ -0,0 +1,44 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# MongoDB сервис
|
||||
mongodb:
|
||||
image: mongo:latest
|
||||
container_name: brabus-mongodb
|
||||
restart: always
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongodb_data:/data/db
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_ROOT_USERNAME}
|
||||
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_ROOT_PASSWORD}
|
||||
networks:
|
||||
- brabus-network
|
||||
|
||||
# Node.js приложение
|
||||
app:
|
||||
build: .
|
||||
container_name: brabus-app
|
||||
restart: always
|
||||
ports:
|
||||
- "${PORT:-3000}:3000"
|
||||
depends_on:
|
||||
- mongodb
|
||||
environment:
|
||||
- PORT=${PORT:-3000}
|
||||
- MONGODB_URI=mongodb://${MONGODB_ROOT_USERNAME}:${MONGODB_ROOT_PASSWORD}@mongodb:27017/brabus?authSource=admin
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- NODE_ENV=${NODE_ENV:-production}
|
||||
volumes:
|
||||
- ./:/usr/src/app
|
||||
- /usr/src/app/node_modules
|
||||
networks:
|
||||
- brabus-network
|
||||
|
||||
networks:
|
||||
brabus-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
mongodb_data:
|
23
sk1/env-example.sh
Normal file
23
sk1/env-example.sh
Normal file
@ -0,0 +1,23 @@
|
||||
# Базовые настройки
|
||||
NODE_ENV=production
|
||||
PORT=3000
|
||||
|
||||
# MongoDB настройки
|
||||
MONGODB_ROOT_USERNAME=brabus_admin
|
||||
MONGODB_ROOT_PASSWORD=your_secure_password_here
|
||||
MONGODB_URI=mongodb://brabus_admin:your_secure_password_here@mongodb:27017/brabus?authSource=admin
|
||||
|
||||
# JWT секрет
|
||||
JWT_SECRET=your_jwt_secret_key_should_be_very_long_and_secure
|
||||
|
||||
# Настройки Azure
|
||||
# Обязательные для скриптов развертывания
|
||||
AZURE_RESOURCE_GROUP=brabus-resources
|
||||
AZURE_LOCATION=westeurope
|
||||
AZURE_CONTAINER_REGISTRY=brabusregistry
|
||||
AZURE_STORAGE_ACCOUNT=brabusstorage
|
||||
AZURE_KEY_VAULT_NAME=brabusvault
|
||||
|
||||
# Опциональные настройки Azure
|
||||
AZURE_STORAGE_CONNECTION_STRING=your_azure_storage_connection_string
|
||||
AZURE_KEY_VAULT_URI=your_azure_key_vault_uri
|
34
sk1/package.json
Normal file
34
sk1/package.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "brabus-website",
|
||||
"version": "1.0.0",
|
||||
"description": "Brabus car dealership website with authentication",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
"start": "node server.js",
|
||||
"dev": "nodemon server.js"
|
||||
},
|
||||
"keywords": [
|
||||
"brabus",
|
||||
"cars",
|
||||
"dealership",
|
||||
"authentication",
|
||||
"azure"
|
||||
],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@azure/identity": "^3.1.3",
|
||||
"@azure/keyvault-secrets": "^4.6.0",
|
||||
"@azure/storage-blob": "^12.13.0",
|
||||
"bcryptjs": "^2.4.3",
|
||||
"body-parser": "^1.20.2",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^16.0.3",
|
||||
"express": "^4.18.2",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"mongoose": "^7.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.22"
|
||||
}
|
||||
}
|
131
sk1/prepare-app.sh
Normal file
131
sk1/prepare-app.sh
Normal file
@ -0,0 +1,131 @@
|
||||
#!/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 не установлен. Пожалуйста, установите его перед запуском скрипта.${NC}"
|
||||
echo "Инструкции: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем, авторизован ли пользователь в Azure
|
||||
echo -e "${YELLOW}Проверка авторизации в Azure...${NC}"
|
||||
az account show > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${YELLOW}Требуется авторизация в Azure. Запуск процесса входа...${NC}"
|
||||
az login
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Ошибка авторизации в Azure. Выход.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Загружаем переменные окружения
|
||||
if [ -f .env ]; then
|
||||
echo -e "${GREEN}Загрузка переменных окружения из файла .env${NC}"
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
else
|
||||
echo -e "${RED}Файл .env не найден. Пожалуйста, создайте его на основе .env.example${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем наличие нужных переменных
|
||||
if [[ -z "$AZURE_RESOURCE_GROUP" || -z "$AZURE_LOCATION" || -z "$AZURE_STORAGE_ACCOUNT" ]]; then
|
||||
echo -e "${RED}Не все обязательные переменные окружения заданы в файле .env${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создаем группу ресурсов, если она не существует
|
||||
echo -e "${YELLOW}Создание группы ресурсов ${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}"
|
122
sk1/remove-app.sh
Normal file
122
sk1/remove-app.sh
Normal file
@ -0,0 +1,122 @@
|
||||
#!/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 не установлен. Пожалуйста, установите его перед запуском скрипта.${NC}"
|
||||
echo "Инструкции: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем, авторизован ли пользователь в Azure
|
||||
echo -e "${YELLOW}Проверка авторизации в Azure...${NC}"
|
||||
az account show > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${YELLOW}Требуется авторизация в Azure. Запуск процесса входа...${NC}"
|
||||
az login
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${RED}Ошибка авторизации в Azure. Выход.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Загружаем переменные окружения
|
||||
if [ -f .env ]; then
|
||||
echo -e "${GREEN}Загрузка переменных окружения из файла .env${NC}"
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
else
|
||||
echo -e "${RED}Файл .env не найден. Пожалуйста, укажите переменные окружения вручную${NC}"
|
||||
|
||||
# Запрашиваем нужные переменные
|
||||
read -p "Введите имя группы ресурсов: " AZURE_RESOURCE_GROUP
|
||||
if [ -z "$AZURE_RESOURCE_GROUP" ]; then
|
||||
echo -e "${RED}Имя группы ресурсов обязательно. Выход.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "Введите имя реестра контейнеров (или нажмите Enter, если не нужно удалять): " AZURE_CONTAINER_REGISTRY
|
||||
read -p "Введите имя учетной записи хранения (или нажмите Enter, если не нужно удалять): " AZURE_STORAGE_ACCOUNT
|
||||
read -p "Введите имя Key Vault (или нажмите Enter, если не нужно удалять): " AZURE_KEY_VAULT_NAME
|
||||
fi
|
||||
|
||||
# Запрашиваем подтверждение перед удалением
|
||||
echo -e "${RED}ВНИМАНИЕ: Вы собираетесь удалить следующие ресурсы:${NC}"
|
||||
echo -e "${RED} - Группа контейнеров: brabus-container-group в группе ресурсов ${AZURE_RESOURCE_GROUP}${NC}"
|
||||
|
||||
if [ ! -z "$AZURE_CONTAINER_REGISTRY" ]; then
|
||||
echo -e "${RED} - Реестр контейнеров: ${AZURE_CONTAINER_REGISTRY}${NC}"
|
||||
fi
|
||||
|
||||
if [ ! -z "$AZURE_STORAGE_ACCOUNT" ]; then
|
||||
echo -e "${RED} - Учетная запись хранения: ${AZURE_STORAGE_ACCOUNT}${NC}"
|
||||
fi
|
||||
|
||||
if [ ! -z "$AZURE_KEY_VAULT_NAME" ]; then
|
||||
echo -e "${RED} - Key Vault: ${AZURE_KEY_VAULT_NAME}${NC}"
|
||||
fi
|
||||
|
||||
read -p "Вы уверены, что хотите продолжить? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}Операция отменена пользователем.${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Удаляем группу контейнеров
|
||||
echo -e "${YELLOW}Удаление группы контейнеров...${NC}"
|
||||
az container delete \
|
||||
--resource-group $AZURE_RESOURCE_GROUP \
|
||||
--name brabus-container-group \
|
||||
--yes
|
||||
|
||||
# Удаляем реестр контейнеров, если указан
|
||||
if [ ! -z "$AZURE_CONTAINER_REGISTRY" ]; then
|
||||
echo -e "${YELLOW}Удаление реестра контейнеров ${AZURE_CONTAINER_REGISTRY}...${NC}"
|
||||
az acr delete \
|
||||
--resource-group $AZURE_RESOURCE_GROUP \
|
||||
--name $AZURE_CONTAINER_REGISTRY \
|
||||
--yes
|
||||
fi
|
||||
|
||||
# Удаляем учетную запись хранения, если указана
|
||||
if [ ! -z "$AZURE_STORAGE_ACCOUNT" ]; then
|
||||
echo -e "${YELLOW}Удаление учетной записи хранения ${AZURE_STORAGE_ACCOUNT}...${NC}"
|
||||
az storage account delete \
|
||||
--resource-group $AZURE_RESOURCE_GROUP \
|
||||
--name $AZURE_STORAGE_ACCOUNT \
|
||||
--yes
|
||||
fi
|
||||
|
||||
# Удаляем Key Vault, если указан
|
||||
if [ ! -z "$AZURE_KEY_VAULT_NAME" ]; then
|
||||
echo -e "${YELLOW}Удаление Key Vault ${AZURE_KEY_VAULT_NAME}...${NC}"
|
||||
|
||||
# Сначала нужно изменить политику удаления, чтобы обойти защиту от удаления
|
||||
az keyvault update \
|
||||
--name $AZURE_KEY_VAULT_NAME \
|
||||
--resource-group $AZURE_RESOURCE_GROUP \
|
||||
--enable-purge-protection false \
|
||||
--enable-soft-delete false
|
||||
|
||||
# Теперь можно удалить Key Vault
|
||||
az keyvault delete \
|
||||
--name $AZURE_KEY_VAULT_NAME \
|
||||
--resource-group $AZURE_RESOURCE_GROUP
|
||||
fi
|
||||
|
||||
# Запрашиваем, нужно ли удалить всю группу ресурсов
|
||||
read -p "Хотите полностью удалить группу ресурсов ${AZURE_RESOURCE_GROUP}? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo -e "${YELLOW}Удаление группы ресурсов ${AZURE_RESOURCE_GROUP}...${NC}"
|
||||
az group delete --name $AZURE_RESOURCE_GROUP --yes
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}Удаление ресурсов завершено!${NC}"
|
2
sk1/requirements.txt
Normal file
2
sk1/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Flask==2.0.2
|
||||
Flask-SQLAlchemy==2.5.1
|
Loading…
Reference in New Issue
Block a user