Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, você aprenderá quando e como configurar um arquivo de inicialização personalizado para um aplicativo Web Python hospedado no Serviço de Aplicativo do Azure. Embora um ficheiro de arranque não seja necessário para desenvolvimento local, o Serviço de Aplicações do Azure executa a sua aplicação web implementada dentro de um contentor Docker que pode usar comandos de arranque se os fornecer.
Você precisa de um arquivo de inicialização personalizado nas seguintes situações:
Argumentos Gunicorn personalizados: Você deseja iniciar o servidor web padrão Gunicorn com argumentos extras além de seus padrões, que são
--bind=0.0.0.0 --timeout 600.Frameworks ou Servidores Alternativos: A tua aplicação é construída com uma framework diferente do Flask ou Django, ou queres usar um servidor web diferente em vez do Gunicorn.
Estrutura de Aplicação Não Padrão do Flask: Tem uma aplicação Flask cujo ficheiro de código principal tem um nome diferente de app.py ou application.py, ou o objeto da aplicação tem um nome diferente de
app.
Ou seja, precisa de um comando de arranque personalizado, a menos que o seu projeto tenha um ficheiro app.py ou application.py na pasta raiz com um objeto de aplicação Flask chamado app.
Para obter mais informações, consulte Configurar aplicativos Python - processo de inicialização de contêiner.
Pré-requisitos
Antes de configurar um ficheiro de arranque personalizado, é necessário ter um App Service no Linux existente a executar Python. Para criar um App Service, siga o guia de início rápido do Python para o App Service. Também pode criar um App Service com a CLI do Azure:
az webapp create --resource-group <group> --plan <plan> --name <app-name> --runtime "PYTHON:3.12"
Criar um arquivo de inicialização
Quando precisar de um arquivo de inicialização personalizado, use as seguintes etapas:
Crie um arquivo em seu projeto chamado startup.txt, startup.sh ou outro nome de sua escolha que contenha seus comandos de inicialização. Consulte as seções posteriores deste artigo para obter detalhes sobre Django, Flask e outras estruturas.
Um arquivo de inicialização pode incluir vários comandos, se necessário.
Comprometa o arquivo em seu repositório de código para que ele possa ser implantado com o restante do aplicativo.
No Visual Studio Code, selecione o ícone do Azure na Barra de Atividades, expanda RECURSOS, localize e expanda sua assinatura, expanda Serviços de Aplicativo, clique com o botão direito do mouse no Serviço de Aplicativo e selecione Abrir no Portal.
No portal do Azure, no menu de serviço à esquerda, escolhaConfiguração de Configurações>. Na página Configuração do App Service, selecione Definições gerais, introduza o nome do seu ficheiro de arranque (como startup.txt ou startup.sh) em Definições da pilha>Comando de arranque e, em seguida, selecione Guardar.
Em alternativa, pode usar a CLI do Azure para definir o comando de arranque:
az webapp config set --resource-group <group> --name <app-name> --startup-file "<startup-command>"Observação
Em vez de usar um arquivo de comando de inicialização, você pode colocar o próprio comando de inicialização diretamente no campo Comando de Inicialização no portal do Azure. O uso de um arquivo de comando de inicialização é recomendado porque ele armazena sua configuração no repositório. Isso permite que o controle de versão controle as alterações e simplifica a reimplantação em outras instâncias do Serviço de Aplicativo do Azure.
Selecione Continuar quando solicitado a reiniciar o Serviço de Aplicativo.
Se você acessar o site do Serviço de Aplicativo do Azure antes de implantar o código do aplicativo, um "Erro do aplicativo" será exibido porque nenhum código está disponível para processar a solicitação.
Comandos de inicialização do Django
Por padrão, o Serviço de Aplicativo do Azure localiza a pasta que contém seu arquivo de wsgi.py e inicia o Gunicorn com o seguinte comando:
# <module> is the folder that contains wsgi.py. If you need to use a subfolder,
# specify the parent of <module> using --chdir.
gunicorn --bind=0.0.0.0 --timeout 600 <module>.wsgi
Se quiseres modificar algum argumento do Gunicorn, como aumentar o valor de timeout para 1.200 segundos (),--timeout 1200 cria um ficheiro de comando de arranque personalizado. Este método sobrepõe as definições padrão com os seus requisitos específicos. Para obter mais informações, consulte Processo de inicialização de contêiner - aplicativo Django.
Comandos de arranque do Flask
Por defeito, o Serviço de Aplicações no Linux assume que a sua aplicação Flask cumpre os seguintes critérios:
- O WSGI chamável é chamado
app. - O código do aplicativo está contido em um arquivo chamado application.py ou app.py.
- O arquivo do aplicativo está localizado na pasta raiz do aplicativo.
Se o seu projeto difere desta estrutura, o seu comando de arranque personalizado deve identificar a localização do objeto da aplicação no ficheiro de formato:app_object:
Nome de arquivo diferente e/ou nome de objeto do aplicativo: se o arquivo de código principal do aplicativo estiver hello.py e o objeto do aplicativo for nomeado
myapp, o comando de inicialização será o seguinte:gunicorn --bind=0.0.0.0 --timeout 600 hello:myappO ficheiro de arranque está numa subpasta: Se o ficheiro de arranque for myapp/website.py e o objeto da aplicação for
app, use o argumento--chdirdo Gunicorn para indicar a pasta e, em seguida, indique o ficheiro de arranque e o objeto da aplicação como habitualmente:gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:appO arquivo de inicialização está dentro de um módulo: No código python-sample-vscode-flask-tutorial , o arquivo de inicialização webapp.py está contido na pasta hello_app, que é em si um módulo com um arquivo __init__.py . O objeto app é nomeado
appe definido em __init__.py. webapp.py usa uma importação relativa.Devido a esse arranjo, apontar Gunicorn para
webapp:appproduz o erro, "Tentativa de importação relativa em não-pacote", e o aplicativo não consegue iniciar.Nessa situação, crie um arquivo de shim que importe o objeto de aplicativo do módulo e, em seguida, faça com que o Gunicorn inicie o aplicativo usando o shim. O código python-sample-vscode-flask-tutorial , por exemplo, contém startup.py com o seguinte conteúdo:
from hello_app.webapp import appO comando de inicialização é:
gunicorn --bind=0.0.0.0 --workers=4 startup:app
Para obter mais informações, consulte Processo de inicialização do contêiner - aplicativo Flask.
Outros frameworks e servidores web
O contêiner do Serviço de Aplicativo que executa aplicativos Python tem o Django e o Flask instalados por padrão, juntamente com o servidor Web Gunicorn.
Para usar um framework diferente do Django ou Flask (como Falcon, FastAPI e outros), ou para usar um servidor web diferente:
Inclua o framework e o servidor web no seu ficheirorequirements.txt .
No comando de inicialização, identifique a função chamável WSGI conforme descrito na seção anterior para Flask.
Para iniciar um servidor web diferente do Gunicorn, use um
python -mcomando em vez de invocar o servidor diretamente. Por exemplo, o comando a seguir inicia o servidor uvicorn , supondo que o WSGI chamável seja nomeadoappe encontrado em application.py:python -m uvicorn application:app --host 0.0.0.0Usa
python -mporque os servidores web instalados através de requirements.txt não são adicionados ao ambiente global Python e, portanto, não podem ser invocados diretamente. Opython -mcomando invoca o servidor de dentro do ambiente virtual atual.
Implante seu aplicativo
Depois de configurar o ficheiro de arranque, precisa de implementar o código da aplicação no App Service. Use a CLI do Azure ou o método de implementação que preferir:
az webapp up --name <app-name>
Para mais opções de implementação, consulte Melhores práticas de implementação.