PM2 Nedir? PM2 ile NodeJS Process Yönetimi
PM2 Nedir?, PM2 projelerinizi kolayca başlatmanıza, durdurmanıza, takip etmenize ve sürekli olarak çalışmalarını sağlamanıza olanak tanır. PM2, uygulamalarınız çökse dahi otomatik bir şekilde yeniden başlatarak kesintisiz bir şekilde uygulamalarınızın çalışmasını sağlar. Uygulamalarınızın loglarını toplu bir şekilde kontrol edebilir hata ayıklamanızı bu şekilde kolaylaştırabilmektedir.
Docker Gerekli ile Ortamın Oluşturulması.
PM2 kurulumuna geçmeden önce hızlıca ve kolayca gerekli ortamı oluşturabilmek için Dockerfile ile NodeJs kurulu server ayağa kaldıracağız.
Öncelikle test amaçlı basit bir Nodejs uygulaması yazalım.
// app.js
const http = require('http');
const hostname = '0.0.0.0';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World from Node.js!\\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at <http://$>{hostname}:${port}/`);
});
Daha sonra Dockerfile dosyamızı yazalım.
FROM node:lts
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
package.json dosyamızı oluşturuyoruz.
{
"name": "docker-node-app",
"version": "1.0.0",
"description": "Simple Node.js app",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {}
}
Şimdi Docker container’ı oluşturup çalıştıracağız.
docker build -t node-app .
Image oluştu.
Docker imageleri kontrol ettiğimizde geldiğini görüyoruz.
Docker run komutu ile containerimizi ayağa kaldırıyoruz.
docker run -d -p 3000:3000 --name node-app-container node-app
Başarılı bir şekilde çalıştığını görüyoruz.
Portumuzu kontrol ettiğimizde de mesajımız bizi karşılıyor.
PM2 Kurulumu
Yukarıda gerekli ortamımızı oluşturmuştuk. Şimdi ise container içerisine girerek PM2 kurulumunu gerçekleştirelim.
Komutu ile container’a giriş yapalım.
docker exec -it node-app-container bash
Komutu ile PM2 yüklüyoruz.
npm install -g pm2
Kurulduktan sonra uygulamamızı PM2 ile başlatabiliriz. Uygulama ana dizininde aşağıdaki başlatma komutunu çalıştırıyoruz.
pm2 start app.js
pm2 list
Komutu ile mevcut çalışan uygulamalarımızı listeleyebiliriz.
Burada uygulamamızın status durumu errored olarak gözüküyor. Loglarını kontrol ederek sorunu tespit edebiliriz.
pm2 logs app
Komutu ile loglarımızı kontrol ettiğimizde portun kullanıldığını görüyoruz. Sunucumuzda farklı bir basit uygulamalar oluşturarak PM2 ile başlatalım.
3 tane farklı portları kullanan bir app oluşturduk. Bunları PM2 ile başlatarak kontrol edeceğiz.
pm2 start app1.js
Aşağıdaki görselde görüldüğü üzere app1 uygulamamız başlatıldı ve online durumda. Diğer uygulamalarımızı başlatalım.
pm2 list
komutu ile baktığımızda 3 uygulamamız çalışır durumda.
PM2 kurulumunu başarılı bir şekilde gerçekleştirdik.
PM2 Monit
pm2 monit
komutu ile uygulamalarımızı anlık olarak izleyebiliriz.
Sol tarafta uygulamalarımız gözüküyor. Sağ tarafta ise o uygulamaya ait loglarımızı görüntüleyebilmekteyiz. Aşağı ve yukarı ok işaretleri ile geçiş yapabilmekteyiz.
Sadece logları görüntülemek için pm2 logs komutunu kullanıyoruz.
Sadece bir uygulamaya ait log dosyalarını görüntülemek için aşağıdaki komut kullanılabilir.
pm2 logs app1 (uygulama adı)
Uygulama Yönetimi
Mevcutta çalışan tüm uygulamaları durdurmak için: pm2 stop all
komutu kullanılabilir.
pm2 start all
komutu ile tüm uygulamalar tekrar başlatılabilir.
Sadece belirli bir uygulamayı durdurmak için pm2 stop
<UygulamaAdı> verilmesi yeterlidir.
Otomasyon ve Dağıtım
- Otomatik Yeniden Başlatma: PM2, uygulamalarınızın çökmesi durumunda otomatik olarak yeniden başlatılmasını sağlar.
- Startup Scriptleri: PM2’nin uygulamaları sistem açılışında başlatmasını sağlamak için startup scriptleri oluşturabilirsiniz.
- PM2 Runtime: PM2’nin “runtime” versiyonunu kullanarak, Node.js uygulamalarını bir Docker konteyneri içinde çalıştırabilirsiniz.
- Keymetrics Entegrasyonu: PM2’yi Keymetrics ile entegre ederek daha ayrıntılı performans ve izleme bilgileri alabilirsiniz.
Eline sağlık Enes.