基于特定编程语言的应用配置

应用管理默认采用HerokuCloud 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

  • 应用代码支持通过MavenGradle构建。

  • 应用支持的JDK版本符合要求。

配置说明

  • OpenJDK版本

    OpenJDK支持的主要版本为8、11、17、21以及22版本。Buildpacks将始终安装所请求主要版本的最新版本。

    说明

    如果没有指定OpenJDK版本,Buildpacks会默认安装最新的LTS版本(例如8、11、1721版本中的最新小版本)。

    您可以通过在应用程序的根目录中添加名为system.propertiesJava属性文件来指定版本。例如,以下示例指定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简介

示例项目

更多信息,请参见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软件包。

示例项目

更多信息,请参见buildpacks-go

Node.js

对应用程序的要求

编程语言为Node.js时,对应用程序的要求如下:

  • 在构建过程中,Buildpacks需要一个有效的package.json文件。

  • 为了安装依赖项,必须存在有效的npmyarnpnpm 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版本以防止意外更改。

示例项目

更多信息,请参见buildpacks-nodejs

PHP

对应用程序的要求

编程语言为PHP时,对应用程序的要求如下:

  • 支持PHP 8.2、PHP 8.3以及PHP 8.4版本。

  • 应用仓库的根目录需包含composer.jsoncomposer.lock文件。

配置说明

PHP版本

composer.json中指定php runtime版本,例如指定php版本为8.2.0及以上的php 8版本,示例如下:

{
  "require": {
    "php": "^8.2.0"
  }
}

示例项目

更多信息,请参见buildpacks-phpphp-support

project.tomlProcfile简介

  • 展开查看:project.toml文件及相应配置

    • project.toml介绍

      project descriptor(也称为文件project.toml)是一个纯文本文件,必须存放在项目的根目录中,可以使用该文件详细配置代码库。例如,您可以指定在构建代码库时应使用哪些构建包、在构建中应包含或排除哪些文件,以及在构建时如何设置环境变量。更多信息,请参见project.toml

    • project.toml配置

      配置project.toml文件时的主要设置如下,关于project.toml文件的其他配置,请参见Use project.toml

      • 设置镜像构建时的环境变量

        在项目根目录下,创建或更新project.toml的项目描述符,设置的环境变量示例如下:

        [_]
        schema-version = "0.2" # 必须设置,schema version 0.1不支持配置build env
        
        [[io.buildpacks.build.env]]
            name = "MAVEN_OPTS"
            value = "-Xms128m -Xmx512m"
        [[io.buildpacks.build.env]]
            name = "构建环境变量2"
            value = "构建环境变量2的值"
      • (可选)指定Builder(即project.toml构建器)

        应用管理会设定一个默认的Builder,如果需要指定Builder,示例如下:

        [io.buildpacks]
        builder = "cnbs/sample-builder:noble"
  • 展开查看:Procfile文件及格式

    • Procfile介绍

      Procfile是应用程序根目录中的无文件扩展名的纯文本文件,其必须位于项目的根目录中,不能放置在其他位置。Procfile可替换任何类型(不局限于特定编程语言)应用的默认启动进程。更多信息,请参见Procfile

    • Procfile格式

      Procfile会在单独的行中声明其进程类型,每行采用以下格式:

      PROCESS_TYPE: COMMAND

      您需要进行如下替换:

      • PROCESS_TYPE 替换为进程类型的名称,例如webworkercustom

      • COMMAND 表示每个进程类型在启动时应执行的命令,例如gunicorn -b :$PORT main:app