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 o lançamento do Serviço de Aplicativo no Linux, estamos trabalhando para adicionar recursos e fazer melhorias em nossa plataforma. Este artigo fornece as respostas para as perguntas que nossos clientes têm feito recentemente.
Se você tiver qualquer dúvida, comente este artigo.
Imagens internas
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 o arquivo de script |
.NET Core | o nome da DLL compilada como dotnet <myapp>.dll |
PHP | opcional inicialização personalizada |
Python | opcional script de inicialização |
Ruby | o script Ruby com o qual você deseja inicializar o aplicativo |
Esses comandos ou scripts são executados depois que o contêiner interno do Docker é iniciado, mas antes do código do aplicativo ser iniciado.
Gerenciamento
O que acontece quando eu pressiono o botão de reinicialização no portal do Azure?
Esta ação é igual a um reinício do Docker.
Posso usar o SSH (Secure Shell) para me conectar à VM (máquina virtual) do contêiner de aplicativo?
Sim, você pode fazer isso por meio do site de gerenciamento do controle de origem (SCM) .
Observação
Você também pode se conectar ao contêiner de aplicativo diretamente do seu computador de desenvolvimento local usando SSH, SFTP ou Visual Studio Code (para aplicativos do Node.js de depuração ao vivo). Para obter mais informações, consulte Depuração remota e SSH no Serviço de Aplicativo no Linux.
Como criar um plano de Serviço de Aplicativo Linux por meio de um SDK ou um modelo do Azure Resource Manager?
Você deve definir o campo reservado do serviço de aplicativo para true.
Integração contínua e implantação
Meu aplicativo Web ainda usa uma imagem de contêiner antiga do Docker depois que atualizei a imagem no Hub do Docker. Há suporte para implantação/integração contínua de contêineres personalizados?
Sim, para configurar integração/implantação contínua para o Registro de Contêiner do Azure ou DockerHub, seguindo a Implantação contínua com o Aplicativo Web para Contêineres. Para registros privados, é possível atualizar o contêiner parando e, em seguida, iniciando o Aplicativo Web. Se preferir, é possível alterar ou adicionar uma configuração de aplicativo fictício para forçar uma atualização do contêiner.
Há suporte para 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 um aplicativo Web do Linux. Como fazer para resolver o problema??
Se a implantação do Git falhar no aplicativo Web do Linux, escolha uma das opções a seguir para implantar o código do aplicativo:
Usar o recurso Entrega Contínua (versão prévia): você pode armazenar o código-fonte do seu aplicativo em um repositório Git do Azure DevOps ou em um repositório do GitHub para usar a Entrega Contínua do Azure. Para obter mais informações, consulte Como configurar a Entrega Contínua para aplicativos Web do Linux.
Usar a API de implantação via arquivo ZIP: para usar essa API, adicione o SSH ao seu aplicativo Web e vá para a pasta onde você deseja implantar seu código. Execute o código a seguir:
curl -X POST -u <user> --data-binary @<zipfile> https://{your-sitename}.scm.azurewebsites.net/api/zipdeploy
Se você receber uma mensagem de erro informando que o comando
curl
não foi encontrado, instale a ondulação usandoapt-get install curl
antes de executar o comandocurl
anterior.
Suporte ao idioma
Eu quero usar websockets no aplicativo Node.js, há definições ou configurações especiais a serem definidas?
Sim, desabilite perMessageDeflate
no código Node.js do servidor. Por exemplo, se estiver usando o socket.io, use o código a seguir:
const io = require('socket.io')(server,{
perMessageDeflate :false
});
Há suporte para aplicativos .NET Core não compilados?
Sim.
Há suporte para o Criador como um gerenciador de dependências para aplicativos PHP?
Sim, durante uma implantação do Git, o Kudu deve detectar que você está implantando um aplicativo PHP (graças à presença de um arquivo composer.lock) e o Kudu, então, disparará uma instalação de criador.
Contêineres personalizados
Posso usar identidades gerenciadas com o Serviço de Aplicativo ao efetuar pull de imagens do ACR?
Sim, essa funcionalidade está disponível na CLI do Azure. Use identidades atribuídas pelo sistema ou 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 para o diretório "\home\".
Se a configuração WEBSITES_ENABLE_APP_SERVICE_STORAGE
não for especificada ou for definida como false, o diretório /home/
não será compartilhado entre as instâncias de escala e os arquivos gravados lá não serão mantidos nos reinícios. Definir explicitamente WEBSITES_ENABLE_APP_SERVICE_STORAGE
como true permitirá 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 inicia com "não há mais espaço no dispositivo". O que esse erro significa?
O 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 do 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 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 trabalhador. Você pode usar mais de 15 GBs, dependendo da disponibilidade exata de 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 tempo de execução quando o limite de espaço em disco do host for excedido.
Recomendamos que você mantenha suas imagens de contêiner o menor possível e grave dados no armazenamento persistente ou BYOS ao executar no Serviço de Aplicativo do Linux. Se não for possível, você precisará dividir o plano do Serviço de Aplicativo porque o espaço em disco do host é fixo e compartilhado entre todos os contêineres no Plano do Serviço de Aplicativo.
Meu contêiner personalizado demora para iniciar e a plataforma o reinicia antes que ele termine a inicialização.
Você pode configurar o tempo que a plataforma aguardará antes de reiniciar o contêiner. Para fazer isso, defina a configuração de aplicativo WEBSITES_CONTAINER_START_TIME_LIMIT
como o valor desejado. O valor padrão é 230 segundos e o valor máximo permitido é 1800 segundos.
Qual é o formato da URL do servidor do Registro privado?
Forneça a URL completa do registro, incluindo http://
ou https://
.
Qual é o formato do nome da imagem na opção de Registro privado?
Adicione o nome de imagem completa, incluindo a URL de registro particular (por exemplo, myacr.azurecr.io/dotnet:latest). Os nomes de imagem que usam a porta personalizada não podem ser inseridos por meio do portal. Para definir docker-custom-image-name
, use a ferramenta de linha de comando az
.
Posso expor mais de uma porta em minha imagem de contêiner personalizados?
Não há suporte para expor mais de uma porta.
Posso colocar meu próprio armazenamento?
Sim, Traga seu próprio armazenamento está em versão prévia.
Por que não é possível navegar os processos do meu contêiner personalizado em execução ou de sistema de arquivos do site do SCM?
O site do SCM é executado em um contêiner separado. Não é possível verificar o sistema de arquivos ou os processos em execução do contêiner de aplicativo.
É necessário implementar o HTTPS no meu contêiner personalizado?
Não, a plataforma manipula 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 a configuração do aplicativo, WEBSITES_PORT, com um valor de porta para associar no contêiner.
Posso usar ASPNETCORE_URLS na imagem do Docker?
Sim, substitua a variável de ambiente antes do início do aplicativo .NET Core. Por exemplo, no script init.sh: exportar ASPNETCORE_URLS={Seu valor}
Vários contêineres com Docker Compose
Como fazer para configurar o ACR (Registro de Contêiner do Azure) para usá-lo com vários contêineres?
Para usar o ACR com vários contêineres, todas as imagens de contêiner precisam estar hospedadas no mesmo servidor de registro do ACR. Quando estiverem no mesmo servidor do registro, você precisará criar configurações do aplicativo e, em seguida, atualizar o arquivo de configuração Docker Compose para incluir o nome da imagem ACR.
Crie as seguintes configurações de aplicativo:
- DOCKER_REGISTRY_SERVER_USERNAME
- DOCKER_REGISTRY_SERVER_URL (URL completa, por ex:
https://<server-name>.azurecr.io
) - DOCKER_REGISTRY_SERVER_PASSWORD (habilite o acesso de administrador nas configurações do ACR)
No arquivo de configuração, referencie a imagem do ACR como o seguinte exemplo:
image: <server-name>.azurecr.io/<image-name>:<tag>
Como saber qual contêiner é acessível pela Internet?
- Apenas um contêiner pode ser aberto para acesso
- Somente as portas 80 e 8080 são acessíveis (portas expostas)
Estas são as regras para determinar qual contêiner está acessível – na ordem de precedência:
- Configuração de aplicativo
WEBSITES_WEB_CONTAINER_NAME
definida como o nome do contêiner - O primeiro contêiner a definir a porta 80 ou 8080
- Se nenhuma das opções acima for verdadeira, o primeiro contêiner definido no arquivo estará acessível (exposto)
Como uso o depends_on?
A opção depends_on
não tem suporte no Serviço de Aplicativo e será ignorada. Assim como a recomendação de inicialização e desligamento de controle do Docker, os aplicativos com Vários Contêineres do Serviço de Aplicativo devem verificar as dependências por meio do código do aplicativo, tanto na inicialização quanto na desconexão.
O código de exemplo abaixo mostra uma verificação de aplicativo Python para ver se um contêiner do 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 a aplicativos Linux, pois os Web Sockets estão sempre habilitados para Linux.
Importante
Agora há suporte para Web Sockets para aplicativos Linux em planos de Serviço de Aplicativo Gratuito. Oferecemos suporte a até cinco conexões de soquete da Web em planos de Serviço de Aplicativo Gratuito. Exceder esse limite resulta em uma resposta HTTP 429 (Too Many Requests).
Preço e SLA
Qual é o preço agora que o serviço está 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: Preços do Serviço de Aplicativo.
Outras perguntas
Como funciona a solicitação de preparação do contêiner?
Quando os Serviços de Aplicativos do Azure iniciam o contêiner, a solicitação de preparação envia uma solicitação HTTP ao ponto de extremidade /robots933456.txt do aplicativo. Isso é simplesmente um ponto de extremidade fictício, mas o aplicativo precisa responder com qualquer código de status não 5XX. Se a lógica do aplicativo não responder com um código de status HTTP em caso de pontos de extremidade inexistentes, a solicitação de preparação não poderá receber uma resposta e reiniciará o contêiner perpetuamente. A solicitação de preparação também pode falhar devido uma configuração indevida da porta.
Para garantir que a porta esteja configurada corretamente nos Serviços de Aplicativos do Azure, confira a pergunta Como especificar a porta no contêiner do Linux?
É possível aumentar o tempo limite de solicitação de preparação do contêiner?
A solicitação de preparação falha por padrão depois de aguardar uma resposta do contêiner por 240 segundos. Você pode aumentar o tempo limite de solicitação de preparação do contêiner adicionando a configuração de aplicativo WEBSITES_CONTAINER_START_TIME_LIMIT
com um valor entre 240 e 1800 segundos.
Como especificar a porta no meu contêiner do Linux?
Tipo de contêiner | Descrição | Como definir/usar a porta |
---|---|---|
Contêineres internos | Se você selecionar uma versão do idioma/framework para um aplicativo Linux, um contêiner predefinido será selecionado para você. | Para apontar o código do aplicativo para a porta correta, use a variável de ambiente PORT. |
Contêineres personalizados | Você tem controle total sobre o contêiner. | O Serviço de Aplicativo não tem controle sobre em qual porta o contêiner escuta. O que ele precisa é saber para qual porta encaminhar solicitações. Se o contêiner escutar a porta 80 ou 8080, o Serviço de Aplicativo poderá detectá-lo automaticamente. Se ele escutar qualquer outra porta, você precisará definir a configuração do aplicativo WEBSITES_PORT como o número da porta e o Serviço de Aplicativo encaminhará as 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 o SQLite) com meu Aplicativo Web do Linux?
O sistema de arquivos do seu aplicativo é um compartilhamento de rede montado. Isso permite cenários de escala horizontal 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 arquivo, como o SQLite, pois 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 do aplicativo?
Você pode usar apenas letras (A-Z, a-z), números (0-9) e o caractere de sublinhado (_) para as configurações do aplicativo.
Onde posso solicitar os novos recursos?
É possível enviar sua ideia para o fórum de comentários dos Aplicativos Web. Adicione “[Linux]” ao título de sua ideia.
Próximas etapas
- O que é o 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
- O 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.