Kısıtlı (Jailed) SSH Ortamında Node.js ve PM2 Kurulumu: Kesin Çözüm Rehberi
- Kısıtlı (Jailed) SSH Ortamında Node.js ve PM2 Kurulumu: Kesin Çözüm Rehberi
- 1. Adım: Ön Hazırlık – "Ek İkili Dosyalar" ve Kütüphane İzinleri
- 2. Neden Jailed SSH'ta Standart Node.js Kurulumu Çöker?
- 3. Adım Adım NVM ile Özel Node.js Motoru Kurmak
- 4. NPM EACCES (Yetki) Hatalarını Tamamen Aşmak
- Sürüm Çakışmalarını (ERESOLVE) Gidermek
- 5. Jailed Ortamda PM2 Kurulumu ve "module_conf.json" Hatası Çözümü
- 6. Uygulamayı Başlatmak ve PM2'yi Kalıcı Hale Getirmek
- Bonus: SSH Her Açıldığında Ayarları Korumak (.bashrc Otomasyonu)
- Özet
Paylaşımlı hosting sunucularında veya KeyHelp, cPanel, Plesk gibi kontrol panellerinde kısıtlı (Jailed) SSH erişimi ile Node.js uygulaması barındırmak genellikle kabusa dönüşebilir. Sunucu yöneticileri güvenlik amacıyla “Root” yetkilerini kapattığında, standart npm install, derleme (build) işlemleri ve pm2 komutları ardı ardına EACCES (Yetki Reddedildi) veya ERR_DLOPEN_FAILED hataları vermeye başlar.
Bu kapsamlı rehberde; Keyhel Panel’de Jailed SSH ortamında güvenlikten ödün vermeden, gerekli izinleri ayarlamayı, NVM (Node Version Manager) kullanarak Node.js kurmayı ve uygulamalarınızı PM2 ile 7/24 kesintisiz nasıl çalıştıracağınızı adım adım anlatıyoruz.
1. Adım: Ön Hazırlık – “Ek İkili Dosyalar” ve Kütüphane İzinleri
Jailed SSH (Hapishane) ortamı, kullanıcıyı sadece belli başlı komutlarla sınırlandırır. NPM’in paketleri indirebilmesi, zipli dosyaları açabilmesi ve özellikle Vite/Rollup gibi modern araçların Linux çekirdek kütüphanelerine ulaşıp derleme (build) yapabilmesi için sunucu panelinizden bazı komutlara izin vermeniz gerekir.
Hosting panelinizden (Örn: KeyHelp’te Yapılandırma > Sınırlandırılmış SSH > Ek İkili Dosyalar bölümüne) aşağıdaki listeyi eksiksiz olarak ekleyin ve kaydedin:
Plaintext
/usr/bin/node
/usr/bin/npm
/usr/local/bin/pm2
/usr/bin/sed
/usr/bin/awk
/usr/bin/tr
/usr/bin/uname
/usr/bin/tar
/usr/bin/gzip
/usr/bin/xz
/usr/bin/sort
/usr/bin/grep
/usr/bin/tail
/usr/bin/head
/usr/bin/cut
/usr/bin/wc
/usr/bin/dirname
/usr/bin/find
/usr/bin/tee
/usr/bin/sha256sum
/usr/bin/rm
/usr/bin/cp
/usr/bin/mv
/lib/x86_64-linux-gnu/librt.so.1
/usr/lib/x86_64-linux-gnu/librt.so.1
/lib64/librt.so.1
Not: Listenin sonundaki librt.so.1 yolları, Vite ve Rollup kullanan projelerde derleme sırasında alınan Error: librt.so.1: cannot open shared object file (ERR_DLOPEN_FAILED) hatasının kesin çözümüdür.
2. Neden Jailed SSH’ta Standart Node.js Kurulumu Çöker?
İzinleri verdikten sonra bile, sistem sizi genellikle /www veya /home/kullaniciadi gibi bir dizine hapseder. Ancak Node.js ve NPM, kurulum ve önbellek (cache) işlemleri için ana sunucu dizinlerine (/.npm) erişmeye çalışır.
Bu durum karşılaştığımız en meşhur hatayı doğurur: Error: EACCES: permission denied, mkdir '/.npm'
Çözüm: Uygulamaları “Root” düzeyinde değil, tamamen kullanıcının kendi izole alanında (Kapsayıcı mantığıyla) kurmaktır.
3. Adım Adım NVM ile Özel Node.js Motoru Kurmak
Her müşteriye veya projeye kendi bağımsız Node.js motorunu atamak için NVM kullanıyoruz. Bu sayede aynı sunucuda bir proje Node 18 ile çalışırken diğeri Node 20 ile çakışmadan çalışabilir.
Terminalinize giriş yapın ve ortamı uyandırmak için şu komutları sırasıyla girin (NVM kurulu değilse standart cURL komutuyla kurabilirsiniz):
Bash
# NVM'in yolunu belirleyin
export NVM_DIR="/www/.nvm"
# NVM'i aktif edin
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# İstediğiniz Node sürümünü kurun ve kullanın (Örn: v20)
nvm install 20
nvm use 20
4. NPM EACCES (Yetki) Hatalarını Tamamen Aşmak
NPM’in sunucu kök dizinlerine dosya yazmaya çalışmasını engellemek için ona “Ev” dizininin neresi olduğunu söylemeliyiz. Aşağıdaki komut, NPM’in tüm önbellek dosyalarını kısıtlı alanımız olan /www içerisine yazmasını sağlar:
Bash
export HOME="/www"
Sürüm Çakışmalarını (ERESOLVE) Gidermek
Projelerinizde paket sürümleri uyuşmazlığı (npm error ERESOLVE) yaşıyorsanız, NPM’e eski tip bağımlılık çözümlemeyi kullanmasını söyleyerek kurulumu zorlayabilirsiniz:
Bash
npm install --legacy-peer-deps
5. Jailed Ortamda PM2 Kurulumu ve “module_conf.json” Hatası Çözümü
Uygulamanızı arka planda sürekli çalıştıracak olan PM2’yi kurmak, yetki sorunlarının en çok yaşandığı yerdir. PM2 logları ve PID dosyalarını ana dizindeki /.pm2 içine yazmaya çalışır. Bunu önlemek için PM2’nin çalışma alanını yeniden yönlendiriyoruz:
Bash
# PM2'ye yeni bir ev gösteriyoruz
export PM2_HOME="/www/.pm2"
# PM2'yi global olarak kuruyoruz
npm install -g pm2
Kurulumun başarılı olup olmadığını test etmek için:
Bash
pm2 status
Bu komut size boş da olsa o meşhur PM2 tablosunu vermelidir.
6. Uygulamayı Başlatmak ve PM2’yi Kalıcı Hale Getirmek
Tüm altyapımız hazır. Şimdi Node.js veya derlenmiş (build edilmiş) projemizi canlıya alalım.
1. Uygulamanızın klasörüne girin:
Bash
cd /www/
2. PM2 ile uygulamayı başlatın: Birden fazla uygulama barındırıyorsanız --name parametresi ile isimleri birbirinden ayırmayı unutmayın.
Bash
pm2 start index.js --name "proje-adi" --cwd /www/
3. İşlemi Kaydedin: Sunucu herhangi bir sebeple yeniden başlatıldığında uygulamanızın otomatik olarak tekrar açılması için listeyi kaydedin:
Bash
pm2 save
Bonus: SSH Her Açıldığında Ayarları Korumak (.bashrc Otomasyonu)
Jailed SSH ortamları çok “unutkandır”. Terminali kapatıp açtığınızda pm2 status veya npm komutları tekrar hata verebilir. Çünkü girdiğimiz export komutları hafızadan silinir.
Her girişinizde tek bir kelimeyle ortamı hazırlamak için kendinize bir kısayol (alias) oluşturun:
Bash
echo 'alias start="export HOME=/www && export PM2_HOME=/www/.pm2 && export NVM_DIR=/www/.nvm && [ -s \"\$NVM_DIR/nvm.sh\" ] && . \"\$NVM_DIR/nvm.sh\" && nvm use 20"' >> /www/.bashrc
source /www/.bashrc
Artık SSH’a her bağlandığınızda sadece start yazıp Enter’a basmanız yeterlidir. Tüm NVM ve PM2 yollarınız saniyeler içinde arka planda hazır hale gelecektir.
Özet
Kısıtlı SSH izinleri, modern web uygulamaları geliştirmek için bir engel değildir. Doğru yapılandırılmış NVM ortamları, çekirdek librt izinleri ve export yönlendirmeleri ile ana sunucuya hiçbir zarar vermeden (Root yetkisi kullanmadan) tamamen izole, güvenli ve yüksek performanslı Node.js barındırma altyapıları kurabilirsiniz. Başarılar dileriz!





