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 arquivo de inicialização não seja necessário para o desenvolvimento local, o Serviço de Aplicativo do Azure executa seu aplicativo Web implantado em um contêiner do Docker que pode utilizar comandos de inicialização, se fornecido.
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: Seu aplicativo é construído com uma estrutura diferente de Flask ou Django, ou você deseja usar um servidor web diferente além do Gunicorn.
Estrutura do aplicativo Flask não padrão: você tem um aplicativo Flask cujo arquivo de código principal é nomeado algo diferente de app.py ou application.py*, ou o objeto do aplicativo é nomeado algo diferente de
app
.
Em outras palavras, um comando de inicialização personalizado é necessário, a menos que seu projeto tenha um arquivo app.py ou application.py na pasta raiz com um objeto de aplicativo Flask chamado app
.
Para obter mais informações, consulte Configurar aplicativos Python - processo de inicialização de contêiner.
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, na página Configuração para o App Service, selecione Configurações gerais, digite o nome do arquivo de inicialização (como startup.txt ou startup.sh) em Configurações de pilha>Comando de inicialização, e depois selecione Salvar.
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 você quiser modificar quaisquer argumentos do Gunicorn, como aumentar o valor de tempo limite para 1.200 segundos(--timeout 1200
), crie um arquivo de comando de inicialização personalizado. Isso permite que você substitua as configurações padrão com 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 padrão, o Serviço de Aplicativo no Linux assume que seu aplicativo Flask atende aos 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 projeto for diferente dessa estrutura, o comando de inicialização personalizado deverá identificar o local do objeto do aplicativo no formato file: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:myapp
O ficheiro de inicialização está numa subpasta: se o ficheiro de inicialização for myapp/website.py e o objeto da aplicação for
app
, use o argumento do--chdir
Gunicorn para especificar a pasta e, em seguida, nomeie o ficheiro de inicialização e o objeto da aplicação como de costume.gunicorn --bind=0.0.0.0 --timeout 600 --chdir myapp website:app
O 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 do aplicativo é nomeado
app
e definido em __init__.py e webapp.py usa uma importação relativa.Devido a esse arranjo, apontar Gunicorn para
webapp:app
produz 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 app
O 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 de Django ou Flask (como Falcon, FastAPI, etc.), ou para usar um servidor web diferente:
Inclua a estrutura e/ou o servidor Web no seu ficheiro requirements.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 -m
comando em vez de invocar o servidor diretamente. Por exemplo, o comando a seguir inicia o servidor uvicorn , supondo que o WSGI chamável seja nomeadoapp
e encontrado em application.py:python -m uvicorn application:app --host 0.0.0.0
Você usa
python -m
porque os servidores web instalados via requirements.txt não são adicionados ao ambiente global Python e, portanto, não podem ser invocados diretamente. Opython -m
comando invoca o servidor de dentro do ambiente virtual atual.