Ana içeriğe geç

Yapılandırma Dosyası

Birden çok uygulamayı PM2 ile yönetirken, bunları düzenlemek için bir JS yapılandırma dosyası kullanın.

Yapılandırmayı oluşturma

Bir örnek yapılandırma dosyası oluşturmak için bu komutu yazabilirsiniz:

$ pm2 init simple

Bu, bir örnek ecosystem.config.js oluşturacaktır:

module.exports = {
apps : [{
name : "app1",
script : "./app.js"
}]
}

Kendi yapılandırma dosyanızı oluşturuyorsanız, PM2'nin bunu bir yapılandırma dosyası olarak tanıyabilmesi için .config.js ile bitmesi gerektiğini unutmayın.

Yapılandırma Dosyası Üzerinde İşlem Yapmak

Uygulama üzerinde işlem yapmak yerine, bir yapılandırma dosyasında bulunan tüm uygulamaları başlat/durdur/yeniden başlat/sil işlemini kesintisiz bir şekilde yapabilirsiniz:

# Tüm uygulamaları başlat
pm2 start ecosystem.config.js

# Hepsini durdur
pm2 stop ecosystem.config.js

# Hepsini yeniden başlat
pm2 restart ecosystem.config.js

# Hepsini yeniden yükle
pm2 reload ecosystem.config.js

# Hepsini sil
pm2 delete ecosystem.config.js
ipucu

Belirli bir uygulama üzerinde işlem yapmak için adını ve --only seçeneğini kullanabilirsiniz.

pm2 start ecosystem.config.js --only api-app

Not: --only seçeneği başlatma/yeniden başlatma/durdurma/silme için de çalışır.

Her bir uygulama adını virgülle ayırarak birden fazla uygulama üzerinde işlem yapmayı da belirtebilirsiniz:

pm2 start ecosystem.config.js --only "api-app,worker-app"

Ortamları Değiştirme

Farklı ortam değişkenleri kümesi belirtmek için env_* seçeneğini kullanabilirsiniz.

Örnek:

module.exports = {
apps : [{
name : "app1",
script : "./app.js",
env_production: {
NODE_ENV: "production"
},
env_development: {
NODE_ENV: "development"
}
}]
}

Şimdi farklı ortamlar arasındaki değişkenleri değiştirmek için, --env [env name] seçeneğini belirtin:

pm2 start process.json --env production
pm2 restart process.json --env development

Mevcut Nitelikler

Uygulama davranışı ve yapılandırması, aşağıdaki nitelikler ile ince ayar yapılabilir:

Genel

AlanTürÖrnekAçıklama
name(string)"my-api"uygulama adı (varsayılan olarak uzantısı olmayan dosya adı)
script(string)"./api/app.js"pm2 start'a göre ilişkili script yolu
cwd(string)"/var/www/"uygulamanızın başlatılacağı dizin
args(string)"-a 13 -b 12"CLI üzerinden script'e geçirilen tüm argümanları içeren dize
interpreter(string)"/usr/bin/python"yorumlayıcı mutlak yolu (varsayılan olarak node)
interpreter_args(string)"--harmony"yorumlayıcıya geçirilecek seçenek
node_args(string)yorumlayıcı_args için takma ad

Gelişmiş özellikler

AlanTürÖrnekAçıklama
instancesnumber-1başlatılacak uygulama örneği sayısı
exec_modestring"cluster"uygulamanızı başlatma modu, "cluster" veya "fork" olabilir, varsayılan fork
watchboolean or []trueizleme & yeniden başlatma özelliğini etkinleştirir, dizinde veya alt dizinde dosya değiştiğinde, uygulamanız yeniden yüklenir
ignore_watchliste["[\/\\]\./", "node_modules"]izleme özelliğinden bazı dosya veya klasör adlarını yok saymak için regex listesi
max_memory_restartstring"150M"uygulamanız belirtilen bellek miktarını aşarsa yeniden başlatılır. kullanıcı dostu format: "10M", "100K", "2G" vb. olabilir.
envnesne{"NODE_ENV": "development", "ID": "42"}uygulamanızda görünecek çevre değişkenleri
env_nesne{"NODE_ENV": "production", "ID": "89"}pm2 restart app.yml --env yaptığınızda enjekte edin
appendEnvToNamebooleantruevarsayılan olarak false. Tek bir sunucuda birden fazla ortam dağıtmak için kullanılır. Her ortama isme eklenecektir. örn: my-api-production
source_map_supportbooleantruevarsayılan olarak true, [source map dosyasını etkinleştir/devre dışı bırak]
instance_varstring"NODE_APP_INSTANCE"belgelere bakın
filter_envdizi türünde string[ "REACT_" ]"REACT_" ile başlayan global değişkenleri hariç tutar ve kümenin içine girmelerine izin vermez.

