Observação
Esse artigo foi útil? Sua opinião é importante para nós. Use o botão Comentários nesta página para nos informar o quão bem este artigo funcionou para você ou como podemos melhorá-lo.
Com a versão do Serviço de Aplicativo no Linux, estamos trabalhando em adicionar recursos e fazer melhorias em nossa plataforma. Este artigo fornece respostas para perguntas que nossos clientes têm nos feito recentemente.
Se você tiver uma pergunta, comente este artigo.
Imagens internas
Quero bifurcar os contêineres internos do Docker que a plataforma fornece. Onde posso encontrar esses arquivos?
Você pode encontrar todos os arquivos do Docker no GitHub.
Quais são os valores esperados para a seção Arquivo de Inicialização quando configuro a pilha de runtime?
Pilha | Valor esperado |
---|---|
Java SE | o comando para iniciar seu aplicativo JAR (por exemplo, java -jar /home/site/wwwroot/app.jar --server.port=80 ) |
Tomcat | o local de um script para executar as configurações necessárias (por exemplo, /home/site/deployments/tools/startup_script.sh ) |
Node.js | o arquivo de configuração PM2 ou seu arquivo de script |
.NET Core | o nome DLL compilado como dotnet <myapp>.dll |
PHP | inicialização personalizada opcional |
Python | script de inicialização opcional |
Ruby | o script Ruby com o qual você deseja inicializar seu aplicativo |
Esses comandos ou scripts são executados após o início do contêiner interno do Docker, mas antes de o código do aplicativo ser iniciado.
Gerenciamento
O que acontece quando eu pressionar o botão reiniciar no portal do Azure?
Essa ação é a mesma que uma reinicialização do Docker.
Posso usar o Secure Shell (SSH) para me conectar à VM (máquina virtual de contêiner de aplicativo)?
Sim, você pode fazer isso por meio do site do SCM (gerenciamento de controle de origem).
Observação
Você também pode se conectar ao contêiner de aplicativo diretamente do computador de desenvolvimento local usando SSH, SFTP ou Visual Studio Code (para depuração dinâmica Node.js aplicativos). Para obter mais informações, consulte Depuração remota e SSH no Serviço de Aplicativo no Linux.
Como posso criar um plano de Serviço de Aplicativo linux por meio de um SDK ou um modelo de Resource Manager do Azure?
Defina o campo reservado do serviço de aplicativo como true.
Integração e implantação contínuas
Meu aplicativo Web ainda usa uma imagem antiga do contêiner do Docker depois que atualizei a imagem no Docker Hub. Você dá suporte à integração contínua e à implantação de contêineres personalizados?
Sim, para configurar a integração/implantação contínua para Registro de Contêiner do Azure ou DockerHub, seguindo a Implantação Contínua com o Aplicativo Web para Contêineres. Para registros privados, você pode atualizar o contêiner parando e iniciando seu aplicativo Web. Ou você pode alterar ou adicionar uma configuração de aplicativo fictício para forçar uma atualização do contêiner.
Você dá suporte a ambientes de preparo?
Sim.
Posso usar 'WebDeploy/MSDeploy' para implantar meu aplicativo Web?
Sim, você precisa definir uma configuração de aplicativo chamada WEBSITE_WEBDEPLOY_USE_SCM
como false.
A implantação do git do meu aplicativo falha ao usar o aplicativo Web Linux. Como posso resolver o problema?
Se a implantação do Git falhar no aplicativo Web do Linux, escolha uma das seguintes opções para implantar o código do aplicativo:
Use o recurso de Entrega Contínua (Versão Prévia): você pode armazenar o código-fonte do aplicativo em um repositório Git do Azure DevOps ou no repositório GitHub para usar a Entrega Contínua do Azure. Para obter mais informações, consulte Como configurar a Entrega Contínua para o aplicativo Web Linux.
Use a API de implantação zip: para usar essa API, o SSH em seu aplicativo Web e vá para a pasta em que deseja implantar seu código. Execute o seguinte código:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
Se você receber um erro de que o
curl
comando não foi encontrado, instale o curl usandoapt-get install curl
antes de executar o comando anteriorcurl
.
Suporte a idiomas
Quero usar soquetes da Web no meu aplicativo Node.js, configurações ou configurações especiais a serem definidas?
Sim, desabilite perMessageDeflate
no código de Node.js do lado do servidor. Por exemplo, se você estiver usando socket.io, use o seguinte código:
const io = require('socket.io')(server,{
perMessageDeflate :false
});
Você dá suporte a aplicativos .NET Core nãocompilados?
Sim.
Você dá suporte ao Composer como gerenciador de dependências para aplicativos PHP?
Sim, durante uma implantação do Git, Kudu deve detectar que você está implantando um aplicativo PHP (graças à presença de um arquivo composer.lock) e Kudu disparará uma instalação de compositor.
Contêineres personalizados
Posso usar identidades gerenciadas com Serviço de Aplicativo ao extrair imagens do ACR?
Sim, essa funcionalidade está disponível na CLI do Azure. Você pode usar identidades atribuídas pelo sistema ou atribuídas pelo usuário . No momento, essa funcionalidade não tem suporte no portal do Azure.
Estou usando meu próprio contêiner personalizado. Quero que a plataforma monte um compartilhamento SMB no diretório '/home/'.
Se WEBSITES_ENABLE_APP_SERVICE_STORAGE
a configuração não for especificada ou definida como false, o /home/
diretório não será compartilhado entre instâncias de escala e os arquivos gravados não persistirão entre reinicializações. Definir explicitamente WEBSITES_ENABLE_APP_SERVICE_STORAGE
como true habilitará a montagem. Depois que isso for definido como true, se você quiser desabilitar a montagem, precisará definir WEBSITES_ENABLE_APP_SERVICE_STORAGE
explicitamente como false.
Meu contêiner não começa com "nenhum espaço deixado no dispositivo". O que significa esse erro?
Serviço de Aplicativo no Linux usa dois tipos diferentes de armazenamento:
- Armazenamento do sistema de arquivos: o armazenamento do sistema de arquivos está incluído na cota do plano Serviço de Aplicativo. Ele é usado quando os arquivos são salvos no armazenamento persistente que está enraizado no
/home
diretório. - Espaço em disco do host: o espaço em disco do host é usado para armazenar imagens de contêiner. Ele é gerenciado pela plataforma por meio do driver de armazenamento do docker.
O espaço em disco do host é separado da cota de armazenamento do sistema de arquivos. Não é expansível e há um limite de 15 GB para cada instância. Ele é usado para armazenar imagens personalizadas no trabalho. Você pode ser capaz de usar mais de 15 GBs dependendo da disponibilidade exata do espaço em disco do host, mas isso não é garantido.
Se a camada gravável do contêiner salvar dados fora do /home
diretório ou de um caminho de armazenamento do azure montado, o espaço em disco do host também será consumido.
A plataforma limpa rotineiramente o espaço em disco do host para remover contêineres não utilizados. Se o contêiner gravar uma grande quantidade de dados fora do /home
diretório ou do BYOS (Bring Your Own Storage), isso resultará em falhas de inicialização ou exceções de runtime depois que o limite de espaço em disco do host for excedido.
Recomendamos manter suas imagens de contêiner o menor possível e gravar dados no armazenamento persistente ou BYOS ao executar no Linux Serviço de Aplicativo. Se não for possível, você precisará dividir o plano de Serviço de Aplicativo porque o espaço em disco do host é fixo e compartilhado entre todos os contêineres no Plano Serviço de Aplicativo.
Meu contêiner personalizado leva muito tempo para começar e a plataforma reinicia o contêiner antes que ele termine de iniciar.
Você pode configurar a quantidade de tempo que a plataforma aguardará antes que ela reinicie seu contêiner. Para fazer isso, defina a configuração do WEBSITES_CONTAINER_START_TIME_LIMIT
aplicativo como o valor desejado. O valor padrão é de 230 segundos e o valor máximo é de 1800 segundos.
Qual é o formato da URL do servidor de registro privado?
Forneça a URL completa do registro, incluindo http://
ou https://
.
Qual é o formato para o nome da imagem na opção de registro privado?
Adicione o nome completo da imagem, incluindo a URL do registro privado (por exemplo, myacr.azurecr.io/dotnet:latest). Os nomes de imagem que usam uma porta personalizada não podem ser inseridos por meio do portal. Para definir docker-custom-image-name
, use a az
ferramenta de linha de comando.
Posso expor mais de uma porta na minha imagem de contêiner personalizada?
Não há suporte para expor mais de uma porta.
Posso trazer meu próprio armazenamento?
Sim, traga seu próprio armazenamento está em versão prévia.
Por que não posso navegar pelo sistema de arquivos do contêiner personalizado ou executar processos do site do SCM?
O site do SCM é executado em um contêiner separado. Você não pode marcar o sistema de arquivos ou executar processos do contêiner do aplicativo.
Preciso implementar HTTPS no meu contêiner personalizado?
Não, a plataforma lida com a terminação HTTPS nos front-ends compartilhados.
Preciso usar WEBSITES_PORT para contêineres personalizados?
Sim, isso é necessário para contêineres personalizados. Para configurar manualmente uma porta personalizada, use a instrução EXPOSE no Dockerfile e na configuração do aplicativo, WEBSITES_PORT, com um valor de porta a ser associado no contêiner.
Posso usar ASPNETCORE_URLS na imagem do Docker?
Sim, substitua a variável ambiental antes do início do aplicativo do .NET Core. Por exemplo, no script init.sh: exportar ASPNETCORE_URLS={Seu valor}
Multi-contêiner com o Docker Compose
Como fazer configurar Registro de Contêiner do Azure (ACR) para usar com vários contêineres?
Para usar o ACR com vários contêineres, todas as imagens de contêiner precisam ser hospedadas no mesmo servidor de registro do ACR. Depois que eles estiverem no mesmo servidor de registro, você precisará criar configurações de aplicativo e atualizar o arquivo de configuração do Docker Compose para incluir o nome da imagem do ACR.
Crie as seguintes configurações de aplicativo:
- DOCKER_REGISTRY_SERVER_USERNAME
- DOCKER_REGISTRY_SERVER_URL (URL completa, ex:
https://<server-name>.azurecr.io
) - DOCKER_REGISTRY_SERVER_PASSWORD (habilitar o acesso de administrador nas configurações do ACR)
No arquivo de configuração, referencie sua imagem do ACR como o seguinte exemplo:
image: <server-name>.azurecr.io/<image-name>:<tag>
Como fazer sabe qual contêiner está acessível à Internet?
- Somente um contêiner pode ser aberto para acesso
- Somente a porta 80 e 8080 está acessível (portas expostas)
Aqui estão as regras para determinar qual contêiner está acessível - na ordem de precedência:
- Configuração
WEBSITES_WEB_CONTAINER_NAME
do aplicativo definida como o nome do contêiner - O primeiro contêiner a definir a porta 80 ou 8080
- Se nenhum dos acima for verdadeiro, o primeiro contêiner definido no arquivo estará acessível (exposto)
Como fazer usar depends_on?
A depends_on
opção não tem suporte em Serviço de Aplicativo e será ignorada. Assim como a recomendação de inicialização e desligamento de controle do Docker, Serviço de Aplicativo aplicativos de vários contêineres devem marcar dependências por meio do código do aplicativo - tanto na inicialização quanto na desconexão.
O código de exemplo abaixo mostra um aplicativo Python verificando se um contêiner Redis está em execução.
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)
Soquetes web
Há suporte para Soquetes Web em aplicativos Linux. A webSocketsEnabled
configuração do ARM não se aplica aos aplicativos Linux, pois os Soquetes Web estão sempre habilitados para Linux.
Importante
Agora há suporte para soquetes Web para aplicativos Linux em planos de Serviço de Aplicativo gratuitos. Oferecemos suporte a até cinco conexões de soquete Web em planos de Serviço de Aplicativo gratuitos. Exceder esse limite resulta em uma resposta HTTP 429 (Solicitações Demais).
Preços e SLA
Qual é o preço, agora que o serviço está geralmente disponível?
Os preços variam de acordo com a SKU e a região, mas você pode ver mais detalhes em nossa página de preços: Serviço de Aplicativo Preços.
Outras perguntas
Como funciona a solicitação de aquecimento do contêiner?
Quando Azure App Services inicia seu contêiner, a solicitação de aquecimento envia uma solicitação HTTP para o ponto de extremidade /robots933456.txt do seu aplicativo. Este é simplesmente um ponto de extremidade fictício, mas seu aplicativo precisa responder com qualquer código de status não 5XX. Se a lógica do aplicativo não responder com nenhum código HTTP status para pontos de extremidade inexistentes, a solicitação de aquecimento não poderá receber uma resposta e reiniciará perpetuamente seu contêiner. A solicitação de aquecimento também pode falhar devido à configuração incorreta da porta.
Para garantir que a porta esteja configurada corretamente no Azure App Services, consulte a pergunta Como fazer especificar a porta no contêiner do Linux?
É possível aumentar o tempo limite de solicitação de aquecimento do contêiner?
A solicitação de aquecimento por padrão falha depois de esperar 240 segundos por uma resposta do contêiner. Você pode aumentar o tempo limite da solicitação de aquecimento do contêiner adicionando a configuração WEBSITES_CONTAINER_START_TIME_LIMIT
do aplicativo com um valor entre 240 e 1800 segundos.
Como fazer especificar a porta no contêiner do Linux?
Tipo de contêiner | Descrição | Como definir/usar a porta |
---|---|---|
Contêineres internos | Se você selecionar uma versão de linguagem/estrutura para um aplicativo Linux, um contêiner predefinido será selecionado para você. | Para apontar o código do aplicativo para a porta certa, use a variável de ambiente PORT. |
Contêineres personalizados | Você tem controle total sobre o contêiner. | Serviço de Aplicativo não tem controle sobre qual porta o contêiner escuta. O que ele precisa é saber para qual porta encaminhar solicitações. Se o contêiner ouvir a porta 80 ou 8080, Serviço de Aplicativo poderá detectá-lo automaticamente. Se ele ouvir qualquer outra porta, você precisará definir a configuração do aplicativo WEBSITES_PORT para o número da porta e Serviço de Aplicativo encaminhará solicitações para essa porta no contêiner. A configuração do aplicativo WEBSITES_PORT não tem nenhum efeito dentro do contêiner e você não pode acessá-la como uma variável de ambiente dentro do contêiner. |
Posso usar um banco de dados baseado em arquivo (como SQLite) com meu Webapp do Linux?
O sistema de arquivos do seu aplicativo é um compartilhamento de rede montado. Isso permite dimensionar cenários em que seu código precisa ser executado em vários hosts. Infelizmente, isso bloqueia o uso de provedores de banco de dados baseados em arquivos, como o SQLite, já que não é possível adquirir bloqueios exclusivos no arquivo de banco de dados. Recomendamos um serviço de banco de dados gerenciado: SQL do Azure, Banco de Dados do Azure para MySQL ou Banco de Dados do Azure para PostgreSQL
Quais são os caracteres com suporte em nomes de configurações de aplicativo?
Você pode usar apenas letras (A-Z, a-z), números (0-9) e o caractere sublinhado (_) para configurações de aplicativo.
Onde posso solicitar novos recursos?
Você pode enviar sua ideia no fórum de comentários Aplicativos Web. Adicione "[Linux]" ao título de sua ideia.
Próximas etapas
- O que é Serviço de Aplicativo do Azure no Linux?
- Configurar ambientes de preparo no Serviço de Aplicativo do Azure
- Implantação contínua com o Aplicativo Web para Contêineres
- Coisas que você deve saber: Aplicativos Web e Linux
- Referência de variáveis de ambiente e configurações de aplicativo
Entre em contato conosco para obter ajuda
Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.