Por padrão, o recurso de gerenciamento de aplicativos usa Heroku Cloud Native Buildpacks (CNBs) na versão heroku/builder:24 para compilar aplicativos. Este tópico descreve como configurar aplicativos em Java, Python, Go, Node.js , incluindo arquivos obrigatórios, fixação de versão de runtime e uso do Procfile.
Observações sobre a configuração de imagens de contêiner e contêineres
-
Configure variáveis de ambiente ao compilar uma imagem de contêiner
Adicione um arquivo
project.tomlpara especificar variáveis de ambiente de compilação, comoMAVEN_OPTS.NotaPara obter mais informações sobre o
project.toml, consulte a seção Introdução ao project.toml deste tópico. -
Configure variáveis de ambiente para passar parâmetros de runtime do contêiner
Os parâmetros de runtime do contêiner são passados aos aplicativos por meio de variáveis de ambiente. Certifique-se de que seu código leia os parâmetros dessas variáveis. Ao implantar um contêiner, especifique as variáveis de ambiente correspondentes. O gerenciamento de aplicativos armazena essas variáveis no arquivo
enve as transmite ao processo do contêiner usando a opção--env-file.
Configurações do aplicativo
O recurso de gerenciamento de aplicativos implanta diretamente repositórios de código nas linguagens de programação a seguir. Cada seção abaixo descreve os arquivos necessários e as opções de configuração para a respectiva linguagem.
Java
Requisitos para aplicativos
Aplicativos Java devem atender aos seguintes requisitos:
O diretório raiz do repositório de código deve conter um arquivo
pom.xml.Compile o aplicativo com Maven ou Gradle.
A versão do JDK do aplicativo deve ter suporte.
Observações de configuração
-
Versões do OpenJDK
Há suporte para as versões principais 8, 11, 17, 21 e 22 do OpenJDK. Os CNBs instalam a versão secundária mais recente da versão principal especificada.
NotaEspecifique a versão principal do OpenJDK para seu aplicativo. Caso contrário, os CNBs instalarão a versão atual de suporte de longo prazo (LTS) padrão, que muda com o tempo e pode causar falhas de compilação quando o padrão for atualizado.
Para fixar uma versão, adicione o
system.propertiesarquivo de propriedades Java ao diretório raiz do aplicativo. O exemplo a seguir fixa o aplicativo no OpenJDK 21:java.runtime.version=21 -
Opções do Maven
Use a variável de ambiente
MAVEN_OPTSpara aplicar configurações do Maven. Adicione um arquivoproject.tomlao diretório raiz para definir essa variável.Os CNBs oferecem suporte ao Maven 3.9 por padrão. Se o seu aplicativo exigir uma versão diferente do Maven, use o Maven Wrapper (mvnw). Os CNBs detectam e usam o arquivo
mvnwna raiz do projeto.Execute o comando a seguir para configurar o Maven Wrapper:
mvn wrapper:wrapper # Generate the .mvn directory, the mvnw, and the mvnw.cmd file. git add .mvn mvnw mvnw.cmd git commit -m "support maven wrapper" git push origin # Submit the branch to the code repository. -
Procfile
Um
Procfiledeclara o tipo de processo e o comando de inicialização de um aplicativo. Para obter mais informações sobre a sintaxe do Procfile e os tipos de processo, consulte a seção Introdução aos Procfiles deste tópico. Em aplicativos Spring Boot, umProcfilesubstitui o processo de inicialização padrão. O exemplo a seguir mostra umProcfiletípico para Spring Boot:web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/demo-0.0.1-SNAPSHOT.jar
Projetos de exemplo
GitHub: github-java-springboot-demo
Gitee: gitee-java-springboot-demo
Para obter mais informações, consulte buildpacks-jvm.
Python
Requisitos para aplicativos
O diretório raiz do repositório de código-fonte deve conter um arquivo requirements.txt ou poetry.lock.
Observações de configuração
-
Versões do Python
Os CNBs instalam a versão mais recente do Python (atualmente 3,13) por padrão. Para usar uma versão diferente, adicione um arquivo
.python-versionao diretório raiz e especifique a versão desejada:$ cat .python-version 3.13 -
Procfile
Um
Procfileé um arquivo de texto simples no diretório raiz que declara o tipo de processo e o comando de inicialização. O exemplo a seguir mostra um Procfile para um aplicativo Python usando Gunicorn:web: gunicorn --config gunicorn.conf.py gettingstarted.wsgiNotaUm Procfile não é obrigatório para aplicativos simples, mas recomenda-se adicioná-lo a aplicativos Python para tornar o comando de inicialização explícito e evitar dependência de detecção automática. Para obter mais informações, consulte a seção Introdução aos Procfiles.
Projetos de exemplo
GitHub: github-python-falcon-demo
Gitee: gitee-python-falcon-demo
Para obter mais informações, consulte buildpacks-python.
Go
Requisitos para aplicativos
Aplicativos Go devem atender aos seguintes requisitos:
O diretório raiz do repositório de código deve conter um arquivo
go.mod. Omodule nameno arquivogo.moddeve conter pelo menos uma barra (/).-
É necessário Go 1.16 ou posterior para compilação. Use módulos Go para gerenciar dependências.
NotaOs CNBs oferecem suporte apenas a módulos Go para gerenciamento de dependências. Não há suporte para gerenciadores de dependências de terceiros, como dep, godep, govendor e glide.
Observações de configuração
-
Versões do Go
Os CNBs leem a versão do Go a partir da diretiva
gonogo.mod. Um identificador de versão principal, comogo 1.17, resolve para a versão de patch mais recente dessa série disponível no momento da compilação. Para fixar uma versão de patch específica, especifique a versão completa (por exemplo,go 1.17.13).A entrada a seguir seleciona a versão Go 1.17.x mais recente disponível no momento da compilação:
go 1.17 -
Gerenciamento de dependências
Se o diretório raiz contiver um arquivo
vendor/modules.txt, os CNBs usarão os módulos Go no diretóriovendorem vez de baixá-los.Caso não haja um arquivo
vendor/modules.txt, os CNBs baixarão os módulos Go antes da compilação.
-
Instalação de pacotes
Os CNBs compilam todos os pacotes
maindetectados no projeto.
Projetos de exemplo
GitHub: github-go-web-demo
Gitee: gitee-go-web-demo
Para obter mais informações, consulte buildpacks-go.
Node.js
Requisitos para aplicativos
Aplicativos Node.js devem atender aos seguintes requisitos:
Um arquivo
package.jsonválido deve estar presente no diretório raiz para que os CNBs detectem o aplicativo.Um arquivo de lock válido do npm, yarn ou pnpm deve estar presente para instalar dependências.
Observações de configuração
Versões do Node.js
Defina o campo engines.node no package.json para fixar a versão do Node.js. Se nenhuma versão for especificada, os CNBs instalarão a versão LTS mais recente, que muda com o tempo e pode causar comportamentos inesperados na compilação.
O exemplo a seguir fixa o aplicativo na versão Node.js 20.x mais recente:
{
"engines": {
"node": "20.x"
}
}
O campo engines.node aceita a mesma sintaxe de versão semântica do package.json. Fixe a versão do Node.js para evitar alterações inesperadas quando a versão LTS padrão for atualizada.
Projetos de exemplo
GitHub: github-nodejs-express-demo
Gitee: gitee-nodejs-express-demo
Para obter mais informações, consulte buildpacks-nodejs.
PHP
Requisitos para aplicativos
Aplicativos PHP devem atender aos seguintes requisitos:
Há suporte para as versões 8,2, 8,3 e 8,4 do PHP.
O diretório raiz do repositório do aplicativo deve conter os arquivos
composer.jsonecomposer.lock.
Observações de configuração
PHP
Especifique a versão de runtime do PHP no composer.json. O exemplo a seguir exige PHP 8.2.0 ou posterior:
{
"require": {
"php": "^8.2.0"
}
}
Projetos de exemplo
GitHub: github-php-demo
Gitee: gitee-php-demo
Para obter mais informações, consulte buildpacks-php e php-support.
Ruby
Requisitos para aplicativos
O diretório raiz do repositório de código deve conter arquivos Gemfile e Gemfile.lock válidos.
Observações de configuração
-
Versões do Ruby
Especifique a versão do Ruby no
Gemfilee atualize oGemfile.lockadequadamente:-
Especifique a versão do Ruby no
Gemfile:ruby "3.3.0" -
Atualize o
Gemfile.lock:$ bundle update --ruby -
Verifique a versão do Ruby no
Gemfile.lock:RUBY VERSION ruby 3.3.0p0Se nenhuma versão do Ruby for encontrada no
Gemfile.lock, os Buildpacks instalarão a versão padrão do Ruby. Especifique uma versão para evitar alterações inesperadas quando o padrão for atualizado.
-
-
Versões do Bundler
Especifique a versão do Bundler no
Gemfile.lockpara fixar o bundler em uma versão conhecida e estável. Exemplo:BUNDLED WITH 2.5.6Se nenhuma versão do Bundler for encontrada no
Gemfile.lock, os Buildpacks instalarão a versão padrão do Bundler. Especifique uma versão para evitar alterações inesperadas quando o padrão for atualizado.
Projetos de exemplo
GitHub:
Gitee:
Para obter mais informações, consulte buildpacks-ruby e application-contract.md.