Kayıt dosyaları

AlanTürÖrnekAçıklama
log_date_format(string)"YYYY-MM-DD HH:mm Z"günlük tarih formatı (kayıt bölümü için bakınız)
error_file(string)hata dosyası yolu (varsayılan olarak $HOME/.pm2/logs/<uygulama adı>-error-<pid>.log)
out_file(string)çıktı dosyası yolu (varsayılan olarak $HOME/.pm2/logs/<uygulama adı>-out-<pid>.log)
log_file(string)her iki çıktı ve hata kaydı için dosya yolu (varsayılan olarak devre dışı)
combine_logsbooleantruetrue olarak ayarlandığında, kayıt dosyalarını işlem kimliği ile sonlandırmayı önler
merge_logsbooleantruecombine_logs için takma ad
timebooleanfalsevarsayılan olarak false. Eğer true olursa, günlükleri Tarih ile otomatik olarak ön ekle
pid_file(string)pid dosyası yolu (varsayılan olarak $HOME/.pm2/pids/<uygulama adı>-<pid>.pid)

Kontrol akışı

AlanTürÖrnekAçıklama
min_uptime(number)uygulamanın başlatıldığı kabul edilmesi için minimum çalışma süresi
listen_timeoutnumber8000uygulama dinlemediği sürede yeniden yüklemeyi zorlamak için ms cinsinden süre
kill_timeoutnumber1600son bir SIGKILL göndermeden önce geçen süre
shutdown_with_messagebooleanfalsebir uygulamayı process.send('shutdown') ile kapatmak yerine process.kill(pid, SIGINT) kullanarak kapatın
wait_readybooleanfalseyeniden yükleme işlemi için dinleme olayı beklemek yerine process.send('ready') bekleyin
max_restartsnumber10uygulamanın hatalı olduğu kabul edilmeden önce (1 saniye aralığında veya min_uptime ile özelleştirilmiş süre) üst üste verilen hatalı yeniden başlatma sayısı
restart_delaynumber4000çökme durumunda yeniden başlatmadan önce beklenmesi gereken süre (milisaniye cinsinden). varsayılan 0.
autorestartbooleanfalsevarsayılan olarak true. false ise, PM2 uygulamanız çökerse veya sonlandığında yeniden başlatmayacaktır
cron_restartstring"1 0 * * *"uygulamanızı yeniden başlatmak için bir cron deseni. Uygulama çalışıyor olmalıdır ki cron özelliği çalışsın
vizionbooleanfalsevarsayılan olarak true. false olursa, PM2 vizyon özellikleri olmadan başlatılır (sürüm kontrolü meta verisi)
post_updateliste["npm install", "echo launching the app"]bir Pull/Güncelleme işleminden sonra gerçekleştirilecek komutlar listesi
forcebooleantruevarsayılan olarak false. true ise, aynı script'i birkaç kez başlatabilirsiniz ki bu genellikle PM2 tarafından izin verilmez

Dağıtım

Giriş adıAçıklamaTürVarsayılan
keySSH anahtar yoluString$HOME/.ssh
userSSH kullanıcısıString
hostSSH ana bilgisayarı[String]
ssh_optionsKomut satırı bayrağı olmadan SSH seçenekleri, 'man ssh'ye bakınString veya [String]
refGIT uzak/şubeString
repoGIT uzakString
pathsunucudaki yolString
pre-setupÖn kurulum komutu veya yerel makinenizdeki bir script yoluString
post-setupAna bilgisayardaki post-kurulum komutları veya script yoluString
pre-deploy-localön dağıtım işlemiString
post-deployson dağıtım işlemiString

Dikkate Alınması Gerekenler

JSON uygulama beyanı kullanıldığında geçen tüm komut satırı seçenekleri atılacaktır, yani.

CWD

cwd: JSON beyanınız, script'inizle aynı yerde bulunmak zorunda değildir. JSON'ları script'inizle aynı yerde tutmak istiyorsanız (örneğin, /etc/pm2/conf.d/node-app.json), cwd özelliğini kullanmanız gerekecektir (Bu, symlink'ler kullanan capistrano tarzı dizin yapıları için gerçekten yararlı olabilir). Dosyalar ya cwd dizinine göre göreli ya da mutlak olabilir (aşağıdaki örneğe bakın).

CLI/JSON seçenekleri

Tüm anahtarlar JSON yapılandırılmış bir dosyada kullanılabilir, ancak komut satırında hemen hemen aynı kalır örneğin:

exec_mode         -> --execute-command
max_restarts -> --max-restarts
force -> --force

Bir ESC oluşturmak için alıntı işaretlerini kullanarak, örneğin:

$pm2 start test.js --node-args "port=3001 sitename='first pm2 app'"

nodeArgs argümanı şu şekilde ayrıştırılacaktır:

[
"port=3001",
"sitename=first pm2 app"
]

Ancak şu şekilde ayrıştırılmayacak:

[
"port=3001",
"sitename='first",
"pm2",
"app'"
]

Günlükleri devre dışı bırakma

Günlük kaydını devre dışı bırakmak için error_file veya out_file için /dev/null geçebilirsiniz. Not: PM2 2.4.0'dan itibaren, /dev/null veya NULL günlükleri, platformdan bağımsız olarak devre dışı bırakır.

Günlük Eklentileri

Günlüklerde otomatik kimlik eklerini (örneğin app-name-ID.log) devre dışı bırakmak için merge_logs: true seçeneğini etkinleştirebilirsiniz.

Ortam tanımı

Belirli bir ortam dosyası içinde tanımlanan özel bir ortamı kullanması için pm2'ye belirtmek için --env kullanmalısınız:

{
"apps" : [{
"name" : "worker-app",
"script" : "./worker.js",
"watch" : true,
"env": {
"NODE_ENV": "development"
},
"env_production" : {
"NODE_ENV": "production"
}
},{
"name" : "api-app",
"script" : "./api.js",
"instances" : 4,
"exec_mode" : "cluster"
}]
}

Bu örnekte, pm2 start ecosystem.json yazacağınızda uygulamanızı varsayılan ortamda çalıştıracaktır (geliştirme ortamında). Daha sonra pm2 start ecosystem.json --env production yazarsanız, burada isim production olduğu için env_ niteliğini kullanacaktır, böylece uygulamanızı NODE_ENV=production ile başlatacaktır.

Özel ext_type

  • min_uptime min_uptime değeri şu şekillerde olabilir:

    • Sayı örn. "min_uptime": 3000 3000 milisaniye anlamına gelir.
    • Dize Bu nedenle, kısa ve yapılandırması kolay hale getiriyoruz: h, m ve s, örn.: "min_uptime": "1h" bir saat anlamına gelir, "min_uptime": "5m" beş dakika anlamına gelir ve "min_uptime": "10s" on saniye anlamına gelir (bunlar milisaniyeye dönüştürülecektir).
  • max_memory_restart max_memory_restart değeri şu şekillerde olabilir:

    • Sayı örn. "max_memory_restart": 1024 1024 byte anlamına gelir (BİT DEĞİL).
    • Dize Bu nedenle, kısa ve yapılandırması kolay hale getiriyoruz: G, M ve K, örn.: "max_memory_restart": "1G" bir gigabayt anlamına gelir, "max_memory_restart": "5M" beş megabayt anlamına gelir ve "max_memory_restart": "10K" on kilobayt anlamına gelir (bunlar byte'a dönüştürülecektir).
  • Opsiyonel değerler Örneğin, exec_mode cluster (cluster_mode) veya fork (fork_mode) değerlerini alabilir.

  • Bilinmesi gerekenler

    • "instances": 0 PM2'nin CPU sayısına göre maksimum işlem başlatacağı anlamına gelir (küme modu)
    • dizi args, node_args ve ignore_watch türünde Array (örn: "args": ["--toto=heya coco", "-d", "1"]) veya string (örn: "args": "--to='heya coco' -d 1") olabilir.