развертыванию веб-приложения Python (Django или Flask) с PostgreSQL в Azure
В этом руководстве вы развернете веб-приложение Python на основе данных (Django или Flask) в службе приложение Azure с помощью службы реляционной базы данных База данных Azure для PostgreSQL. поддержка службы приложение AzurePython в среде сервера Linux.
Чтобы завершить работу с этим руководством, вам потребуется:
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Знание Python с функциями разработки Flask или Python с функциями разработки Django
- Учетная запись Azure с активной подпиской. Если у вас нет учетной записи Azure, ее можно создать бесплатно.
- Установлен интерфейс командной строки разработчика Azure. Вы можете выполнить действия с помощью Azure Cloud Shell , так как он уже установлен с помощью Интерфейса командной строки разработчика Azure.
- Знание Python с функциями разработки Flask или Python с функциями разработки Django
Перейти к концу
С установленным интерфейсом командной строки разработчика Azure можно развернуть полностью настроенный пример приложения, показанного в этом руководстве, и увидеть его выполнение в Azure. Просто выполните следующие команды в пустом рабочем каталоге:
azd auth login
azd init --template msdocs-flask-postgresql-sample-app
azd up
Пример приложения
Примеры приложений Python, использующих платформу Flask и Django, помогут вам выполнить инструкции в этом учебнике. Чтобы развернуть их без локального запуска, пропустите эту часть.
Чтобы запустить приложение локально, убедитесь, что на локальном компьютере установлен Python 3.7 или более поздней версии и PostgreSQL . Затем клонируйте ветвь примера репозитория starter-no-infra
и перейдите в корневой каталог репозитория.
git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
Создайте файл .env, как показано ниже, используя файл .env.sample в качестве руководства. Настройте для параметра DBNAME
имя существующей базы данных в локальном экземпляре PostgreSQL. Задайте значения DBHOST
, DBUSER
и DBPASS
в соответствии с настройками локального экземпляра PostgreSQL.
DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>
Создайте виртуальную среду для приложения:
py -m venv .venv
.venv\scripts\activate
Установка зависимостей:
pip install -r requirements.txt
Запустите пример приложения со следующими командами:
# Run database migration
flask db upgrade
# Run the app at http://127.0.0.1:5000
flask run
1. Создание Служба приложений и PostgreSQL
В этом шаге вы создадите ресурсы Azure. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включающих Служба приложений и База данных Azure для PostgreSQL. В процессе создания вы укажете следующее:
- Имя веб-приложения. Это имя используется в составе DNS-имени вашего веб-приложения в виде
https://<app-name>.azurewebsites.net
. - Регион для физического запуска приложения.
- Стек среды выполнения для приложения. Здесь вы выбираете версию Python, используемую для вашего приложения.
- План размещения для приложения. Это ценовая категория, которая включает набор функций и емкость масштабирования для вашего приложения.
- Группа ресурсов для приложения. Группа ресурсов позволяет группировать (в логическом контейнере) все ресурсы Azure, необходимые для приложения.
Войдите на портал Azure и выполните следующие действия, чтобы создать ресурсы Службы приложений Azure.
Шаг 1. В портал Azure:
- Введите "веб-приложение база данных" в строке поиска в верхней части портала Azure.
- Выберите элемент с меткой Веб-приложение и база данных под заголовком Marketplace. Вы также можете перейти напрямую к мастеру создания.
Шаг 2. На странице "Создание веб-приложения + база данных " заполните форму следующим образом.
- Группа ресурсов → выбрать создать и использовать имя msdocs-python-postgres-tutorial.
- Регион → любой ближайший к вам регион Azure.
- Имя → msdocs-python-postgres-XYZ, где XYZ является тремя случайными символами. Это имя должно быть уникальным в Azure.
- Стек среды выполнения → Python 3.10.
- База данных → PostgreSQL — гибкий сервер по умолчанию выбирается в качестве ядра СУБД. Имя сервера и имя базы данных также задаются по умолчанию соответствующими значениями.
- План размещения — Базовый. Позже, когда все будет готово, вы сможете вертикально увеличить масштаб до рабочей ценовой категории.
- Выберите Review + create (Просмотреть и создать).
- После завершения проверки щелкните Создать.
Шаг 3. Развертывание занимает несколько минут. После завершения развертывания нажмите кнопку Перейти к ресурсу. Вы перейдете непосредственно в приложение Службы приложений, но будут созданы следующие ресурсы:
- Группа ресурсов — Контейнер для всех созданных ресурсов.
- План службы приложений — определяет вычислительные ресурсы для Службы приложений. Создается план Linux на уровне Базовый.
- Служба приложений — представляет приложение и выполняется в плане службы приложений.
- Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
- База данных Azure для PostgreSQL гибкий сервер → доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
- Частная зона DNS зона → включает разрешение DNS сервера PostgreSQL в виртуальной сети.
2. Проверка параметров подключения
Мастер создания создал переменные подключения для вас уже в качестве параметров приложения. Параметры приложения — это один из способов сохранения секретов подключения из репозитория кода. Когда вы будете готовы переместить секреты в более безопасное расположение, ознакомьтесь со статьей по хранению в Azure Key Vault.
Шаг 1. На странице Служба приложений в меню слева выберите "Конфигурация".
Шаг 2. На вкладке "Параметры приложения" на странице "Конфигурация" убедитесь, что AZURE_POSTGRESQL_CONNECTIONSTRING
он присутствует. Это будет внедрено в среду выполнения в качестве переменной среды.
Шаг 3. В терминале или командной строке выполните следующий скрипт Python, чтобы создать уникальный секрет: python -c 'import secrets; print(secrets.token_hex())'
Скопируйте выходное значение, которое будет использоваться на следующем шаге.
3. Развертывание примера кода
На этом шаге вы настроите развертывание GitHub с помощью GitHub Actions. Это всего лишь один из множества способов развертывания в Службе приложений, но это также отличный способ обеспечения непрерывной интеграции в процессе развертывания. По умолчанию каждая команда git push
из репозитория GitHub запускает действие сборки и развертывания.
Шаг 1. В новом окне браузера:
- Войдите в свою учетную запись GitHub.
- Перейдите к https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app.
- Выберите Создать вилку.
- Щелкните Создать вилку.
Шаг 2. На странице GitHub откройте Visual Studio Code в браузере, нажав клавишу .
.
Шаг 3. В Visual Studio Code в браузере откройте azureproject/production.py в обозревателе. См. переменные среды, используемые в рабочей среде, включая параметры приложения, которые вы видели на странице конфигурации.
Шаг 4. Вернитесь на страницу Служба приложений в меню слева выберите Центр развертывания.
Шаг 5. На странице Центра развертывания:
- В поле Источник выберите GitHub. По умолчанию в качестве поставщика сборки выбрано GitHub Actions.
- Войдите в свою учетную запись GitHub и следуйте инструкциям по авторизации Azure.
- В поле Организация выберите свою учетную запись.
- В репозитории выберите msdocs-flask-postgresql-sample-app.
- В поле Ветвь выберите main.
- Сохраните параметр по умолчанию, чтобы добавить рабочий процесс.
- В разделе " Тип проверки подлинности" выберите удостоверение, назначаемое пользователем.
- В меню сверху выберите Сохранить. Служба приложений фиксирует файл рабочего процесса в выбранном репозитории GitHub в каталоге
.github/workflows
.
Шаг 6. На странице Центра развертывания:
- Выберите Журналы. Прогон развертывания уже запущен.
- В элементе журнала для прогона развертывания выберите Журналы сборки и развертывания.
Шаг 7. Вы перейдете в репозиторий GitHub и увидите, что действие GitHub выполняется. Файл рабочего процесса определяет два отдельных этапа: сборку и развертывание. Дождитесь, пока в выполнении действия GitHub не будет показано состояние Завершено. Это занимает около 5 минут.
Возникли проблемы? Ознакомьтесь с руководством по устранению неполадок.
4. Создание схемы базы данных
С помощью базы данных PostgreSQL, защищенной виртуальной сетью, проще всего запустить миграцию баз данных Flask в сеансе SSH с контейнером Служба приложений.
Шаг 1. Назад на странице Служба приложений в меню слева
- Выберите SSH.
- Выберите Перейти.
Шаг 2. В терминале SSH выполните команду flask db upgrade
. При успешном завершении Служба приложений успешно подключается к базе данных.
После перезапуска приложения могут сохраняться только изменения в файлах в /home
. Изменения за пределами /home
не сохраняются.
5. Перейдите к приложению
Шаг 1. На странице Служба приложений:
- В меню слева выберите Обзор.
- Выберите URL-адрес своего приложения. Также можно перейти непосредственно по адресу
https://<app-name>.azurewebsites.net
.
Шаг 2. Добавьте в список несколько ресторанов. Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных Azure для PostgreSQL.
6. Потоковая передача журналов диагностики
Служба приложений Azure захватывает все сообщения, выводимые на консоль, чтобы помочь в диагностике проблем с приложением. Пример приложения включает инструкции print()
для демонстрации этой возможности, как показано ниже.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Шаг 1. На странице Служба приложений:
- В меню слева выберите Журналы службы приложений.
- Под элементом Ведение журнала приложения выберите Файловая система.
- В меню сверху выберите Сохранить.
Шаг 2. В меню слева выберите поток журналов. Вы увидите журналы для своего приложения, включая журналы платформы и журналы из контейнера.
Дополнительные сведения о ведении журнала в приложениях Python в серии о настройке Azure Monitor для приложения Python.
7. Очистка ресурсов
По завершении работы можно удалить все ресурсы из вашей подписки Azure, удалив соответствующую группу ресурсов.
Шаг 1. В строке поиска в верхней части портал Azure:
- Введите имя группы ресурсов.
- Выберите группу ресурсов.
Шаг 2. На странице группы ресурсов выберите "Удалить группу ресурсов".
Шаг 3.
- Введите имя группы ресурсов для подтверждения удаления.
- Выберите команду Удалить.
1. Создание ресурсов Azure и развертывание примера приложения
На этом шаге вы создадите ресурсы Azure и развернете пример приложения для Служба приложений в Linux. Действия, используемые в этом руководстве, создают набор безопасных ресурсов по умолчанию, включающих Служба приложений и База данных Azure для PostgreSQL.
Если вы еще не сделали этого, клонируйте ветвь примера репозитория
starter-no-infra
в локальном терминале.git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app cd msdocs-flask-postgresql-sample-app
Эта клонированная ветвь является отправной точкой. Он содержит простое приложение Flask для дисков данных.
Выполните команду
azd init
из корневого каталога репозитория.azd init --template python-app-service-postgresql-infra
При появлении запроса укажите следующие ответы:
Вопрос Ответ Текущий каталог не пуст. Вы хотите инициализировать проект здесь в каталоге<>? Y Что вы хотите сделать с этими файлами? Сохранение существующих файлов без изменений Введите новое имя среды Введите уникальное имя. Шаблон azd использует это имя как часть DNS-имени веб-приложения в Azure ( <app-name>.azurewebsites.net
). Разрешены буквенно-цифровые символы и дефисы.azd up
Выполните команду, чтобы подготовить необходимые ресурсы Azure и развернуть код приложения. Если вы еще не вошли в Azure, браузер запустит и попросит вас войти. Командаazd up
также предложит выбрать нужную подписку и расположение для развертывания.azd up
Выполнение
azd up
команды может занять несколько минут. Он также компилирует и развертывает код приложения, но вы измените код позже, чтобы работать с Служба приложений. Во время выполнения команда предоставляет сообщения о процессе подготовки и развертывания, включая ссылку на развертывание в Azure. По завершении команда также отображает ссылку на приложение развертывания.Этот шаблон azd содержит файлы (azure.yaml и инфракрасный каталог), создающие безопасную архитектуру по умолчанию со следующими ресурсами Azure:
- Группа ресурсов — Контейнер для всех созданных ресурсов.
- План службы приложений — определяет вычислительные ресурсы для Службы приложений. Указан план Linux на уровне B1 .
- Служба приложений — представляет приложение и выполняется в плане службы приложений.
- Виртуальная сеть — интегрирована с приложением Службы приложений и изолирует внутренний сетевой трафик.
- База данных Azure для PostgreSQL гибкий сервер → доступен только из виртуальной сети. База данных и пользователь создаются на этом сервере.
- Частная зона DNS зона → включает разрешение DNS сервера PostgreSQL в виртуальной сети.
- Рабочая область Log Analytics → выступает в качестве целевого контейнера для вашего приложения для отправки журналов, где можно также запросить журналы.
2. Использование базы данных строка подключения
Шаблон azd, который вы используете, создали переменные подключения для вас уже в качестве параметров приложения и выводит их в терминал для удобства. Параметры приложения — это один из способов сохранения секретов подключения из репозитория кода.
В выходных данных azd найдите параметры приложения и найдите параметры
AZURE_POSTGRESQL_CONNECTIONSTRING
иAZURE_REDIS_CONNECTIONSTRING
. Чтобы обеспечить безопасность секретов, отображаются только имена параметров. Они выглядят следующим образом в выходных данных azd:App Service app has the following settings: - AZURE_POSTGRESQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - FLASK_DEBUG - SCM_DO_BUILD_DURING_DEPLOYMENT - SECRET_KEY
AZURE_POSTGRESQL_CONNECTIONSTRING
содержит строка подключения в базу данных Postgres в Azure иAZURE_REDIS_CONNECTIONSTRING
содержит строка подключения в кэш Redis в Azure. Для подключения к нему необходимо использовать свой код. Откройте azureproject/production.py, раскомментируйте следующие строки и сохраните файл:conn_str = os.environ['AZURE_POSTGRESQL_CONNECTIONSTRING'] conn_str_params = {pair.split('=')[0]: pair.split('=')[1] for pair in conn_str.split(' ')} DATABASE_URI = 'postgresql+psycopg2://{dbuser}:{dbpass}@{dbhost}/{dbname}'.format( dbuser=conn_str_params['user'], dbpass=conn_str_params['password'], dbhost=conn_str_params['host'], dbname=conn_str_params['dbname'] )
Теперь код приложения настроен для подключения к базе данных PostgreSQL в Azure. Если вы хотите, откройте
app.py
и посмотрите, какDATABASE_URI
используется переменная среды.В окне терминале выполните команду
azd deploy
.azd deploy
4. Создание схемы базы данных
С помощью базы данных PostgreSQL, защищенной виртуальной сетью, проще всего запустить миграцию баз данных Flask в сеансе SSH с контейнером Служба приложений.
В выходных данных azd найдите URL-адрес сеанса SSH и перейдите к нему в браузере. Это выглядит следующим образом в выходных данных:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
В терминале SSH выполните команду
flask db upgrade
. При успешном завершении Служба приложений успешно подключается к базе данных.Примечание.
После перезапуска приложения могут сохраняться только изменения в файлах в
/home
. Изменения за пределами/home
не сохраняются.
5. Перейдите к приложению
В выходных данных azd найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Добавьте несколько ресторанов в список.
Поздравляем, вы запускаете веб-приложение в службе приложение Azure с безопасным подключением к База данных Azure для PostgreSQL.
6. Потоковая передача журналов диагностики
служба приложение Azure может записывать журналы консоли для диагностики проблем с приложением. Для удобства шаблон azd уже включил ведение журнала в локальную файловую систему , а также доставку их в рабочую область Log Analytics.
Пример приложения содержит print()
инструкции для демонстрации этой возможности, как показано в следующем фрагменте кода.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
В выходных данных 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.
7. Очистка ресурсов
Чтобы удалить все ресурсы Azure в текущей среде развертывания, выполните команду azd down
.
azd down
Устранение неполадок
Ниже приведены проблемы, которые могут возникнуть при попытке работы с этим руководством и инструкциями по их устранению.
Не удается подключиться к сеансу SSH
Если вы не можете подключиться к сеансу SSH, само приложение не удалось запустить. Дополнительные сведения см. в журналах диагностики . Например, если вы видите ошибку, KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'
это может означать, что переменная среды отсутствует (возможно, вы удалили параметр приложения).
При выполнении миграции базы данных возникает ошибка
Если возникают какие-либо ошибки, связанные с подключением к базе данных, проверьте, были ли изменены параметры приложения (AZURE_POSTGRESQL_CONNECTIONSTRING
). Без этого строка подключения команда миграции не может взаимодействовать с базой данных.
Часто задаваемые вопросы
- Сколько стоит такая конфигурация?
- Разделы справки подключиться к серверу PostgreSQL, защищенному за виртуальной сетью с другими средствами?
- Как осуществляется разработка локальных приложений с использованием GitHub Actions?
- Как настроен пример Django для запуска в службе приложение Azure?
Сколько стоит такая конфигурация?
Цены на созданные ресурсы приведены следующим образом:
- План службы приложений создается на уровне Базовый, и его можно масштабировать вверх или вниз. См. цены на Службу приложений.
- Гибкий сервер 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?
Примечание.
Если вы используете это руководство с собственным приложением, просмотрите описание файла requirements.txt в файле README.md проекта (Flask, Django), чтобы узнать, какие пакеты вам понадобятся.
Пример приложения 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.
Следующие шаги
Перейдите к следующему руководству, чтобы узнать, как защитить приложение с помощью личного домена и сертификата.
Узнайте, как Служба приложений запускает приложение Python: