часто задаваемые вопросы о Служба приложений Azure в Linux

Примечание.

Эта статья оказалась полезной? Ваш вклад важен для нас. Используйте кнопку Отзыв на этой странице, чтобы сообщить нам, насколько хорошо эта статья работает для вас или как мы можем ее улучшить.

С выпуском Служба приложений в Linux мы работаем над добавлением функций и улучшением нашей платформы. В этой статье содержатся ответы на вопросы, которые наши клиенты задавали нам в последнее время.

Если у вас есть вопрос, прокомментируйте эту статью.

Встроенные образы

Я хочу создать вилку встроенных контейнеров Docker, которые предоставляет платформа. Где можно найти эти файлы?

Все файлы Docker можно найти на сайте GitHub.

Каковы ожидаемые значения для раздела Файл запуска при настройке стека среды выполнения?

Стека Ожидаемое значение
Java SE команда для запуска jar-приложения (например, java -jar /home/site/wwwroot/app.jar --server.port=80)
Tomcat расположение скрипта для выполнения любых необходимых конфигураций (например, /home/site/deployments/tools/startup_script.sh).
Node.js файл конфигурации PM2 или файл скрипта
.NET Core скомпилированное имя БИБЛИОТЕКи DLL как dotnet <myapp>.dll
PHP необязательный настраиваемый запуск
Python необязательный скрипт запуска
Ruby Скрипт Ruby, с помощью которого вы хотите инициализировать приложение;

Эти команды или скрипты выполняются после запуска встроенного контейнера Docker, но перед запуском кода приложения.

Управление

Что происходит при нажатии кнопки перезапуска в портал Azure?

Это действие совпадает с перезапуском Docker.

Можно ли использовать Secure Shell (SSH) для подключения к виртуальной машине контейнера приложений?

Да, это можно сделать с помощью сайта управления версиями (SCM).

Примечание.

Вы также можете подключиться к контейнеру приложений непосредственно с локального компьютера разработки с помощью SSH, SFTP или Visual Studio Code (для динамической отладки Node.js приложений). Дополнительные сведения см. в статье Удаленная отладка и SSH в Служба приложений в Linux.

Как создать план Служба приложений Linux с помощью пакета SDK или шаблона Resource Manager Azure?

Задайте для зарезервированного поля службы приложений значение true.

Непрерывная интеграция и развертывание

Мое веб-приложение по-прежнему использует старый образ контейнера Docker после обновления образа на Docker Hub. Поддерживаете ли вы непрерывную интеграцию и развертывание пользовательских контейнеров?

Да, чтобы настроить непрерывную интеграцию или развертывание для Реестр контейнеров Azure или DockerHub, выполнив команду Непрерывное развертывание с веб-приложением для контейнеров. Для частных реестров можно обновить контейнер, остановив, а затем запустив веб-приложение. Вы также можете изменить или добавить фиктивный параметр приложения, чтобы принудительно обновить контейнер.

Поддерживаете ли вы промежуточные среды?

Да.

Можно ли использовать "WebDeploy/MSDeploy" для развертывания веб-приложения?

Да, необходимо задать для параметра приложения значение WEBSITE_WEBDEPLOY_USE_SCMfalse.

Развертывание Git моего приложения завершается сбоем при использовании веб-приложения Linux. Как обойти проблему?

Если развертывание Git не работает с веб-приложением Linux, выберите один из следующих вариантов для развертывания кода приложения:

  • Используйте функцию непрерывной доставки (предварительная версия): исходный код приложения можно хранить в репозитории Git Azure DevOps или репозитории GitHub, чтобы использовать непрерывную доставку Azure. Дополнительные сведения см. в разделе Настройка непрерывной доставки для веб-приложения Linux.

  • Используйте API развертывания ZIP: чтобы использовать этот API, SSH в веб-приложении и перейдите в папку, в которой вы хотите развернуть код. Выполните следующий код:

    curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
    

    Если появляется сообщение об ошибке curl о том, что команда не найдена, убедитесь, что вы установили curl с помощью команды apt-get install curl перед выполнением предыдущей curl команды.

Поддержка языка

Я хочу использовать веб-сокеты в приложении Node.js, какие-либо специальные параметры или конфигурации для настройки?

Да, отключите perMessageDeflate в коде серверной Node.js. Например, если вы используете socket.io, используйте следующий код:

const io = require('socket.io')(server,{
  perMessageDeflate :false
});

Поддерживаете ли вы некомпилированные приложения .NET Core?

Да.

Поддерживаете ли вы Composer в качестве диспетчера зависимостей для приложений PHP?

Да, во время развертывания Git Kudu должен обнаружить, что вы развертываете приложение PHP (благодаря наличию файла composer.lock), и Kudu запустит установку composer.

Пользовательские контейнеры

Можно ли использовать управляемые удостоверения с Служба приложений при извлечении изображений из ACR?

Да, эта функция доступна в Azure CLI. Можно использовать удостоверения, назначаемые системой или пользователем . Эта функция в настоящее время не поддерживается в портал Azure.

Я использую собственный пользовательский контейнер. Я хочу, чтобы платформа подключала общую папку SMB к каталогу "/home/".

Если WEBSITES_ENABLE_APP_SERVICE_STORAGE параметр не указан или имеет значение false, /home/ каталог не будет совместно использоваться в экземплярах масштабирования, а записанные файлы не будут сохраняться при перезапуске. Если явно задать WEBSITES_ENABLE_APP_SERVICE_STORAGE значение true , подключение будет включаться. Если для этого параметра задано значение true, если вы хотите отключить подключение, необходимо явно установить значение WEBSITES_ENABLE_APP_SERVICE_STORAGEfalse.

Не удается запустить контейнер с "на устройстве не осталось места". Что означает эта ошибка?

Служба приложений в Linux использует два разных типа хранилища:

  • Хранилище файловой системы. Хранилище файловой системы входит в квоту плана Служба приложений. Он используется при сохранении файлов в постоянное хранилище, которое находится в каталоге /home .
  • Место на диске узла. Место на диске узла используется для хранения образов контейнеров. Он управляется платформой с помощью драйвера хранилища Docker.

Место на диске узла отделяется от квоты хранилища файловой системы. Он не является расширяемым, и для каждого экземпляра существует ограничение в 15 ГБ. Он используется для хранения любых пользовательских образов в рабочей роли. Возможно, вы сможете использовать более 15 ГБ в зависимости от точной доступности места на диске узла, но это не гарантируется.

Если уровень контейнера, доступный для записи, сохраняет данные за пределами /home каталога или подключенного пути к хранилищу Azure, также будет использовано место на диске узла.

Платформа регулярно очищает место на диске узла, чтобы удалить неиспользуемые контейнеры. Если контейнер записывает большое количество данных за пределами /home каталога или byOS, это приведет к сбоям при запуске или исключениям среды выполнения после превышения ограничения места на диске узла.

Рекомендуется сохранять образы контейнеров как можно меньше и записывать данные в постоянное хранилище или BYOS при запуске в Linux Служба приложений. Если это невозможно, необходимо разделить план Служба приложений, так как место на диске узла фиксированное и совместное между всеми контейнерами в плане Служба приложений.

Запуск настраиваемого контейнера занимает много времени, и платформа перезапускает контейнер до завершения запуска.

Вы можете настроить время ожидания платформы перед перезапуском контейнера. Для этого задайте WEBSITES_CONTAINER_START_TIME_LIMIT для параметра приложения нужное значение. Значение по умолчанию — 230 секунд, а максимальное — 1800 секунд.

Каков формат URL-адреса частного сервера реестра?

Укажите полный URL-адрес реестра, включая http:// или https://.

Каков формат имени образа в параметре частного реестра?

Добавьте полное имя образа, включая URL-адрес частного реестра (например, myacr.azurecr.io/dotnet:latest). Имена изображений, использующих пользовательский порт, невозможно ввести на портале. Чтобы задать docker-custom-image-name, используйте программу команднойaz строки.

Можно ли предоставить несколько портов в пользовательском образе контейнера?

Мы не поддерживаем предоставление более одного порта.

Можно ли использовать собственное хранилище?

Почему не удается просмотреть файловую систему пользовательского контейнера или выполняемые процессы с сайта SCM?

Сайт SCM выполняется в отдельном контейнере. Вы не можете проверка файловую систему или запущенные процессы контейнера приложений.

Нужно ли реализовывать ПРОТОКОЛ HTTPS в пользовательском контейнере?

Нет, платформа обрабатывает завершение HTTPS на общих внешних интерфейсах.

Нужно ли использовать WEBSITES_PORT для пользовательских контейнеров?

Да, это необходимо для пользовательских контейнеров. Чтобы вручную настроить пользовательский порт, используйте инструкцию EXPOSE в Dockerfile и параметр приложения WEBSITES_PORT со значением порта для привязки к контейнеру.

Можно ли использовать ASPNETCORE_URLS в образе Docker?

Да, перезапишите переменную среды перед запуском приложения .NET Core. Например, в скрипте init.sh экспортируйте ASPNETCORE_URLS={Ваше значение}

Многоконтейнерный с Docker Compose

Разделы справки настроить Реестр контейнеров Azure (ACR) для использования с несколькими контейнерами?

Чтобы использовать ACR с несколькими контейнерами, все образы контейнеров должны размещаться на одном сервере реестра ACR. Когда они находятся на том же сервере реестра, вам потребуется создать параметры приложения, а затем обновить файл конфигурации Docker Compose, указав имя образа ACR.

Создайте следующие параметры приложения:

  • DOCKER_REGISTRY_SERVER_USERNAME
  • DOCKER_REGISTRY_SERVER_URL (полный URL-адрес, например ) https://<server-name>.azurecr.io
  • DOCKER_REGISTRY_SERVER_PASSWORD (включение доступа администратора в параметрах ACR)

В файле конфигурации составьте ссылку на образ ACR, как показано в следующем примере:

image: <server-name>.azurecr.io/<image-name>:<tag>

Разделы справки знаете, какой контейнер доступен в Интернете?

  • Для доступа можно открыть только один контейнер.
  • Доступны только порты 80 и 8080 (доступные порты)

Ниже приведены правила для определения того, какой контейнер доступен в порядке приоритета:

  • Для параметра WEBSITES_WEB_CONTAINER_NAME приложения задано имя контейнера
  • Первый контейнер для определения порта 80 или 8080
  • Если ни один из указанных выше аргументов не имеет значения true, первый контейнер, определенный в файле, будет доступен (предоставляется).

Разделы справки использовать depends_on?

Параметр depends_onне поддерживается на Служба приложений, и он будет игнорироваться. Как и рекомендации docker по управлению запуском и завершением работы, Служба приложений многоконтейнерные приложения должны проверка зависимости с помощью кода приложения — как при запуске, так и при отключении. В приведенном ниже примере кода показано, как приложение Python проверяет, запущен ли контейнер Redis.

import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello from Azure App Service team! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=80, debug=True)

Веб-сокеты

Веб-сокеты поддерживаются в приложениях Linux. Параметр webSocketsEnabled ARM не применяется к приложениям Linux, так как веб-сокеты всегда включены для Linux.

Важно!

Веб-сокеты теперь поддерживаются для приложений Linux в планах "Бесплатный Служба приложений". Мы поддерживаем до пяти подключений к веб-сокетам в планах free Служба приложений. Превышение этого ограничения приводит к ответу HTTP 429 (слишком много запросов).

Цены и соглашение об уровне обслуживания

Какова цена, теперь, когда служба стала общедоступной?

Цены зависят от номера SKU и региона, но дополнительные сведения см. на нашей странице цен Служба приложений цены.

Другие вопросы

Как работает запрос на прогревание контейнера?

Когда приложение Azure Services запускает контейнер, запрос на прогревание отправляет HTTP-запрос в конечную точку /robots933456.txt приложения. Это просто фиктивная конечная точка, но приложение должно ответить любым кодом состояния, отличным от 5XX. Если логика приложения не отвечает с кодом состояния HTTP на несуществующие конечные точки, запрос на прогревание не может получить ответ и он постоянно перезапускает контейнер. Запрос на прогревание также может завершиться ошибкой из-за неправильной настройки порта.

Чтобы убедиться, что порт правильно настроен в службах приложение Azure, см. вопрос Разделы справки указать порт в контейнере Linux?

Можно ли увеличить время ожидания запроса на прогревание контейнера?

Запрос на прогревание по умолчанию завершается ошибкой после ожидания 240 секунд ответа от контейнера. Вы можете увеличить время ожидания запроса на прогревание контейнера, добавив параметр WEBSITES_CONTAINER_START_TIME_LIMIT приложения со значением от 240 до 1800 секунд.

Разделы справки указать порт в контейнере Linux?

Тип контейнера Описание Настройка и использование порта
Встроенные контейнеры Если выбрать версию языка или платформы для приложения Linux, вам будет выбран стандартный контейнер. Чтобы указать код приложения на правильный порт, используйте переменную среды PORT.
Пользовательские контейнеры У вас есть полный контроль над контейнером. Служба приложений не контролирует, какой порт прослушивает контейнер. Ему нужно знать, на какой порт переадресовывать запросы. Если контейнер прослушивает порт 80 или 8080, Служба приложений может автоматически обнаружить его. Если он прослушивает любой другой порт, необходимо задать для параметра приложения WEBSITES_PORT номер порта и Служба приложений перенаправит запросы на этот порт в контейнере. Параметр приложения WEBSITES_PORT не действует в контейнере, и вы не можете получить к нему доступ как к переменной среды в контейнере.

Можно ли использовать базу данных на основе файлов (например, SQLite) с веб-приложением Linux?

Файловая система приложения — это подключенная сетевая папка. Это позволяет масштабировать сценарии, в которых код должен выполняться на нескольких узлах. К сожалению, это блокирует использование поставщиков баз данных на основе файлов, таких как SQLite, так как невозможно получить монопольные блокировки для файла базы данных. Мы рекомендуем использовать управляемую службу базы данных: Azure SQL, База данных Azure для MySQL или База данных Azure для PostgreSQL

Какие символы поддерживаются в именах параметров приложения?

Для параметров приложения можно использовать только буквы (A–Z, a–z), цифры (0–9) и символ подчеркивания (_).

Где можно запросить новые функции?

Вы можете отправить свою идею на форуме отзывов веб-приложения. Добавьте "[Linux]" в название идеи.