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 embutidas
Quais são os valores esperados para a seção Arquivo de Inicialização quando configuro a pilha de execução?
| Pilha | Valor Esperado |
|---|---|
| Java SE | o comando para iniciar seu aplicativo JAR (por exemplo, java -jar /home/site/wwwroot/app.jar --server.port=80) |
| Gato | 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 teste?
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/zipdeploySe você receber um erro de que o
curlcomando não foi encontrado, instale o curl usandoapt-get install curlantes de executar o comando anteriorcurl.
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 você estiver usando socket.io, use o seguinte código:
const io = require('socket.io')(server,{
perMessageDeflate :false
});
Há suporte para aplicativos .NET Core não compilados?
Sim.
Você oferece suporte ao Composer como 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, em seguida, o Kudu executará um composer install.
Contêineres personalizados
Posso usar identidades gerenciadas com o Serviço de Aplicativos ao puxar 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 para o 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. A configuração WEBSITES_ENABLE_APP_SERVICE_STORAGE explícita como true permite 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 consegue iniciar 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
/homediretó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 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 que você mantenha suas imagens de container o mais pequenas possíveis e grave dados no armazenamento persistente ou BYOS ao executar no Linux App Service. 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 a quantidade de tempo que a plataforma aguarda antes de reiniciar o contêiner. Para fazer isso, defina a configuração do 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 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 uma 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 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 ou pelos processos em execução do meu contêiner personalizado a partir 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 vincular ao 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. Depois que estiverem no mesmo servidor do 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:
- Nome_de_Usuário_do_Servidor_DOCKER_REGISTRY
- 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_NAMEdefinida 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 faço para usar a função depends_on?
A depends_on opção não tem suporte no Serviço de Aplicativo e é 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 Soquetes Web 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 aquecimento do contêiner?
Quando os Serviços de Aplicativos do Azure iniciam o seu contêiner, a requisição de warmup envia uma requisição HTTP ao endpoint /robots933456.txt do seu aplicativo. Esse é simplesmente um ponto de extremidade fictício, mas seu aplicativo deve responder retornando qualquer código de status (incluindo 5xx). Se a lógica interna do aplicativo não responder enviando um código de status HTTP para endpoints inexistentes, a solicitação de aquecimento não poderá receber uma resposta. Portanto, ele reinicia constantemente o contêiner.
Para alterar o comportamento padrão, você pode personalizar o caminho do endpoint de aquecimento e os códigos de status que indicam que o site foi aquecido. Para fazer isso, defina as configurações de aplicativo WEBSITE_WARMUP_PATH e WEBSITE_WARMUP_STATUSES .
A solicitação de aquecimento também pode falhar devido à configuração incorreta da porta.
Para garantir que a porta esteja configurada corretamente nos Serviços de Aplicativo do Azure, confira a pergunta: Como especifique a porta em meu contêiner do Linux?
É possível aumentar o tempo limite da solicitação de aquecimento do contêiner?
A solicitação de aquecimento falha por padrão depois de aguardar uma resposta do contêiner por 240 segundos. 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 especifique a porta em meu contêiner do Linux?
| Tipo de contêiner | Descrição | Como definir/usar a porta |
|---|---|---|
| Contêineres embutidos | 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 WEBSITES_PORT aplicativo 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 escalabilidade onde 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, poderá perguntar ao suporte da comunidade do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.