Развертывание веб-приложения Python Django с помощью PostgreSQL в Azure
В этом руководстве вы развернете веб-приложение Python на основе данных (Django) для приложение Azure службы с помощью службы реляционной базы данных База данных Azure для PostgreSQL. поддержка службы приложение AzurePython в среде сервера Linux. Если вы хотите, ознакомьтесь с учебником Flask или руководством по FastAPI.
В этом руководстве описано следующее:
- Создание защищенной по умолчанию архитектуры кэша Служба приложений, PostgreSQL и Redis.
- Защита секретов подключения с помощью управляемого удостоверения и ссылок Key Vault.
- Разверните пример приложения Python для Служба приложений из репозитория GitHub.
- Доступ к Служба приложений строка подключения и параметрам приложения в коде приложения.
- Создание обновлений и повторное развертывание кода приложения.
- Создайте схему базы данных путем выполнения миграции базы данных.
- Потоковая передача журналов диагностики из Azure.
- Управление приложением в портал Azure.
- Подготовьте ту же архитектуру и разверните с помощью Интерфейса командной строки разработчика Azure.
- Оптимизируйте рабочий процесс разработки с помощью GitHub Codespaces и GitHub Copilot.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Учетная запись GitHub. Вы также можете получить его бесплатно.
- Знание Python с разработкой Django.
- (Необязательно) Чтобы попробовать GitHub Copilot, учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Установлен интерфейс командной строки разработчика Azure. Вы можете выполнить действия с помощью Azure Cloud Shell , так как он уже установлен с помощью Интерфейса командной строки разработчика Azure.
- Знание Python с разработкой Django.
- (Необязательно) Чтобы попробовать GitHub Copilot, учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
Перейти к концу
Если вы просто хотите просмотреть пример приложения в этом руководстве, работающем в Azure, просто выполните следующие команды в Azure Cloud Shell и следуйте указаниям:
mkdir msdocs-django-postgresql-sample-app
cd msdocs-django-postgresql-sample-app
azd init --template msdocs-django-postgresql-sample-app
azd up
1. Запустите пример
Сначала вы настраиваете пример приложения на основе данных в качестве отправной точки. Для удобства пример репозитория включает конфигурацию контейнера разработки. Контейнер разработки имеет все необходимое для разработки приложения, включая базу данных, кэш и все переменные среды, необходимые образцу приложения. Контейнер разработки может выполняться в пространстве кода GitHub, что означает, что вы можете запустить пример на любом компьютере с веб-браузером.
Примечание.
Если вы используете это руководство вместе с вашим приложением, ознакомьтесь с описанием файла requirements.txt в README.md , чтобы узнать, какие пакеты потребуется.
Шаг 1. В новом окне браузера:
- Войдите в свою учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/msdocs-django-postgresql-sample-app/fork.
- Отмена выбора только для копирования основной ветви. Вы хотите, чтобы все ветви.
- Щелкните Создать вилку.
Шаг 2. В вилке GitHub:
- Выберите основную начальную>ветвь без инфраструктуры для начальной ветви. Эта ветвь содержит только пример проекта и не содержит файлов или конфигурации, связанных с Azure.
- Выберите пространство кода "Создать код>" на начальном экране без инфраструктуры.
Пространство кода занимает несколько минут, и оно выполняется
pip install -r requirements.txt
для репозитория в конце. Кроме того, предоставленный ENV-файл уже содержит фиктивнуюSECRET_KEY
переменную, которую Django необходимо выполнить локально.
Шаг 3. В терминале пространства кода:
- Запуск миграции базы данных с
python manage.py migrate
помощью . - Запустите приложение, выполнив команду
python manage.py runserver
. - Когда появится уведомление
Your application running on port 8000 is available.
, нажмите кнопку "Открыть в браузере". Пример приложения должен отображаться на новой вкладке браузера. Чтобы остановить приложение, введитеCtrl
+C
.
Совет
Вы можете попросить GitHub Copilot об этом репозитории. Например:
- @workspace Что делает этот проект?
- @workspace Что делает папка devcontainer?
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
2. Создание Служба приложений, базы данных и кэша
В этом шаге вы создадите ресурсы Azure. Действия, используемые в этом руководстве, создают набор защищенных ресурсов по умолчанию, включая Служба приложений, База данных Azure для PostgreSQL и кэш Azure. Для процесса создания укажите:
-
Имя веб-приложения. Он используется в качестве части DNS-имени приложения в виде
https://<app-name>-<hash>.<region>.azurewebsites.net
. - Регион для физического запуска приложения. Он также используется в качестве части DNS-имени приложения.
- Стек среды выполнения для приложения. Здесь вы выбираете версию Python, используемую для вашего приложения.
- План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов: выберите "Создать" и используйте имя msdocs-django-postgres-tutorial.
- Регион: любой регион Azure рядом с вами.
- Имя: msdocs-python-postgres-XYZ.
- Стек среды выполнения: Python 3.12.
- База данных: PostgreSQL — гибкий сервер по умолчанию выбирается в качестве ядра СУБД. Имя сервера и имя базы данных также задаются по умолчанию соответствующими значениями.
- Добавьте Кэш Azure для Redis: Да.
- План размещения: базовый. Когда вы будете готовы, вы можете масштабировать до рабочей ценовой категории.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- Служба приложений план. Определяет вычислительные ресурсы для Служба приложений. Создается план Linux на уровне Базовый.
- Служба приложений. Представляет приложение и запускается в плане Служба приложений.
- Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
- Частная конечная точка: доступ к конечной точке кэша Redis в виртуальной сети.
- Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
- База данных Azure для PostgreSQL гибкий сервер: доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
- Кэш Azure для Redis: доступен только из частной сети.
- Частная зона DNS зоны: включает разрешение DNS сервера базы данных кэш Redis в виртуальной сети.
3. Защита секретов подключения и добавление SECRET_KEY
Мастер создания создал переменные подключения для вас уже в качестве параметров приложения. Однако рекомендуется сохранить секреты из Служба приложений полностью. Вы переместите секреты в хранилище ключей и измените параметры приложения на ссылки Key Vault с помощью соединителей служб.
Шаг 1. Получение существующего строка подключения
- В меню слева на странице Служба приложений выберите переменные среды "Параметры>".
- Выберите AZURE_POSTGRESQL_CONNECTIONSTRING.
- В разделе "Добавление и изменение параметра приложения" в поле "Значение " найдите часть password= в конце строки.
- Скопируйте строку пароля после пароля= для последующего использования.
Эти параметры приложения позволяют подключаться к базе данных Postgres и кэшу Redis, защищенному за частными конечными точками. Однако секреты сохраняются непосредственно в приложении Служба приложений, что не является лучшим. Вы измените это. Кроме того, вы добавите параметр, необходимый
SECRET_KEY
для приложения Django.
Шаг 2. Создание хранилища ключей для безопасного управления секретами
- В верхней строке поиска введите "хранилище ключей", а затем выберите Marketplace>Key Vault.
- В группе ресурсов выберите msdocs-python-postgres-tutorial.
- В имени хранилища ключей введите имя, состоящее только из букв и чисел.
- В регионе задайте для него то же расположение, что и группа ресурсов.
Шаг 3. Защита хранилища ключей с помощью частной конечной точки
- Перейдите на вкладку Сеть.
- Отмена выбора включения общедоступного доступа.
- Выберите "Создать частную конечную точку".
- В группе ресурсов выберите msdocs-python-postgres-tutorial.
- В диалоговом окне в расположении выберите то же расположение, что и приложение Служба приложений.
- В поле Name введите msdocs-python-postgres-XYZVaultEndpoint.
- В виртуальной сети выберите msdocs-python-postgres-XYZVnet.
- В подсети msdocs-python-postgres-XYZSubnet.
- Нажмите ОК.
- Выберите Проверить и создать, а затем выберите Создать. Дождитесь завершения развертывания хранилища ключей. Должно появиться сообщение "Развертывание завершено".
Шаг 4. Настройка соединителя PostgreSQL
- В верхней строке поиска введите msdocs-python-postgres, а затем выберите ресурс Служба приложений с именем msdocs-python-postgres-XYZ.
- На странице Служба приложений в меню слева выберите "Параметры > соединителя службы". Существует уже два соединителя, созданные мастером создания приложения.
- Установите флажок рядом с соединителем PostgreSQL, а затем нажмите кнопку "Изменить".
- В типе клиента выберите Django. Тип клиента Django в соединителе службы PostgreSQL предоставляет переменные базы данных в отдельных параметрах вместо одного строка подключения. Отдельные переменные проще использовать в параметрах базы данных Django.
- Выберите вкладку Аутентификация.
- Вставьте пароль, скопированный ранее.
- Выберите "Сохранить секрет" в Key Vault.
- В разделе "Подключение к Key Vault" выберите "Создать". Диалоговое окно создания подключения открывается поверх диалогового окна редактирования.
Шаг 5. Установка подключения к Key Vault
- В диалоговом окне "Создание подключения" для подключения Key Vault в Key Vault выберите созданное ранее хранилище ключей.
- Выберите Review + Create (Просмотреть и создать).
- После завершения проверки нажмите кнопку "Создать".
Шаг 6. Завершение параметров соединителя PostgreSQL
- Вы вернеесь в диалоговом окне редактирования для defaultConnector. На вкладке "Проверка подлинности" дождитесь создания соединителя хранилища ключей. По завершении раскрывающийся список подключения Key Vault автоматически выбирает его.
- Выберите Далее: сеть.
- Выберите Сохранить. Подождите, пока появится уведомление об успешном обновлении.
Шаг 7. Настройка соединителя Redis для использования секретов Key Vault
- На странице соединителей служб установите флажок рядом с соединителем Cache for Redis, а затем нажмите кнопку "Изменить".
- Выберите вкладку Аутентификация.
- Выберите "Сохранить секрет" в Key Vault.
- В разделе "Подключение к Key Vault" выберите созданное хранилище ключей.
- Выберите Далее: сеть.
- Выберите " Настроить правила брандмауэра", чтобы включить доступ к целевой службе. Мастер создания приложения уже защитил базу данных SQL с помощью частной конечной точки.
- Выберите Сохранить. Подождите, пока появится уведомление об успешном обновлении.
Шаг 8. Проверка интеграции Key Vault
- В меню слева снова выберите переменные среды параметров>.
- Рядом с AZURE_POSTGRESQL_PASSWORD выберите "Показать значение". Значение должно быть
@Microsoft.KeyVault(...)
. Это означает, что это ссылка на хранилище ключей, так как секрет теперь управляется в хранилище ключей. - Чтобы проверить строка подключения Redis, выберите "Показать значение рядом с AZURE_REDIS_CONNECTIONSTRING".
Шаг 9. Пример приложения считывает переменную среды SECRET_KEY, чтобы задать необходимый параметр SECRET_KEY. Вы создаете его в качестве параметра приложения на этом шаге.
- На вкладке "Параметры приложения" нажмите кнопку "Добавить".
- Задайте для имени значение SECRET_KEY.
- Задайте значение длинной случайной строки.
- Нажмите кнопку "Применить", а затем еще раз нажмите кнопку "Применить", а затем подтвердите.
Чтобы свести к сводные данные, процесс защиты секретов подключения:
- Получение секретов подключения из переменных среды приложения Служба приложений.
- Создание хранилища ключей.
- Создание подключения Key Vault с управляемым удостоверением, назначаемого системой.
- Обновление соединителей служб для хранения секретов в хранилище ключей.
Примечание.
В идеале SECRET_KEY
параметр приложения должен быть настроен как ссылка на хранилище ключей, который является многоэтапным процессом. Дополнительные сведения см. в Разделы справки изменении параметра приложения SECRET_KEY на ссылку Key Vault?
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
4. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждый git push
из репозитория GitHub запускает действие сборки и развертывания.
Шаг 1. В меню слева выберите центр развертывания>.
Шаг 2. На странице Центра развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите msdocs-django-postgresql-sample-app.
- В ветви выберите starter-no-infra. Это та же ветвь, в которую вы работали с примером приложения, без файлов или конфигурации, связанных с Azure.
- Для типа проверки подлинности выберите удостоверение, назначаемое пользователем.
- В меню сверху выберите Сохранить.
Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
. По умолчанию центр развертывания создает назначаемое пользователем удостоверение для рабочего процесса для проверки подлинности с помощью Microsoft Entra (проверка подлинности OIDC). Дополнительные сведения о вариантах проверки подлинности см. в статье "Развертывание в Служба приложений с помощью GitHub Actions".
Шаг 3. Вернитесь в пространство кода GitHub примера вилки, выполните команду git pull origin starter-no-infra
.
Это извлекает только что зафиксированный файл рабочего процесса в пространство кода.
Шаг 4 (вариант 1: с GitHub Copilot):
- Запустите новый сеанс чата, выбрав представление чата, а затем выберите +.
- Спросите: "@workspace Как приложение подключается к базе данных и redis?". Copilot может дать вам некоторое объяснение о настройке параметров в azureproject/development.py и azureproject/production.py.
- Спросите: "@workspace В рабочем режиме мое приложение работает в веб-приложении Служба приложений, которое использует соединитель службы Azure для подключения к гибкому серверу PostgreSQL с помощью типа клиента Django. Что такое имена переменных среды, которые мне нужно использовать? Copilot может дать вам предложение по коду, аналогичное варианту 2: без действий GitHub Copilot ниже и даже сообщить вам, чтобы внести изменения в файл azureproject/production.py.
- Откройте azureproject/production.py в обозревателе и добавьте предложение кода.
- Спросите: "@workspace приложение "My Служба приложений" также использует соединитель службы Azure для подключения к кэшу для Redis с помощью типа клиента Django. Какие имена переменных среды мне нужно использовать?*" Copilot может дать вам предложение кода, аналогичное варианту 2: без действий GitHub Copilot ниже и даже сообщить вам внести изменения в файл azureproject/production.py .
- Добавьте предложение кода. GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
Шаг 4 (вариант 2: без GitHub Copilot):
- Откройте Program.cs в обозревателе.
- Найдите закомментируемый код (строки 29-48) и раскомментируйте его.
При этом создаются подключения PostgreSQL и Redis с помощью
AZURE_POSTGRESQL_USER
, ,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
AZURE_POSTGRESQL_NAME
иAZURE_REDIS_CONNECTIONSTRING
.
Шаг 5.
- Выберите расширение Система управления версиями.
- В текстовом поле введите сообщение фиксации, например
Configure Azure database and cache connectons
. Кроме того, выберитеи позвольте GitHub Copilot создать сообщение о фиксации.
- Нажмите кнопку "Зафиксировать", а затем подтвердите значение "Да".
- Нажмите кнопку "Синхронизировать изменения 1", а затем нажмите кнопку "ОК".
Шаг 6. Назад на странице Центра развертывания в портал Azure:
- Перейдите на вкладку "Журналы" , а затем нажмите кнопку "Обновить ", чтобы увидеть новое выполнение развертывания.
- В элементе журнала для запуска развертывания выберите запись "Сборка и развертывание журналов " с последней меткой времени.
Шаг 7. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь запуска GitHub, чтобы отобразить состояние успешности. Это занимает около 5 минут.
Возникли проблемы? Ознакомьтесь с руководством по устранению неполадок.
5. Создание схемы базы данных
При использовании базы данных PostgreSQL, защищенной виртуальной сетью, проще всего запускать миграцию баз данных Django в сеансе SSH с контейнером Linux в Служба приложений.
Шаг 1. Назад на странице Служба приложений в меню слева
- Выберите SSH средств разработки>.
- Выберите Выполнить.
Шаг 2. В сеансе SSH выполните команду python manage.py migrate
. При успешном завершении Служба приложений успешно подключается к базе данных.
Совет
В сеансе SSH только изменения в файлах могут /home
сохраняться после перезапуска приложения. Изменения за пределами /home
не сохраняются. Сеанс SSH полезен для выполнения распространенных python manage.py
команд, таких как создание пользователя с помощью .python manage.py createsuperuser
Дополнительные сведения см. в документации по django django-admin и manage.py. Используйте учетную запись суперпользователя для доступа к части /admin
веб-сайта.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
6. Перейдите к приложению
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения.
Шаг 2. Добавьте в список несколько ресторанов. Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных Azure для PostgreSQL.
7. Потоковая передача журналов диагностики
служба приложение Azure записывает все журналы консоли для диагностики проблем с приложением. Пример приложения включает инструкции print()
для демонстрации этой возможности, как показано ниже.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
Шаг 1. На странице Служба приложений:
- В меню слева выберите "Мониторинг> Служба приложений журналы.
- Под элементом Ведение журнала приложения выберите Файловая система.
- В меню сверху выберите Сохранить.
Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
Дополнительные сведения о ведении журнала в приложениях Python в серии о настройке Azure Monitor для приложения Python.
8. Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
2. Создание ресурсов Azure и развертывание примера приложения
На этом шаге вы создадите ресурсы Azure и развернете пример приложения для Служба приложений в Linux. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включая Служба приложений, База данных Azure для PostgreSQL и Кэш Azure для Redis.
Контейнер разработки уже имеет интерфейс командной строки разработчика Azure (AZD).
Выполните команду
azd init
из корневого каталога репозитория.azd init --template python-app-service-postgresql-infra
При появлении запроса укажите следующие ответы:
Вопрос Ответ Текущий каталог не пуст. Вы хотите инициализировать проект здесь в каталоге<>? Y Что вы хотите сделать с этими файлами? Сохранение существующих файлов без изменений Введите новое имя среды Введите уникальное имя. Шаблон AZD использует это имя как часть DNS-имени веб-приложения в Azure ( <app-name>-<hash>.azurewebsites.net
). Разрешены буквенно-цифровые символы и дефисы.Войдите в Azure, выполнив
azd auth login
команду и выполнив следующую команду:azd auth login
Создайте необходимые ресурсы Azure с
azd provision
помощью команды. Следуйте запросу, чтобы выбрать нужную подписку и расположение для ресурсов Azure.azd provision
Выполнение
azd provision
команды занимает около 15 минут (кэш Redis занимает больше всего времени). Позже вы измените код, чтобы работать с Служба приложений и развертывать изменения сazd deploy
помощью. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure.Этот шаблон AZD содержит файлы (azure.yaml и инфракрасныйкаталог), создающие безопасную архитектуру по умолчанию со следующими ресурсами Azure:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- Служба приложений план. Определяет вычислительные ресурсы для Служба приложений. Создается план Linux на уровне Базовый.
- Служба приложений. Представляет приложение и запускается в плане Служба приложений.
- Виртуальная сеть: интегрированная с приложением Служба приложений и изолирует внутренний сетевой трафик.
- Частные конечные точки: доступ к конечным точкам для хранилища ключей и кэша Redis в виртуальной сети.
- Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
- База данных Azure для PostgreSQL гибкий сервер: доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
- Частная зона DNS зона: включает разрешение DNS сервера PostgreSQL в виртуальной сети.
- Рабочая область Log Analytics: выступает в качестве целевого контейнера для вашего приложения для отправки журналов, где можно также запрашивать журналы.
- Кэш Azure для Redis: доступен только от частной конечной точки.
- Хранилище ключей: доступно только из своей частной конечной точки. Используется для управления секретами для приложения Служба приложений.
Когда команда завершит создание ресурсов и развертывание кода приложения в первый раз, развернутое пример приложения еще не работает, так как необходимо внести небольшие изменения, чтобы подключиться к базе данных в Azure.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
3. Использование базы данных строка подключения
Шаблон AZD, который вы используете, создали переменные подключения для вас уже в качестве параметров приложения и выводит их в терминал для удобства. Параметры приложения — это один из способов сохранения секретов подключения из репозитория кода.
В выходных
AZURE_POSTGRESQL_USER
данных AZD найдите параметры ,AZURE_POSTGRESQL_PASSWORD
,AZURE_POSTGRESQL_HOST
, иAZURE_POSTGRESQL_NAME
AZURE_REDIS_CONNECTIONSTRING
. Чтобы обеспечить безопасность секретов, отображаются только имена параметров. Они выглядят следующим образом в выходных данных AZD:App Service app has the following connection settings: - AZURE_POSTGRESQL_NAME - AZURE_POSTGRESQL_HOST - AZURE_POSTGRESQL_USER - AZURE_POSTGRESQL_PASSWORD - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
Для удобства шаблон AZD отображает прямую ссылку на страницу параметров приложения. Найдите ссылку и откройте ее на новой вкладке браузера.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
4. Изменение примера кода и повторное развертывание
В пространстве кода GitHub запустите новый сеанс чата, выбрав представление чата, а затем выберите +.
Спросите: "@workspace Как приложение подключается к базе данных?". Copilot может дать вам некоторое описание настройки параметров подключения в azureproject/development.py и azureproject/production.py.
Спросите: "@workspace В рабочем режиме мое приложение работает в веб-приложении Служба приложений, которое использует соединитель службы Azure для подключения к гибкому серверу PostgreSQL с помощью типа клиента Django. Что такое имена переменных среды, которые мне нужно использовать? Copilot может дать вам предложение по коду, аналогичное варианту 2: без действий GitHub Copilot ниже и даже сообщить вам, чтобы внести изменения в файл azureproject/production.py.
Откройте azureproject/production.py в обозревателе и добавьте предложение кода.
GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам может потребоваться задать дополнительные вопросы, чтобы точно настроить ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
В окне терминале выполните команду
azd deploy
.azd deploy
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
5. Создание схемы базы данных
С помощью базы данных PostgreSQL, защищенной виртуальной сетью, проще всего запустить миграцию баз данных Django в сеансе SSH с контейнером Linux в Служба приложений.
В выходных данных AZD найдите URL-адрес сеанса SSH и перейдите к нему в браузере. Это выглядит следующим образом в выходных данных:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
В сеансе SSH выполните команду
python manage.py migrate
. При успешном завершении Служба приложений успешно подключается к базе данных.Примечание.
После перезапуска приложения могут сохраняться только изменения в файлах в
/home
. Изменения за пределами/home
не сохраняются.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
6. Перейдите к приложению
В выходных данных AZD найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Добавьте несколько ресторанов в список.
Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных Azure для PostgreSQL.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
7. Потоковая передача журналов диагностики
служба приложение Azure может записывать журналы консоли для диагностики проблем с приложением. Для удобства шаблон AZD уже включает ведение журнала в локальную файловую систему и отправляет журналы в рабочую область Log Analytics.
Пример приложения содержит print()
инструкции для демонстрации этой возможности, как показано в следующем фрагменте кода.
def index(request):
print('Request for index page received')
restaurants = Restaurant.objects.annotate(avg_rating=Avg('review__rating')).annotate(review_count=Count('review'))
lastViewedRestaurant = request.session.get("lastViewedRestaurant", False)
В выходных данных AZD найдите ссылку для потоковой передачи журналов Служба приложений и перейдите к нему в браузере. Ссылка выглядит следующим образом в выходных данных AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Дополнительные сведения о ведении журнала в приложениях Python в серии о настройке Azure Monitor для приложения Python.
Возникли проблемы? Ознакомьтесь с разделом "Устранение неполадок".
8. Очистка ресурсов
Чтобы удалить все ресурсы Azure в текущей среде развертывания, выполните azd down
и следуйте инструкциям.
azd down
Устранение неполадок
Ниже приведены проблемы, которые могут возникнуть при попытке работы с этим руководством и инструкциями по их устранению.
Не удается подключиться к сеансу SSH
Если вы не можете подключиться к сеансу SSH, само приложение не удалось запустить. Дополнительные сведения см. в журналах диагностики . Например, если вы видите ошибку, KeyError: 'AZURE_POSTGRESQL_HOST'
это может означать, что переменная среды отсутствует (возможно, вы удалили параметр приложения).
При выполнении миграции базы данных возникает ошибка
Если возникают какие-либо ошибки, связанные с подключением к базе данных, проверьте, были ли изменены или удалены параметры приложения (AZURE_POSTGRESQL_USER
, AZURE_POSTGRESQL_PASSWORD
, AZURE_POSTGRESQL_HOST
и AZURE_POSTGRESQL_NAME
) . Без этого строка подключения команда миграции не может взаимодействовать с базой данных.
Часто задаваемые вопросы
- Сколько стоит такая конфигурация?
- Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Как настроен пример Django для запуска в службе приложение Azure?
- Разделы справки изменить параметр приложения SECRET_KEY на ссылку Key Vault?
- Разделы справки ошибки отладки во время развертывания GitHub Actions?
- У меня нет разрешений на создание удостоверения, назначаемого пользователем
- Что можно сделать с помощью GitHub Copilot в моем пространстве кода?
- Сколько стоит такая конфигурация?
- Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Как настроен пример Django для запуска в службе приложение Azure?
- Разделы справки ошибки отладки во время развертывания GitHub Actions?
- У меня нет разрешений на создание удостоверения, назначаемого пользователем
- Что можно сделать с помощью GitHub Copilot в моем пространстве кода?
Сколько стоит такая конфигурация?
Цены на созданные ресурсы приведены следующим образом:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- Гибкий сервер PostgreSQL создается на самом низком уровне с максимальным объемом памяти Standard_B1ms с минимальным размером хранилища, который можно масштабировать вверх или вниз. Цены на Базу данных Azure для PostgreSQL.
- Плата за виртуальную сеть не взимается, если только вы не настроите дополнительные функциональные возможности, такие как пиринг. См. цены на виртуальные сети Azure.
- За частную зону DNS взимается небольшая плата. См. цены на Azure DNS.
Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Для базового доступа из программы командной строки можно запустить
psql
из сеанса SSH приложения. - Чтобы подключиться из классического средства, компьютер должен находиться в виртуальной сети. Например, это может быть виртуальная машина Azure, подключенная к одной из подсетей, или компьютер в локальной сети с VPN-подключением типа "сеть — сеть" к виртуальной сети Azure.
- Вы также можете интегрировать Azure Cloud Shell с виртуальной сетью.
Как осуществляется разработка локальных приложений с использованием GitHub Actions?
Используя автоматически созданный файл рабочего процесса из Служба приложений в качестве примера, каждый git push
запускает новую сборку и развертывание. Из локального клона репозитория GitHub необходимо внести необходимые обновления и отправить их в GitHub. Например:
git add .
git commit -m "<some-message>"
git push origin main
Как настроен пример Django для запуска в службе приложение Azure?
Пример приложения Django настраивает параметры в файле azureproject/production.py, чтобы он мог выполняться в службе приложение Azure. Эти изменения являются общими для развертывания Django в рабочей среде, а не для Служба приложений.
Django проверяет заголовок HTTP_HOST в входящих запросах. Пример кода использует переменную среды в Служба приложений, чтобы добавить доменное имя приложения в параметр ALLOWED_HOSTS Django.
WEBSITE_HOSTNAME
# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Django не поддерживает обработку статических файлов в рабочей среде. В этом руководстве мы используем для обработки таких файлов WhiteNoise. Пакет WhiteNoise уже установлен с requirements.txt, а его ПО промежуточного слоя добавляется в список.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Затем параметры статических файлов настраиваются в соответствии с документацией Django.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Дополнительные сведения см. в разделе "Рабочие параметры" для приложений Django.
Разделы справки изменить параметр приложения SECRET_KEY на ссылку Key Vault?
На приведенном выше портале можно изменить SECRET_KEY
ссылку на Key Vault, выполнив следующие команды Azure CLI в облачной оболочке:
# Change the following variables to match your environment
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
KEY_VAULT_NAME=<key-vault-name>
APP_SERVICE_NAME=<app-name>
SECRET_NAME=djangoSecretKey
# Set the subscription ID
az account set --subscription $SUBSCRIPTION_ID
# Assign 'Key Vault Secrets Officer' role to your user at the scope of the key vault
az role assignment create \
--assignee $(az ad signed-in-user show --query id -o tsv) \
--role $(az role definition list --name "Key Vault Secrets Officer" --query "[].id" -o tsv) \
--scope $(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id --output tsv)
# Add the secret to the key vault
az keyvault secret set \
--vault-name $KEY_VAULT_NAME \
--name $SECRET_NAME \
--value $(python -c 'import secrets; print(secrets.token_hex())')
# Add Key Vault reference to the App Service configuration
az webapp config appsettings set \
--resource-group $RESOURCE_GROUP \
--name $APP_SERVICE_NAME \
--settings "SECRET_KEY=@Microsoft.KeyVault(SecretUri=https://$KEY_VAULT_NAME.vault.azure.net/secrets/$SECRET_NAME)"
Вы также можете сделать то же самое на портале. Дополнительные сведения см. в разделе:
Разделы справки ошибки отладки во время развертывания GitHub Actions?
Если шаг завершается ошибкой в файле рабочего процесса GitHub, попробуйте изменить неудающуюся команду, чтобы создать более подробные выходные данные. Например, можно получить дополнительные выходные данные из python
команды, добавив -d
этот параметр. Зафиксируйте и отправьте изменения, чтобы активировать другое развертывание для Служба приложений.
У меня нет разрешений на создание удостоверения, назначаемого пользователем
См. статью "Настройка развертывания GitHub Actions" из Центра развертывания.
Что можно сделать с помощью GitHub Copilot в моем пространстве кода?
Возможно, вы заметили, что представление чата GitHub Copilot уже было там при создании пространства кода. Для удобства мы добавим расширение чата GitHub Copilot в определение контейнера (см . статью .devcontainer/devcontainer.json). Однако вам нужна учетная запись GitHub Copilot (доступна бесплатная пробная версия 30 дней).
Несколько советов для вас при разговоре с GitHub Copilot:
- В одном сеансе чата вопросы и ответы создаются друг на друга, и вы можете настроить свои вопросы, чтобы точно настроить ответ, который вы получаете.
- По умолчанию GitHub Copilot не имеет доступа к файлу в репозитории. Чтобы задать вопросы о файле, сначала откройте файл в редакторе.
- Чтобы разрешить GitHub Copilot получить доступ ко всем файлам в репозитории при подготовке его ответов, начните с вашего вопроса
@workspace
. Дополнительные сведения см. в разделе Use the @workspace agent. - В сеансе чата GitHub Copilot может предложить изменения и (с
@workspace
) даже там, где внести изменения, но не разрешено вносить изменения. Это до вас, чтобы добавить предлагаемые изменения и проверить его.
Следующие шаги
Перейдите к следующему руководству, чтобы узнать, как защитить приложение с помощью личного домена и сертификата.
Узнайте, как Служба приложений запускает приложение Python: