应用管理默认采用Heroku的Cloud Native Buildpacks(Builder版本:heroku/builder:24)进行构建。本文以使用Heroku Buildpacks为例,为您介绍基于Java、Python、Go、Node.js编程语言的应用配置。
容器镜像及容器配置说明
容器镜像构建时配置
通过增加
project.toml
文件,指定容器镜像构建时的环境变量,例如可以指定MAVEN_OPTS
。说明关于
project.toml
的更多信息,请参见project.toml简介。容器运行时配置
运行时参数通过环境变量传递给应用。您的代码需要支持从环境变量读取参数。在应用管理部署时您可以指定容器环境变量,应用管理将这些环境变量存储到
env
文件,并通过--env-file
选项传递给容器进程。
应用配置
代码仓库仅支持在以下特定编程语言下直接进行应用部署。以下分别介绍基于不同编程语言如何配置应用。
Java
对应用程序的要求
编程语言为Java时,对应用程序的要求如下:
代码仓库的根目录中需要包含
pom.xml
。应用代码支持通过Maven或Gradle构建。
应用支持的JDK版本符合要求。
配置说明
OpenJDK版本
OpenJDK支持的主要版本为8、11、17、21以及22版本。Buildpacks将始终安装所请求主要版本的最新版本。
说明如果没有指定OpenJDK版本,Buildpacks会默认安装最新的LTS版本(例如8、11、17或21版本中的最新小版本)。
您可以通过在应用程序的根目录中添加名为
system.properties
的Java属性文件来指定版本。例如,以下示例指定OpenJDK版本为21。java.runtime.version=21
Maven选项
可以使用
MAVEN_OPTS
环境变量来应用Maven配置。添加project.toml
来指定此构建环境变量。Buildpacks默认仅支持使用Maven 3.9进行构建。如果您的应用依赖其他版本的Maven,请使用Maven Wrapper,Buildpacks将会使用项目根目录下的
mvnw
进行构建。执行以下命令,使用Maven Wrapper。
mvn wrapper:wrapper # 将会生成.mvn目录、mvnw、mvnw.cmd文件 git add .mvn mvnw mvnw.cmd git commit -m "support maven wrapper" git push origin # 提交到代码仓库
进程文件
Procfile
定义了进程类型并明确应执行的命令来启动应用程序,更多信息,请参见Procfile简介。对于Spring Boot应用,Procfile
的作用是告诉平台如何启动Spring Boot应用。以下是一个典型的Spring Boot应用的Procfile
示例:web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/demo-0.0.1-SNAPSHOT.jar
示例项目
更多信息,请参见buildpacks-jvm。
Python
对应用程序要求
编程语言为Python时,在您的应用程序源代码的根目录中必须存在一个requirements.txt
或 poetry.lock
文件。
配置说明
Python版本
默认情况下,Buildpacks会安装最新版本的Python 3.13。如果需要安装不同版本,请您在应用程序的根目录中添加一个
.python-version
文件,并指定要安装的Python版本号,示例如下:$ cat .python-version 3.13
进程文件
Procfile
是应用程序根目录中的一个文本文件,对于Python应用而言,Procfile定义了进程类型并明确声明应执行什么命令来启动应用程序。以下是一个Python应用的Procfile
示例:web: gunicorn --config gunicorn.conf.py gettingstarted.wsgi
说明对于简单的应用,Procfile并非必需使用,但对于Python应用,强烈建议增加Procfile。更多信息,请参见Procfile简介。
示例项目
GitHub:github-python-falcon-demo
Gitee:gitee-python-falcon-demo
更多信息,请参见buildpacks-python。
Go
对应用程序的要求
编程语言为Go时,对应用程序的要求如下:
代码仓库的根目录中需要包含
go.mod
,且要求go.mod
中的module name
至少包含一个/
字符。应用程序支持使用Go 1.16或更高版本进行编译,同时支持使用Go Modules进行任何依赖项安装。
说明Buildpacks仅支持Go语言的依赖项管理(例如Go Modules),而不支持第三方依赖项管理器(例如dep、godep、govendor以及glide等)。
配置说明
Go版本
Buildpacks将从
go.mod
中的go
行读取Go版本。例如,从go 1.17版本中选择最新release版本,示例如下:
go 1.17
依赖项管理
如果代码仓库的根目录中存在
vendor/modules.txt
文件,则Buildpacks将尝试使用vendor
目录中的Go模块,而不是下载它们。如果代码仓库的根目录中不存在
vendor/modules.txt
文件,则将在编译之前下载Go模块。
软件包安装
Buildpacks将构建其所在项目中检测到的所有
main
软件包。
示例项目
GitHub:github-go-web-demo
Gitee:gitee-go-web-demo
更多信息,请参见buildpacks-go。
Node.js
对应用程序的要求
编程语言为Node.js时,对应用程序的要求如下:
在构建过程中,Buildpacks需要一个有效的
package.json
文件。为了安装依赖项,必须存在有效的
npm
、yarn
或pnpm lock
文件。
配置说明
Node.js版本
请通过package.json
中的engines.node
指定某个Node.js版本。如果未指定Node.js版本,则将使用最新的LTS版本。
请您在package.json
中修改Node.js版本,例如在Node.js的第20行中选择最新版本,示例如下:
{"
engines":{"
node":"20. x"
}
}
此字段支持与package.json
相同的语义版本控制语法。强烈建议您指定Node.js版本以防止意外更改。
示例项目
GitHub:github-nodejs-express-demo
更多信息,请参见buildpacks-nodejs。
PHP
对应用程序的要求
编程语言为PHP时,对应用程序的要求如下:
支持PHP 8.2、PHP 8.3以及PHP 8.4版本。
应用仓库的根目录需包含
composer.json
和composer.lock
文件。
配置说明
PHP版本
在composer.json
中指定php runtime版本,例如指定php版本为8.2.0及以上的php 8版本,示例如下:
{
"require": {
"php": "^8.2.0"
}
}
示例项目
GitHub:github-php-demo
Gitee:gitee-php-demo
更多信息,请参见buildpacks-php和php-support。