Uygulama yönetimi özelliği, varsayılan olarak uygulamaları derlemek için heroku/builder:24 sürümündeki Heroku Cloud Native Buildpacks (CNB) kullanır. Bu konu; Java, Python, Go, Node.js dillerindeki uygulamaların nasıl yapılandırılacağını açıklar. Açıklamalar arasında gerekli dosyalar, çalışma zamanı sürümü sabitleme ve Procfile kullanımı yer alır.
Konteyner görüntüleri ve konteynerler yapılandırırken dikkat edilmesi gerekenler
-
Konteyner görüntüsü oluştururken ortam değişkenlerini yapılandırın
MAVEN_OPTSgibi derleme zamanı ortam değişkenlerini belirtmek içinproject.tomldosyası ekleyin.Notproject.tomlhakkında daha fazla bilgi için bu konunun project.toml'a giriş bölümüne bakın. -
Konteyner çalışma zamanı parametrelerini iletmek için ortam değişkenlerini yapılandırın
Konteyner çalışma zamanı parametreleri uygulamalara ortam değişkenleri aracılığıyla iletilir. Kodunuzun parametreleri ortam değişkenlerinden okuduğundan emin olun. Bir konteyner dağıttığınızda konteyner için ortam değişkenlerini belirtin. Uygulama yönetimi bu değişkenleri
envdosyasında saklar ve--env-fileseçeneğini kullanarak bunları konteyner işlemine iletir.
Uygulama yapılandırmaları
Uygulama yönetimi özelliği aşağıdaki programlama dillerindeki kod depolarını doğrudan dağıtabilir. Aşağıdaki her bölüm ilgili dil için gerekli dosyaları ve yapılandırma seçeneklerini açıklar.
Java
Uygulamalar için gereksinimler
Java uygulamalarının aşağıdaki gereksinimleri karşılaması gerekir:
Kod deposunun kök dizini bir
pom.xmldosyası içermelidir.Uygulamayı Maven veya Gradle ile derleyin.
Uygulamanın JDK sürümü desteklenmelidir.
Yapılandırma notları
-
OpenJDK sürümleri
OpenJDK'nin 8, 11, 17, 21 ve 22 ana sürümleri desteklenir. CNB belirtilen ana sürümün en son alt sürümünü yükler.
NotUygulamanız için OpenJDK ana sürümünü belirtin. Bunu atlarsanız CNB o anda varsayılan olan uzun vadeli destek (LTS) sürümünü yükler. Bu varsayılan değer zamanla değişebilir ve güncellendiğinde derleme hatalarına neden olabilir.
Bir sürümü sabitlemek için uygulamanın kök dizinine
system.propertiesJava özellik dosyasını ekleyin. Aşağıdaki örnek uygulamayı OpenJDK 21'e sabitler:java.runtime.version=21 -
Maven seçenekleri
Maven ayarlarını uygulamak için
MAVEN_OPTSortam değişkenini kullanın. Bu değişkeni ayarlamak için kök dizine birproject.tomldosyası ekleyin.CNB varsayılan olarak Maven 3.9'u destekler. Uygulamanız farklı bir Maven sürümü gerektiriyorsa bunun yerine Maven Wrapper (mvnw) kullanın. CNB proje kökündeki
mvnwdosyasını algılar ve kullanır.Maven Wrapper'ı kurmak için aşağıdaki komutu çalıştırın:
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
Bir
Procfileuygulamanın işlem türünü ve başlatma komutunu bildirir. Procfile sözdizimi ve işlem türleri hakkında daha fazla bilgi için bu konunun Procfile'lara giriş bölümüne bakın. Spring Boot uygulamalarındaProcfilevarsayılan başlatma işleminin üzerine yazar. Aşağıdaki örnek Spring Boot için tipik birProcfilegösterir:web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/demo-0.0.1-SNAPSHOT.jar
Örnek projeler
GitHub: github-java-springboot-demo
Gitee: gitee-java-springboot-demo
Daha fazla bilgi için buildpacks-jvm adresine bakın.
Python
Uygulamalar için gereksinimler
Kaynak kodu deposunun kök dizini bir requirements.txt veya poetry.lock dosyası içermelidir.
Yapılandırma notları
-
Python sürümleri
CNB varsayılan olarak en son Python sürümünü (şu anda 3.13) yükler. Farklı bir sürüm kullanmak için kök dizine bir
.python-versiondosyası ekleyin ve hedef sürümü belirtin:$ cat .python-version 3.13 -
Procfile
Procfilekök dizinde bulunan işlem türünü ve başlatma komutunu bildiren düz metin bir dosyadır. Aşağıdaki örnek Gunicorn kullanan bir Python uygulaması için Procfile gösterir:web: gunicorn --config gunicorn.conf.py gettingstarted.wsgiNotBasit uygulamalar için Procfile gerekmez ancak başlatma komutunu açık hale getirmek ve otomatik algılamaya güvenmemek için Python uygulamalarına bir tane ekleyin. Daha fazla bilgi için Procfile'lara giriş bölümüne bakın.
Örnek projeler
GitHub: github-python-falcon-demo
Gitee: gitee-python-falcon-demo
Daha fazla bilgi için buildpacks-python adresine bakın.
Go
Uygulamalar için gereksinimler
Go uygulamalarının aşağıdaki gereksinimleri karşılaması gerekir:
Kod deposunun kök dizini bir
go.moddosyası içermelidir.go.moddosyasındakimodule nameen az bir eğik çizgi (/) içermelidir.-
Derleme için Go 1.16 veya sonraki bir sürüm gerekir. Bağımlılık yönetimi için Go modülleri kullanılmalıdır.
NotCNB bağımlılık yönetimi için yalnızca Go modüllerini destekler. dep, godep, govendor ve glide gibi üçüncü taraf bağımlılık yöneticileri desteklenmez.
Yapılandırma notları
-
Go sürümleri
CNB Go sürümünü
go.modiçindekigoyönergesinden okur.go 1.17gibi bir ana sürüm tanımlayıcısı derleme sırasında mevcut olan o serinin en son yama sürümüne çözülür. Belirli bir yama sürümüne sabitlemek için tam sürümü belirtin (örneğingo 1.17.13).Aşağıdaki girdi derleme sırasında mevcut olan en son Go 1.17.x sürümünü seçer:
go 1.17 -
Bağımlılık yönetimi
Kök dizin bir
vendor/modules.txtdosyası içeriyorsa CNB bunları indirmek yerinevendordizinindeki Go modüllerini kullanır.Bir
vendor/modules.txtdosyası yoksa CNB derlemeden önce Go modüllerini indirir.
-
Paket yükleme
CNB projede algılanan tüm
mainpaketlerini derler.
Örnek projeler
GitHub: github-go-web-demo
Gitee: gitee-go-web-demo
Daha fazla bilgi için buildpacks-go adresine bakın.
Node.js
Uygulamalar için gereksinimler
Node.js uygulamalarının aşağıdaki gereksinimleri karşılaması gerekir:
CNB'nin uygulamayı algılayabilmesi için kök dizinde geçerli bir
package.jsondosyası bulunmalıdır.Bağımlılıkları yüklemek için geçerli bir npm, yarn veya pnpm kilitleme dosyası bulunmalıdır.
Yapılandırma notları
Node.js sürümleri
Node.js sürümünü sabitlemek için package.json içindeki engines.node alanını ayarlayın. Sürüm belirtilmezse CNB en son LTS sürümünü yükler. Bu sürüm zamanla değişebilir ve beklenmedik derleme davranışlarına neden olabilir.
Aşağıdaki örnek uygulamayı en son Node.js 20.x sürümüne sabitler:
{
"engines": {
"node": "20.x"
}
}
engines.node alanı package.json ile aynı anlamsal sürüm sözdizimini destekler. Varsayılan LTS sürümü güncellendiğinde beklenmedik değişiklikleri önlemek için Node.js sürümünü sabitleyin.
Örnek projeler
GitHub: github-nodejs-express-demo
Gitee: gitee-nodejs-express-demo
Daha fazla bilgi için buildpacks-nodejs adresine bakın.
PHP
Uygulamalar için gereksinimler
PHP uygulamalarının aşağıdaki gereksinimleri karşılaması gerekir:
PHP 8.2, 8.3 ve 8.4 desteklenir.
Uygulama deposunun kök dizini hem
composer.jsonhem decomposer.lockdosyalarını içermelidir.
Yapılandırma notları
PHP
PHP çalışma zamanı sürümünü composer.json içinde belirtin. Aşağıdaki örnek PHP 8.2.0 veya sonraki bir sürümü gerektirir:
{
"require": {
"php": "^8.2.0"
}
}
Örnek projeler
GitHub: github-php-demo
Gitee: gitee-php-demo
Daha fazla bilgi için buildpacks-php ve php-support adreslerine bakın.
Ruby
Uygulamalar için gereksinimler
Kod deposunun kök dizini geçerli Gemfile ve Gemfile.lock dosyalarını içermelidir.
Yapılandırma notları
-
Ruby sürümleri
Ruby sürümünü
Gemfileiçinde belirtin veGemfile.lockdosyasını buna göre güncelleyin:-
Ruby sürümünü
Gemfileiçinde belirtin:ruby "3.3.0" -
Gemfile.lockdosyasını güncelleyin:$ bundle update --ruby -
Gemfile.lockiçindeki Ruby sürümünü doğrulayın:RUBY VERSION ruby 3.3.0p0Gemfile.lockiçinde Ruby sürümü bulunamazsa Buildpacks varsayılan Ruby sürümünü yükler. Varsayılan sürüm güncellendiğinde beklenmedik değişiklikleri önlemek için bir sürüm belirtin.
-
-
Bundler sürümleri
Bundler'ı bilinen kararlı bir sürüme sabitlemek için
Gemfile.lockiçinde Bundler sürümünü belirtin. Örnek:BUNDLED WITH 2.5.6Gemfile.lockiçinde Bundler sürümü bulunamazsa Buildpacks varsayılan Bundler sürümünü yükler. Varsayılan sürüm güncellendiğinde beklenmedik değişiklikleri önlemek için bir sürüm belirtin.
Örnek projeler
GitHub:
Gitee:
Daha fazla bilgi için buildpacks-ruby ve application-contract.md adreslerine bakın.