Merhaba arkadaşlar, bugün sizlere sunucu optimizasyonu ve yönetim kolaylığı açısından benim de çok sık başvurduğum bir teknoloji olan Nginx Unit'ten bahsedeceğim. Eğer aynı sunucuda PHP, Python, Node.js, Go, Ruby gibi farklı dillerde yazılmış uygulamalarınız varsa ve bunları ayrı ayrı süreçlerle yönetmekten yorulduysanız, bu rehber tam size göre. Nginx Unit, tüm bu uygulamaları tek bir ana süreç (unitd) içinde yönetmenizi sağlayarak kaynak kullanımınızı iyileştirir ve yapılandırma yönetimini merkezileştirir.
Nginx Unit Nedir ve Neden Kullanmalıyım?
Nginx Unit, geleneksel Nginx web sunucusundan farklı, dinamik bir uygulama sunucusudur. En büyük avantajı, çalışırken (runtime'da) yeniden başlatmaya gerek kalmadan yapılandırmayı değiştirebilmeniz ve farklı programlama dillerini aynı süreç içinde destekleyebilmeniz. Özellikle konteyner ortamlarında veya mikroservis mimarilerinde yapılandırma esnekliği sağlamak için birebirdir. Benim sunucularımda kaynak tüketimini gözle görülür şekilde düşürdü ve yönetimi çok kolaylaştırdı.
Kurulum Adımları (Ubuntu/Debian Örneği)
Kurulum oldukça basittir. Resmi reposunu sistemimize ekleyip paketi yükleyeceğiz. Aşağıdaki adımları root yetkisiyle veya sudo ile çalıştırmanız gerekiyor.
İlk olarak, gerekli tool'ları ve GPG anahtarını ekleyelim:
Ardından, Nginx Unit'in resmi GPG anahtarını indirip sistemimize ekleyelim:
Bir sonraki adım, apt kaynak listesine Unit reposunu eklemek:
Son olarak, paket listesini güncelleyip Nginx Unit'i ve örneğin PHP modülünü kuralım:
Bu komutla temel Unit sunucusu ve PHP dili modülünü yüklemiş olduk. Eğer Python, Node.js veya Go kullanacaksanız, unit-python, unit-nodejs, unit-go paketlerini de yükleyebilirsiniz.
Temel Yapılandırma ve İlk Uygulamamız
Unit, yapılandırmasını bir JSON veya RESTful API üzerinden yönetir. İlk yapılandırmamızı yapmak için /var/www/html dizininde basit bir info.php dosyası oluşturalım.
Şimdi asıl önemli kısma gelelim: Unit'e uygulamamızı ve route'umuzu (yönlendirmemizi) tanıtmak. Bunun için bir JSON konfigürasyon dosyası oluşturacağız. Ben genelde /etc/unit/config.json gibi bir yol kullanırım.
Bu konfigürasyonda neler yaptık bir bakalım:
- :8300 portunu dinlemeye aldık ve gelen istekleri "routes" bölümüne yönlendirdik.
- "routes" bölümünde, eğer istek .php ile bitiyorsa, onu "php_app" isimli uygulamamıza gönder dedik.
- "applications" bölümünde ise PHP uygulamamızın temel ayarlarını (çalışacak proses sayısı, kök dizin, kullanıcı) tanımladık.
Bu JSON yapılandırmasını Unit'e uygulamak için curl komutunu kullanıyoruz:
Eğer her şey yolundaysa, terminalde yapılandırmanın JSON halini geri döndürecektir. Artık tarayıcınızdan http://SUNUCU_IP_ADRESINIZ:8300/info.php adresine giderek PHP bilgi sayfasını görebilirsiniz.
Dikkat Edilmesi Gerekenler ve Optimizasyon İpuçları
Arkadaşlar, bu ayarları yaparken şu noktalara çok dikkat etmelisiniz:
- /var/run/control.unit.sock soketi, Unit'in yönetim arayüzüdür. Bu dosyaya erişimi sadece yetkili kullanıcılara (örn: root) bırakın.
- "processes" sayısını, sunucunuzun CPU çekirdek sayısına ve uygulamanızın yoğunluğuna göre ayarlayın. Ben genelde çekirdek sayısının 1.5-2 katı kadar proses açılmasını öneririm.
- Yapılandırmayı değiştirdikten sonra Unit servisini yeniden başlatmanıza GEREK YOKTUR. Yukarıdaki curl komutu ile anında devreye alınır. Bu, sıfır kesinti süresi (zero-downtime) demektir.
- Eğer Nginx'i reverse proxy olarak kullanmak isterseniz (ki tavsiye ederim), Nginx'in site konfigürasyonunda proxy_pass
şeklinde bir satır eklemeniz yeterli olacaktır.
Sonuç
Nginx Unit, özellikle modern, çok dilli uygulama yığınlarını yönetmek için harika bir araç. Kurulumu ve yapılandırması oldukça basit, ancak sağladığı esneklik ve performans avantajı çok büyük. Ben artık yeni projelerimde varsayılan uygulama sunucusu olarak Unit'i tercih ediyorum.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle "processes" sayısını veya farklı dil modüllerini (Python/Go) birlikte kullanma konusunda tecrübeleriniz neler? Aklınıza takılan herhangi bir soru olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.
Nginx Unit, geleneksel Nginx web sunucusundan farklı, dinamik bir uygulama sunucusudur. En büyük avantajı, çalışırken (runtime'da) yeniden başlatmaya gerek kalmadan yapılandırmayı değiştirebilmeniz ve farklı programlama dillerini aynı süreç içinde destekleyebilmeniz. Özellikle konteyner ortamlarında veya mikroservis mimarilerinde yapılandırma esnekliği sağlamak için birebirdir. Benim sunucularımda kaynak tüketimini gözle görülür şekilde düşürdü ve yönetimi çok kolaylaştırdı.
Kurulum oldukça basittir. Resmi reposunu sistemimize ekleyip paketi yükleyeceğiz. Aşağıdaki adımları root yetkisiyle veya sudo ile çalıştırmanız gerekiyor.
İlk olarak, gerekli tool'ları ve GPG anahtarını ekleyelim:
Bash:
sudo apt-get update
sudo apt-get install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
Ardından, Nginx Unit'in resmi GPG anahtarını indirip sistemimize ekleyelim:
Bash:
curl -sSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-unit-keyring.gpg >/dev/null
Bir sonraki adım, apt kaynak listesine Unit reposunu eklemek:
Bash:
echo "deb [signed-by=/usr/share/keyrings/nginx-unit-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" | sudo tee /etc/apt/sources.list.d/unit.list
echo "deb-src [signed-by=/usr/share/keyrings/nginx-unit-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" | sudo tee -a /etc/apt/sources.list.d/unit.list
Son olarak, paket listesini güncelleyip Nginx Unit'i ve örneğin PHP modülünü kuralım:
Bash:
sudo apt-get update
sudo apt-get install unit unit-php
Bu komutla temel Unit sunucusu ve PHP dili modülünü yüklemiş olduk. Eğer Python, Node.js veya Go kullanacaksanız, unit-python, unit-nodejs, unit-go paketlerini de yükleyebilirsiniz.
Unit, yapılandırmasını bir JSON veya RESTful API üzerinden yönetir. İlk yapılandırmamızı yapmak için /var/www/html dizininde basit bir info.php dosyası oluşturalım.
Bash:
sudo bash -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
Şimdi asıl önemli kısma gelelim: Unit'e uygulamamızı ve route'umuzu (yönlendirmemizi) tanıtmak. Bunun için bir JSON konfigürasyon dosyası oluşturacağız. Ben genelde /etc/unit/config.json gibi bir yol kullanırım.
JSON:
{
"listeners": {
":8300": {
"pass": "routes"
}
},
"routes": [
{
"match": {
"uri": ".php"
},
"action": {
"pass": "applications/php_app"
}
}
],
"applications": {
"php_app": {
"type": "php",
"processes": 4,
"root": "/var/www/html",
"user": "www-data",
"group": "www-data"
}
}
}
Bu konfigürasyonda neler yaptık bir bakalım:
- :8300 portunu dinlemeye aldık ve gelen istekleri "routes" bölümüne yönlendirdik.
- "routes" bölümünde, eğer istek .php ile bitiyorsa, onu "php_app" isimli uygulamamıza gönder dedik.
- "applications" bölümünde ise PHP uygulamamızın temel ayarlarını (çalışacak proses sayısı, kök dizin, kullanıcı) tanımladık.
Bu JSON yapılandırmasını Unit'e uygulamak için curl komutunu kullanıyoruz:
Bash:
sudo curl -X PUT --data-binary @/etc/unit/config.json --unix-socket /var/run/control.unit.sock http://localhost/config/
Eğer her şey yolundaysa, terminalde yapılandırmanın JSON halini geri döndürecektir. Artık tarayıcınızdan http://SUNUCU_IP_ADRESINIZ:8300/info.php adresine giderek PHP bilgi sayfasını görebilirsiniz.
Arkadaşlar, bu ayarları yaparken şu noktalara çok dikkat etmelisiniz:
- /var/run/control.unit.sock soketi, Unit'in yönetim arayüzüdür. Bu dosyaya erişimi sadece yetkili kullanıcılara (örn: root) bırakın.
- "processes" sayısını, sunucunuzun CPU çekirdek sayısına ve uygulamanızın yoğunluğuna göre ayarlayın. Ben genelde çekirdek sayısının 1.5-2 katı kadar proses açılmasını öneririm.
- Yapılandırmayı değiştirdikten sonra Unit servisini yeniden başlatmanıza GEREK YOKTUR. Yukarıdaki curl komutu ile anında devreye alınır. Bu, sıfır kesinti süresi (zero-downtime) demektir.
- Eğer Nginx'i reverse proxy olarak kullanmak isterseniz (ki tavsiye ederim), Nginx'in site konfigürasyonunda proxy_pass
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
Nginx Unit, özellikle modern, çok dilli uygulama yığınlarını yönetmek için harika bir araç. Kurulumu ve yapılandırması oldukça basit, ancak sağladığı esneklik ve performans avantajı çok büyük. Ben artık yeni projelerimde varsayılan uygulama sunucusu olarak Unit'i tercih ediyorum.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Özellikle "processes" sayısını veya farklı dil modüllerini (Python/Go) birlikte kullanma konusunda tecrübeleriniz neler? Aklınıza takılan herhangi bir soru olursa aşağıya yazmaktan çekinmeyin, elimden geldiğince yardımcı olmaya çalışırım.