Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве вы развернете веб-приложение Python на основе данных (Django) в Службе приложений Azure с помощью службы реляционной базы данных Azure для PostgreSQL . Служба приложений Azure поддерживает Python в среде сервера Linux. Если вы хотите, ознакомьтесь с учебником Flask или руководством по FastAPI .
В этом руководстве вы узнаете, как:
- Создайте архитектуру изначально безопасной службы приложений, PostgreSQL и кеша Redis.
- Обеспечьте безопасность секретов подключения, используя управляемую идентификацию и ссылки на Key Vault.
- Разверните образец Python-приложения в службе приложений из репозитория GitHub.
- Доступ к Служба приложений строка подключения и параметрам приложения в коде приложения.
- Внесите обновления и заново разверните код приложения.
- Генерируйте схему базы данных, запуская миграции базы данных.
- Транслируйте диагностические журналы из Azure.
- Управляйте приложением в портале Azure.
- Подготовьте ту же архитектуру и разверните её с помощью Azure Developer CLI.
- Оптимизируйте ваш процесс разработки с помощью GitHub Codespaces и GitHub Copilot.
Предпосылки
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Учетная запись GitHub. Вы также можете получить его бесплатно.
- Знание Python с разработкой Django.
- (Необязательно) Чтобы попробовать GitHub Copilot, необходима учетная запись GitHub Copilot. Доступна 30-дневная бесплатная пробная версия.
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Установлен интерфейс командной строки разработчика Azure. Вы можете выполнять действия с Azure Cloud Shell, так как в ней уже установлен Azure Developer CLI.
- Знание 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:
- Выберите main> ветвь starter-no-infra для начальной ветви. Эта ветвь содержит только пример проекта и не содержит файлов или конфигурации, связанных с Azure.
- Выберите Код>Создать пространство кода на starter-no-infra.
Кодовое пространство настраивается в течение нескольких минут, и в конце оно запускает
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-имени приложения.
- Регион для физического запуска приложения в мире. Он также используется как часть DNS-имени вашего приложения.
- Стек выполняющей среды для приложения. Здесь вы выбираете версию Python, используемую для вашего приложения.
- План размещения для приложения. Это уровень цен, который включает набор функций и возможности масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет вам сгруппировать (в логический контейнер) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. На портале Azure:
- Введите "web app database" в строку поиска в верхней части портала Azure.
- Выберите элемент, помеченный веб-приложением и базой данных в заголовке Marketplace . Вы также можете перейти к мастеру создания напрямую.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов: выберите "Создать" и используйте имя msdocs-django-postgres-tutorial.
- Регион: любой регион Azure рядом с вами.
- Имя: msdocs-python-postgres-XYZ.
- Стек среды выполнения: Python 3.12.
- База данных: PostgreSQL — гибкий сервер по умолчанию выбирается в качестве ядра СУБД. Имя сервера и имя базы данных также устанавливаются по умолчанию на соответствующие значения.
- Добавление кэша Azure для Redis: Да.
- План размещения: базовый. Когда вы будете готовы, вы можете перейти на производственный ценовой уровень.
- Выберите "Рецензирование и создание".
- После завершения проверки нажмите кнопку "Создать".
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку "Перейти к ресурсу ". Вы сразу попадаете в приложение App Service, но при этом создаются следующие ресурсы:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- План службы приложений: определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне "Базовый ".
- App Service: представляет ваше приложение и работает в плане App Service.
- Виртуальная сеть: интегрирована с приложением службы приложений и изолирует внутренний сетевой трафик.
- Частная конечная точка: доступ к конечной точке кэша 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 выберите созданное ранее хранилище ключей.
- Выберите "Рецензирование и создание".
- После завершения проверки нажмите кнопку "Создать".
Шаг 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. Вы создаете его в качестве параметра приложения на этом шаге.
- На вкладке "Параметры приложения " нажмите кнопку "Добавить".
- Установите Name в SECRET_KEY.
- Задайте значение длинной случайной строки.
- Нажмите кнопку "Применить", а затем еще раз нажмите кнопку "Применить ", а затем подтвердите.
Вкратце, процесс защиты ваших секретов подключения включал:
- Извлечение секретов подключения из переменных окружения приложения App Service.
- Создание хранилища ключей.
- Создание подключения к хранилищу ключей с использованием управляемой идентичности, назначенной системой.
- Обновление служебных соединителей для хранения секретов в хранилище ключей.
Замечание
В идеале параметр приложения 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.
- В Branch выберите starter-no-infra. Это та же ветвь, в которой вы работали с вашим тестовым приложением, без файлов или конфигурации, связанных с Azure.
- Для типа проверки подлинности выберите пользовательское назначенное удостоверение.
- В верхнем меню нажмите кнопку "Сохранить".
Служба приложений помещает файл рабочего процесса в выбранный репозиторий GitHub, в каталог
.github/workflows
. По умолчанию центр развертывания создает назначаемое пользователем удостоверение для рабочего процесса для проверки подлинности с помощью Microsoft Entra (проверка подлинности OIDC). Дополнительные сведения о вариантах проверки подлинности см. в разделе "Развертывание в службе приложений" с помощью GitHub Actions.
Шаг 3. Вернитесь в GitHub Codespace вашего форка примера и выполните команду 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 мое приложение 'Моя служба приложений' также использует Azure Service Connector для подключения к Redis Cache через клиент Django. Какие имена переменных среды мне нужно использовать?* Copilot может предложить вам код, аналогичный варианту Вариант 2: без GitHub Copilot ниже, и даже может указать внести изменения в файл azureproject/production.py.
- Добавьте рекомендацию кода. GitHub Copilot не дает вам одинаковый ответ каждый раз, и это не всегда правильно. Вам, возможно, потребуется задать больше вопросов, чтобы уточнить его ответ. Советы см. в статье "Что можно сделать с помощью GitHub Copilot в моем пространстве кода?".
Шаг 4 (вариант 2: без GitHub Copilot):
- Откройте azureproject/production.py в обозревателе.
- Найдите закомментированный код (строки 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 connections
. Или выберитеи позвольте 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 App Service фиксирует все журналы консоли, чтобы помочь вам диагностировать проблемы с вашим приложением. Примерное приложение включает операторы 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). Позже вы измените ваш код, чтобы он работал с App Service, и примените изменения с помощьюazd deploy
. Когда команда выполняется, она предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure.Этот шаблон AZD содержит файлы (azure.yaml и infra каталог), создающие безопасную архитектуру по умолчанию со следующими ресурсами Azure:
- Группа ресурсов: контейнер для всех созданных ресурсов.
- План службы приложений: определяет вычислительные ресурсы для службы приложений. Создается план Linux на уровне "Базовый ".
- App Service: представляет ваше приложение и работает в плане App Service.
- Виртуальная сеть: интегрирована с приложением службы приложений и изолирует внутренний сетевой трафик.
- Частные конечные точки: доступ к конечным точкам для хранилища ключей и кэша Redis в виртуальной сети.
- Сетевые интерфейсы: представляет частные IP-адреса, по одному для каждой из частных конечных точек.
- Гибкий сервер Базы данных Azure для PostgreSQL: доступен только из виртуальной сети. На сервере создаются база данных и пользователь для вас.
- Частная зона DNS: включает разрешение DNS сервера PostgreSQL в виртуальной сети.
- Рабочая область Log Analytics: выступает в качестве целевого контейнера для вашего приложения для отправки журналов, где можно также запрашивать журналы.
- Кэш Azure для Redis: доступен только через приватную конечную точку.
- Хранилище ключей: доступно только из собственного частного конечного узла. Используется для управления секретами в приложении App Service.
Когда команда завершит создание ресурсов и развертывание кода приложения в первый раз, развернутое пример приложения еще не работает, так как необходимо внести небольшие изменения, чтобы подключиться к базе данных в Azure.
Есть проблемы? Ознакомьтесь с разделом "Устранение неполадок".
3. Использование строки подключения к базе данных
Шаблон AZD, который вы используете, сгенерировал переменные подключения для вас уже в качестве параметров приложения и выводит их в терминал для вашего удобства. Настройки приложения — это один из способов уберечь секреты подключения от попадания в ваш репозиторий кода.
В выходных данных AZD найдите параметры
AZURE_POSTGRESQL_USER
,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: <URL>
В SSH-сессии выполните команду
python manage.py migrate
. Если это удается, служба приложений успешно подключается к базе данных.Замечание
Только изменения файлов в
/home
могут сохраняться после перезапуска приложения. Изменения за пределами/home
не сохраняются.
Есть проблемы? Ознакомьтесь с разделом "Устранение неполадок".
6. Перейдите к приложению
В выводе AZD найдите URL вашего приложения и откройте его в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL>
Добавьте несколько ресторанов в список.
Поздравляем, вы запускаете веб-приложение в службе приложение 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 найдите ссылку для потоковой передачи журналов службы приложений и перейдите по ней в браузере.
Stream App Service logs at: <URL>
Узнайте больше о логгировании в 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
). Без этой строки подключения команда migrate не может взаимодействовать с базой данных.
Часто задаваемые вопросы
- Сколько стоит эта настройка?
- Как подключиться к серверу 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 в входящих запросах. Пример кода использует
WEBSITE_HOSTNAME
переменную среды в Службе приложений для добавления доменного имени приложения в параметр ALLOWED_HOSTS Django.# 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, и его middleware добавлено в список.
# 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
. Закоммитьте и отправьте свои изменения, чтобы инициировать очередное развертывание на App Service.
У меня нет полномочий на создание идентификатора, назначаемого пользователем
См. статью "Настройка развертывания 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: