全部產品
Search
文件中心

CloudOps Orchestration Service:基於特定程式設計語言的應用配置

更新時間:Mar 22, 2025

應用管理預設採用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.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.toml和Procfile簡介

  • 展開查看: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