應用管理預設採用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=21Maven選項
可以使用
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。