{"id":33664,"date":"2025-11-05T16:40:44","date_gmt":"2025-11-05T13:40:44","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33664"},"modified":"2025-11-05T16:40:44","modified_gmt":"2025-11-05T13:40:44","slug":"node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/","title":{"rendered":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Modern web uygulamalar\u0131 d\u00fcnyas\u0131nda Node.js, h\u0131zl\u0131, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 sunucu taraf\u0131 uygulamalar geli\u015ftirmek i\u00e7in pop\u00fcler bir tercih haline gelmi\u015ftir. JavaScript&#8217;in sunucu taraf\u0131nda \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131yan bu \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131, geli\u015ftiricilere u\u00e7tan uca tek bir dil ile uygulama geli\u015ftirme esnekli\u011fi sunar. Ancak bir Node.js uygulamas\u0131n\u0131 geli\u015ftirme a\u015famas\u0131ndan \u00e7\u0131kar\u0131p ger\u00e7ek d\u00fcnya kullan\u0131c\u0131lar\u0131na sunacak bir \u00fcretim ortam\u0131na ta\u015f\u0131mak, dikkatli planlama ve do\u011fru yap\u0131land\u0131rma gerektirir. Bu makalede, Node.js uygulaman\u0131z\u0131 Rocky Linux 9 i\u015fletim sistemi \u00fczerinde g\u00fcvenli, kararl\u0131 ve performansl\u0131 bir \u015fekilde nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Rocky Linux 9, CentOS&#8217;un devam\u0131 niteli\u011finde olup, kurumsal d\u00fczeyde stabilite ve g\u00fcvenlik sunan bir RHEL tabanl\u0131 da\u011f\u0131t\u0131md\u0131r. Bu kombinasyon, \u00fcretim ortamlar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc ve g\u00fcvenilir bir temel olu\u015fturur.<\/p>\n<p>\u00dcretim ortam\u0131 kurulumu sadece kodunuzu sunucuya kopyalamaktan ibaret de\u011fildir. Uygulaman\u0131z\u0131n s\u00fcrekli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak, olas\u0131 hatalara kar\u015f\u0131 dayan\u0131kl\u0131 hale getirmek, gelen trafi\u011fi etkin bir \u015fekilde y\u00f6netmek, g\u00fcvenli\u011fi sa\u011flamak ve performans\u0131 optimize etmek gibi bir\u00e7ok kritik ad\u0131m\u0131 i\u00e7erir. Bu ad\u0131mlar aras\u0131nda Node..js \u00e7al\u0131\u015fma zaman\u0131n\u0131n do\u011fru kurulumu, bir s\u00fcre\u00e7 y\u00f6neticisi (PM2) kullanarak uygulaman\u0131n kesintisiz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak, bir ters proxy (Nginx) ile trafi\u011fi y\u00f6nlendirmek ve y\u00fck dengelemesi yapmak, SSL\/TLS sertifikalar\u0131 ile ileti\u015fimi \u015fifrelemek ve gerekli g\u00fcvenlik \u00f6nlemlerini almak yer almaktad\u0131r. Bu kapsaml\u0131 rehber, Node.js uygulaman\u0131z\u0131 Rocky Linux 9 \u00fczerinde ba\u015far\u0131yla yay\u0131na alman\u0131z i\u00e7in gereken t\u00fcm teknik detaylar\u0131 ve en iyi uygulamalar\u0131 sunacakt\u0131r.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu kurulum s\u00fcrecine ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>Rocky Linux 9 Kurulu Bir Sunucu:<\/strong> Tercihen yeni kurulmu\u015f, temiz bir Rocky Linux 9 sunucusu. Bu bir sanal makine, VPS veya fiziksel bir sunucu olabilir.<br \/>\n*   <strong>SSH Eri\u015fimi:<\/strong> Sunucuya SSH \u00fczerinden eri\u015fim sa\u011flayabilen bir istemci.<br \/>\n*   <strong>Root veya Sudo Yetkilerine Sahip Kullan\u0131c\u0131:<\/strong> Sunucuda sistem d\u00fczeyinde de\u011fi\u015fiklikler yapabilmek i\u00e7in root kullan\u0131c\u0131s\u0131 veya <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131.<br \/>\n*   <strong>Temel Linux Komut Bilgisi:<\/strong> Temel dosya sistemi navigasyonu, paket y\u00f6netimi ve metin d\u00fczenleyici (nano veya vim) kullan\u0131m\u0131 hakk\u0131nda bilgi sahibi olmak.<br \/>\n*   <strong>Bir Alan Ad\u0131 (Domain Name):<\/strong> Uygulaman\u0131za d\u0131\u015far\u0131dan eri\u015fim sa\u011flamak ve SSL\/TLS sertifikas\u0131 almak i\u00e7in bir alan ad\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r (\u00f6rn. <code>ornekuygulama.com<\/code>). Bu alan ad\u0131n\u0131n DNS kay\u0131tlar\u0131, sunucunuzun IP adresini g\u00f6sterecek \u015fekilde yap\u0131land\u0131r\u0131lm\u0131\u015f olmal\u0131d\u0131r.<\/p>\n<h3>Sunucu \u0130lk Kurulumu ve Haz\u0131rl\u0131klar<\/h3>\n<p>Uygulaman\u0131z i\u00e7in sa\u011flam bir temel olu\u015fturmak ad\u0131na sunucunuzu ilk olarak do\u011fru \u015fekilde yap\u0131land\u0131rmak \u00f6nemlidir.<\/p>\n<h4>Sistem G\u00fcncellemesi<\/h4>\n<p>Kuruluma ba\u015flamadan \u00f6nce sistem paketlerinin g\u00fcncel oldu\u011fundan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo dnf update -y\nsudo dnf upgrade -y<\/code><\/pre>\n<p>Bu komutlar, mevcut t\u00fcm paketleri en son s\u00fcr\u00fcmlerine g\u00fcncelleyerek potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131r ve kararl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r.<\/p>\n<h4>Yeni Bir Sudo Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/h4>\n<p>G\u00fcvenlik amac\u0131yla, <code>root<\/code> kullan\u0131c\u0131s\u0131 yerine <code>sudo<\/code> yetkilerine sahip yeni bir kullan\u0131c\u0131 olu\u015fturmak ve g\u00fcnl\u00fck i\u015flemleri bu kullan\u0131c\u0131yla yapmak en iyi uygulamad\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo adduser uygulama_kullanicisi\nsudo passwd uygulama_kullanicisi\nsudo usermod -aG wheel uygulama_kullanicisi<\/code><\/pre>\n<p><code>uygulama_kullanicisi<\/code> yerine kendi istedi\u011finiz kullan\u0131c\u0131 ad\u0131n\u0131 yaz\u0131n. <code>wheel<\/code> grubu, Rocky Linux&#8217;ta <code>sudo<\/code> yetkilerine sahip kullan\u0131c\u0131lar\u0131 i\u00e7erir. Bu ad\u0131mdan sonra, <code>uygulama_kullanicisi<\/code> ile giri\u015f yapabilir ve <code>sudo<\/code> komutunu kullanarak y\u00f6netici ayr\u0131cal\u0131klar\u0131na sahip olabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">su - uygulama_kullanicisi<\/code><\/pre>\n<p>Art\u0131k geri kalan ad\u0131mlar\u0131 bu yeni kullan\u0131c\u0131 ile devam edebilirsiniz.<\/p>\n<h4>SSH G\u00fcvenli\u011fi<\/h4>\n<p>Sunucunuzun g\u00fcvenli\u011fini art\u0131rmak i\u00e7in SSH ayarlar\u0131n\u0131 g\u00f6zden ge\u00e7irmek \u00f6nemlidir:<\/p>\n<p>*   <strong>Varsay\u0131lan SSH Portunu De\u011fi\u015ftirme (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir):<\/strong> SSH&#8217;\u0131n varsay\u0131lan portu olan 22&#8217;yi ba\u015fka bir porta de\u011fi\u015ftirmek, otomatik bot sald\u0131r\u0131lar\u0131n\u0131 azaltabilir.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n<p>    <code>Port 22<\/code> sat\u0131r\u0131n\u0131 bulun ve \u00f6rne\u011fin <code>Port 2222<\/code> olarak de\u011fi\u015ftirin.<br \/>\n*   <strong>Parola ile Oturum A\u00e7may\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma (Anahtar Tabanl\u0131 Kimlik Do\u011frulama):<\/strong> Daha g\u00fcvenli olan anahtar tabanl\u0131 kimlik do\u011frulamay\u0131 kullanmak, parolan\u0131n tahmin edilmesi riskini ortadan kald\u0131r\u0131r. E\u011fer hen\u00fcz yapmad\u0131ysan\u0131z, yerel makinenizde bir SSH anahtar \u00e7ifti olu\u015fturun (<code>ssh-keygen<\/code>) ve genel anahtar\u0131n\u0131z\u0131 (<code>~\/.ssh\/id_rsa.pub<\/code>) sunucudaki <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na kopyalay\u0131n.<br \/>\n    <code>sshd_config<\/code> dosyas\u0131nda a\u015fa\u011f\u0131daki sat\u0131rlar\u0131 kontrol edin\/de\u011fi\u015ftirin:<\/p>\n<pre><code class=\"language-\">PasswordAuthentication no\n    PubkeyAuthentication yes<\/code><\/pre>\n<p>    De\u011fi\u015fiklikleri kaydettikten sonra SSH servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart sshd<\/code><\/pre>\n<p>    <strong>\u00d6NEML\u0130:<\/strong> Portu de\u011fi\u015ftirdiyseniz veya parola ile oturum a\u00e7may\u0131 devre d\u0131\u015f\u0131 b\u0131rakt\u0131ysan\u0131z, sunucuya yeni ayarlarla eri\u015febildi\u011finizden emin olmadan mevcut SSH oturumunuzu kapatmay\u0131n.<\/p>\n<h4>Firewall Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Rocky Linux&#8217;ta varsay\u0131lan g\u00fcvenlik duvar\u0131 <code>firewalld<\/code>&#8216;dir. Sunucunuzu yetkisiz eri\u015fimlerden korumak i\u00e7in <code>firewalld<\/code>&#8216;yi yap\u0131land\u0131rmak \u00e7ok \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">sudo systemctl enable --now firewalld\nsudo systemctl status firewalld<\/code><\/pre>\n<p>SSH eri\u015fimi i\u00e7in portu a\u00e7\u0131n (e\u011fer port 22&#8217;yi de\u011fi\u015ftirdiyseniz, yeni port numaras\u0131n\u0131 kullan\u0131n):<\/p>\n<pre><code class=\"language-bash\">sudo firewall-cmd --permanent --add-service=ssh\nsudo firewall-cmd --reload<\/code><\/pre>\n<p>Daha sonra Nginx ve di\u011fer servisler i\u00e7in portlar\u0131 a\u00e7aca\u011f\u0131z.<\/p>\n<h3>Node.js ve npm Kurulumu<\/h3>\n<p>Node.js&#8217;i kurman\u0131n birden fazla yolu olsa da, \u00fcretim ortamlar\u0131nda farkl\u0131 Node.js versiyonlar\u0131 aras\u0131nda kolayca ge\u00e7i\u015f yapabilmek ve ba\u011f\u0131ms\u0131z bir kurulum sa\u011flamak i\u00e7in NVM (Node Version Manager) kullanmak en iyi y\u00f6ntemdir.<\/p>\n<h4>NVM (Node Version Manager) Kurulumu<\/h4>\n<p>NVM&#8217;i kurmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.7\/install.sh | bash<\/code><\/pre>\n<p>Kurulum beti\u011fi, NVM&#8217;i kullan\u0131c\u0131n\u0131z\u0131n <code>~\/.nvm<\/code> dizinine kuracak ve kabuk yap\u0131land\u0131rma dosyan\u0131za (\u00f6rn. <code>~\/.bashrc<\/code>, <code>~\/.zshrc<\/code>) gerekli sat\u0131rlar\u0131 ekleyecektir. Kurulumun tamamlanmas\u0131n\u0131n ard\u0131ndan, kabu\u011funuzu yeniden y\u00fcklemeniz veya yeni bir terminal oturumu a\u00e7man\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">source ~\/.bashrc # veya kulland\u0131\u011f\u0131n\u0131z kabuk yap\u0131land\u0131rma dosyas\u0131<\/code><\/pre>\n<p>NVM&#8217;in do\u011fru kuruldu\u011funu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">nvm --version<\/code><\/pre>\n<h4>NVM ile Node.js Kurulumu<\/h4>\n<p>\u015eimdi NVM&#8217;i kullanarak Node.js&#8217;in en son LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcm\u00fcn\u00fc kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">nvm install --lts\nnvm use --lts\nnvm alias default --lts<\/code><\/pre>\n<p>*   <code>nvm install --lts<\/code>: En son LTS s\u00fcr\u00fcm\u00fcn\u00fc indirir ve kurar.<br \/>\n*   <code>nvm use --lts<\/code>: Mevcut kabuk oturumunuz i\u00e7in bu Node.js s\u00fcr\u00fcm\u00fcn\u00fc kullan\u0131r.<br \/>\n*   <code>nvm alias default --lts<\/code>: Yeni kabuk oturumlar\u0131 a\u00e7t\u0131\u011f\u0131n\u0131zda otomatik olarak bu LTS s\u00fcr\u00fcm\u00fcn\u00fcn kullan\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Kurulumu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">node -v\nnpm -v<\/code><\/pre>\n<p>Bu komutlar Node.js ve npm&#8217;in y\u00fckl\u00fc s\u00fcr\u00fcmlerini g\u00f6stermelidir.<\/p>\n<h3>Uygulama S\u00fcre\u00e7 Y\u00f6neticisi: PM2 Kurulumu<\/h3>\n<p>Node.js uygulamalar\u0131 tek i\u015f par\u00e7ac\u0131kl\u0131 oldu\u011fundan, bir hata durumunda uygulaman\u0131n \u00e7\u00f6kmesi t\u00fcm servisi durdurabilir. Ayr\u0131ca, birden fazla \u00e7ekirdekten faydalanmak ve uygulamay\u0131 arka planda s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda tutmak i\u00e7in bir s\u00fcre\u00e7 y\u00f6neticisine ihtiya\u00e7 vard\u0131r. PM2 (Process Manager 2), bu g\u00f6revler i\u00e7in en pop\u00fcler ve g\u00fcvenilir ara\u00e7lardan biridir.<\/p>\n<h4>PM2 Nedir ve Neden Kullan\u0131l\u0131r?<\/h4>\n<p>PM2, Node.js uygulamalar\u0131n\u0131z\u0131 \u00fcretim ortam\u0131nda y\u00f6netmek i\u00e7in kapsaml\u0131 bir s\u00fcre\u00e7 y\u00f6neticisidir. Sundu\u011fu temel \u00f6zellikler \u015funlard\u0131r:<\/p>\n<p>*   <strong>Uygulama S\u00fcreklili\u011fi:<\/strong> Uygulaman\u0131z \u00e7\u00f6kt\u00fc\u011f\u00fcnde otomatik olarak yeniden ba\u015flat\u0131r.<br \/>\n*   <strong>Y\u00fck Dengeleme (Cluster Mode):<\/strong> Uygulaman\u0131z\u0131 sunucunun CPU \u00e7ekirdekleri aras\u0131nda da\u011f\u0131tarak performans\u0131n\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Log Y\u00f6netimi:<\/strong> Uygulama loglar\u0131n\u0131 kolayca g\u00f6r\u00fcnt\u00fcleme ve y\u00f6netme imkan\u0131 sunar.<br \/>\n*   <strong>Sistem Ba\u015flang\u0131c\u0131nda Otomatik Ba\u015flatma:<\/strong> Sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda uygulamalar\u0131n\u0131z\u0131 otomatik olarak ba\u015flat\u0131r.<br \/>\n*   <strong>Bellek \u0130zleme:<\/strong> Uygulamalar\u0131n\u0131z\u0131n bellek kullan\u0131m\u0131n\u0131 izler ve e\u015fik de\u011fer a\u015f\u0131ld\u0131\u011f\u0131nda yeniden ba\u015flatabilir.<\/p>\n<h4>PM2 Kurulumu<\/h4>\n<p>PM2&#8217;yi global olarak npm ile kurun:<\/p>\n<pre><code class=\"language-bash\">npm install pm2 -g<\/code><\/pre>\n<p>Kurulumu do\u011frulay\u0131n:<\/p>\n<pre><code class=\"language-bash\">pm2 --version<\/code><\/pre>\n<h4>PM2 ile Uygulaman\u0131z\u0131 Ba\u015flatma ve Y\u00f6netme<\/h4>\n<p>Uygulaman\u0131z\u0131 PM2 ile ba\u015flatmak i\u00e7in (\u00f6rne\u011fin, <code>app.js<\/code> adl\u0131 bir ana dosyan\u0131z varsa):<\/p>\n<pre><code class=\"language-bash\">pm2 start app.js --name \"my-nodejs-app\"<\/code><\/pre>\n<p>*   <code>--name \"my-nodejs-app\"<\/code>: Uygulaman\u0131za kolayca tan\u0131nabilir bir isim verir.<\/p>\n<p>Uygulamalar\u0131n\u0131z\u0131n durumunu g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 list<\/code><\/pre>\n<p>Uygulaman\u0131z\u0131n loglar\u0131n\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 logs my-nodejs-app<\/code><\/pre>\n<p>Uygulaman\u0131z\u0131 yeniden ba\u015flatmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 restart my-nodejs-app<\/code><\/pre>\n<p>Uygulaman\u0131z\u0131 durdurmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 stop my-nodejs-app<\/code><\/pre>\n<p>Uygulaman\u0131z\u0131 PM2 listesinden kald\u0131rmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 delete my-nodejs-app<\/code><\/pre>\n<h4>PM2&#8217;yi Sistem Ba\u015flang\u0131c\u0131nda Otomatik Ba\u015flatma<\/h4>\n<p>Sunucunuz yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda PM2&#8217;nin uygulamalar\u0131n\u0131z\u0131 otomatik olarak ba\u015flatmas\u0131 i\u00e7in bir <code>systemd<\/code> servisi olu\u015fturman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">pm2 startup systemd<\/code><\/pre>\n<p>Bu komut, sisteminiz i\u00e7in uygun bir ba\u015flang\u0131\u00e7 beti\u011fi olu\u015fturacak ve size \u00e7al\u0131\u015ft\u0131rman\u0131z gereken bir komut verecektir (genellikle <code>sudo env PATH=$PATH:\/home\/uygulama_kullanicisi\/.nvm\/versions\/node\/vXX.YY.Z\/bin pm2 startup systemd -u uygulama_kullanicisi --hp \/home\/uygulama_kullanicisi<\/code>). Bu komutu kopyalay\u0131p \u00e7al\u0131\u015ft\u0131r\u0131n.<\/p>\n<p>Ard\u0131ndan, mevcut PM2 s\u00fcre\u00e7lerinizi kaydedin, b\u00f6ylece sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda PM2 bunlar\u0131 geri y\u00fckleyebilir:<\/p>\n<pre><code class=\"language-bash\">pm2 save<\/code><\/pre>\n<h3>Veritaban\u0131 Kurulumu (\u0130ste\u011fe Ba\u011fl\u0131)<\/h3>\n<p>Node.js uygulaman\u0131z\u0131n bir veritaban\u0131na ihtiyac\u0131 varsa, bu ad\u0131mda onu kurman\u0131z gerekir. Pop\u00fcler se\u00e7enekler aras\u0131nda MongoDB (NoSQL), PostgreSQL (\u0130li\u015fkisel) ve MySQL (\u0130li\u015fkisel) bulunur. Burada PostgreSQL i\u00e7in k\u0131sa bir \u00f6rnek verece\u011fiz.<\/p>\n<h4>PostgreSQL Kurulumu<\/h4>\n<pre><code class=\"language-bash\">sudo dnf install postgresql-server postgresql-contrib -y<\/code><\/pre>\n<p>Veritaban\u0131 k\u00fcmesini ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo postgresql-setup --initdb<\/code><\/pre>\n<p>PostgreSQL servisini etkinle\u015ftirin ve ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl enable --now postgresql\nsudo systemctl status postgresql<\/code><\/pre>\n<p><code>postgres<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7erek veritaban\u0131 istemcisine eri\u015febilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo -i -u postgres\npsql<\/code><\/pre>\n<p><code>\\q<\/code> yazarak <code>psql<\/code>&#8216;den \u00e7\u0131kabilir, <code>exit<\/code> yazarak <code>postgres<\/code> kullan\u0131c\u0131s\u0131ndan \u00e7\u0131kabilirsiniz. Kendi uygulaman\u0131z i\u00e7in bir veritaban\u0131 ve kullan\u0131c\u0131 olu\u015fturmay\u0131 unutmay\u0131n.<\/p>\n<h3>Nginx Ters Proxy Olarak Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Node.js uygulamalar\u0131n\u0131 do\u011frudan internete a\u00e7mak yerine, Nginx gibi bir ters proxy kullanmak en iyi uygulamad\u0131r. Nginx, a\u015fa\u011f\u0131daki avantajlar\u0131 sunar:<\/p>\n<p>*   <strong>Y\u00fck Dengeleme:<\/strong> Gelen trafi\u011fi birden fazla Node.js \u00f6rne\u011fine da\u011f\u0131tabilir.<br \/>\n*   <strong>Statik Dosya Sunumu:<\/strong> Resimler, CSS, JavaScript gibi statik dosyalar\u0131 Node.js uygulaman\u0131zdan daha verimli bir \u015fekilde sunabilir.<br \/>\n*   <strong>SSL\/TLS Sonland\u0131rma:<\/strong> SSL sertifikalar\u0131n\u0131 y\u00f6netir ve \u015fifreli trafi\u011fi Node.js uygulaman\u0131za iletmeden \u00f6nce \u015fifresini \u00e7\u00f6zebilir.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> Do\u011frudan eri\u015fimi engelleyerek uygulaman\u0131z\u0131 potansiyel sald\u0131r\u0131lardan korur.<br \/>\n*   <strong>HTTP\/2 Deste\u011fi:<\/strong> Modern web standartlar\u0131n\u0131 destekler.<\/p>\n<h4>Nginx Kurulumu<\/h4>\n<pre><code class=\"language-bash\">sudo dnf install nginx -y<\/code><\/pre>\n<p>Nginx servisini etkinle\u015ftirin ve ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl enable --now nginx\nsudo systemctl status nginx<\/code><\/pre>\n<h4>Firewall&#8217;da Nginx Portlar\u0131n\u0131 A\u00e7ma<\/h4>\n<p>HTTP (80) ve HTTPS (443) portlar\u0131n\u0131 <code>firewalld<\/code>&#8216;de a\u00e7\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo firewall-cmd --permanent --add-service=http\nsudo firewall-cmd --permanent --add-service=https\nsudo firewall-cmd --reload<\/code><\/pre>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine giderek Nginx&#8217;in varsay\u0131lan kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>Node.js Uygulamas\u0131 i\u00e7in Nginx Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Nginx&#8217;i Node.js uygulaman\u0131za gelen istekleri y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131rman\u0131z gerekir. Bunun i\u00e7in yeni bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturaca\u011f\u0131z:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/conf.d\/your_domain.com.conf<\/code><\/pre>\n<p><code>your_domain.com.conf<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 kullan\u0131n. Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki yap\u0131land\u0131rmay\u0131 ekleyin. Bu \u00f6rnekte Node.js uygulaman\u0131z\u0131n 3000 portunda \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 varsay\u0131yoruz.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen [::]:80;\n    server_name your_domain.com www.your_domain.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n    location \/ {\n        proxy_pass http:\/\/localhost:3000; # Node.js uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 port\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_cache_bypass $http_upgrade;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    # Statik dosyalar\u0131 do\u011frudan Nginx ile sunmak i\u00e7in (iste\u011fe ba\u011fl\u0131)\n    # location \/static\/ {\n    #     alias \/var\/www\/your_app\/public\/; # Statik dosyalar\u0131n\u0131z\u0131n yolu\n    #     expires 30d;\n    #     access_log off;\n    #     log_not_found off;\n    # }\n}<\/code><\/pre>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydedin ve Nginx yap\u0131land\u0131rmas\u0131n\u0131 test edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer test ba\u015far\u0131l\u0131 olursa, Nginx servisini yeniden y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl reload nginx<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, HTTP \u00fczerinden gelen t\u00fcm istekleri Node.js uygulaman\u0131za y\u00f6nlendirecektir. SSL sertifikas\u0131 kurduktan sonra bu dosyay\u0131 HTTPS&#8217;i de i\u00e7erecek \u015fekilde g\u00fcncelleyece\u011fiz.<\/p>\n<h3>SSL\/TLS \u015eifrelemesi (Let&#8217;s Encrypt ile Certbot)<\/h3>\n<p>G\u00fcvenli bir web sitesi i\u00e7in SSL\/TLS \u015fifrelemesi vazge\u00e7ilmezdir. Let&#8217;s Encrypt, \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flayan bir sertifika yetkilisidir ve Certbot arac\u0131 ile kolayca kurulabilir.<\/p>\n<h4>Certbot Kurulumu<\/h4>\n<p>Rocky Linux 9&#8217;da Certbot&#8217;u Nginx eklentisi ile kurmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo dnf install certbot python3-certbot-nginx -y<\/code><\/pre>\n<h4>Sertifika Alma<\/h4>\n<p>Certbot&#8217;u Nginx eklentisi ile \u00e7al\u0131\u015ft\u0131rarak sertifika al\u0131n. Certbot, Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak alg\u0131layacak ve g\u00fcncelleyecektir:<\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d your_domain.com -d www.your_domain.com<\/code><\/pre>\n<p><code>your_domain.com<\/code> ve <code>www.your_domain.com<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 yaz\u0131n. Certbot sizden e-posta adresinizi isteyecek ve hizmet \u015fartlar\u0131n\u0131 kabul etmenizi isteyecektir. Ayr\u0131ca, HTTP trafi\u011fini otomatik olarak HTTPS&#8217;e y\u00f6nlendirip y\u00f6nlendirmeyece\u011finizi soracakt\u0131r. Genellikle &#8220;2: Redirect&#8221; se\u00e7ene\u011fini se\u00e7mek iyi bir uygulamad\u0131r.<\/p>\n<p>Ba\u015far\u0131l\u0131 bir kurulumdan sonra, Nginx yap\u0131land\u0131rma dosyan\u0131z (<code>\/etc\/nginx\/conf.d\/your_domain.com.conf<\/code>) otomatik olarak g\u00fcncellenecek ve SSL sertifikas\u0131 bilgileri eklenecektir.<\/p>\n<h4>Otomatik Yenileme Testi<\/h4>\n<p>Let&#8217;s Encrypt sertifikalar\u0131 90 g\u00fcn ge\u00e7erlidir. Certbot, sertifikalar\u0131 otomatik olarak yenilemek i\u00e7in bir <code>cron<\/code> i\u015fi veya <code>systemd<\/code> zamanlay\u0131c\u0131s\u0131 kurar. Otomatik yenilemenin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run<\/code><\/pre>\n<p>Bu komut, yenileme s\u00fcrecini sim\u00fcle eder ve herhangi bir sorun olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n<h3>Node.js Uygulamas\u0131n\u0131n Da\u011f\u0131t\u0131m\u0131<\/h3>\n<p>Art\u0131k sunucunuz Node.js uygulamalar\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in haz\u0131r oldu\u011funa g\u00f6re, uygulaman\u0131z\u0131 da\u011f\u0131tabilirsiniz.<\/p>\n<h4>Uygulama Dosyalar\u0131n\u0131 Sunucuya Aktarma<\/h4>\n<p>Uygulama dosyalar\u0131n\u0131z\u0131 sunucuya aktarman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<p>*   <strong>Git Kullanarak:<\/strong> E\u011fer uygulaman\u0131z bir Git deposundaysa (\u00f6rn. GitHub, GitLab, Bitbucket), do\u011frudan sunucudan klonlayabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/ # Uygulamalar\u0131n\u0131z\u0131 bu dizine yerle\u015ftirmek iyi bir uygulamad\u0131r\n    sudo mkdir your_app_name\n    sudo chown -R uygulama_kullanicisi:uygulama_kullanicisi your_app_name\n    cd your_app_name\n    git clone https:\/\/github.com\/your-username\/your-repo.git . # . ile mevcut dizine klonlay\u0131n<\/code><\/pre>\n<p>    E\u011fer Git kullanm\u0131yorsan\u0131z, <code>scp<\/code> veya <code>rsync<\/code> gibi ara\u00e7larla dosyalar\u0131 yerel makinenizden sunucuya kopyalayabilirsiniz.<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizden:\n    scp -r \/path\/to\/your\/local\/app\/* uygulama_kullanicisi@your_server_ip:\/var\/www\/your_app_name\/<\/code><\/pre>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00fckleme<\/h4>\n<p>Uygulama dizininize gidin ve gerekli npm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">cd \/var\/www\/your_app_name\nnpm install --production<\/code><\/pre>\n<p><code>--production<\/code> bayra\u011f\u0131, yaln\u0131zca <code>dependencies<\/code> b\u00f6l\u00fcm\u00fcnde listelenen paketleri kurar ve <code>devDependencies<\/code> paketlerini atlar, bu da \u00fcretim ortam\u0131nda daha az yer kaplamas\u0131n\u0131 ve daha h\u0131zl\u0131 kurulumu sa\u011flar.<\/p>\n<h4>Ortam De\u011fi\u015fkenlerini Yap\u0131land\u0131rma<\/h4>\n<p>Uygulaman\u0131z\u0131n \u00fcretim ortam\u0131na \u00f6zel yap\u0131land\u0131rma de\u011fi\u015fkenlerine (\u00f6rne\u011fin, veritaban\u0131 ba\u011flant\u0131 dizeleri, API anahtarlar\u0131) ihtiyac\u0131 olabilir. Bunlar\u0131 y\u00f6netmek i\u00e7in genellikle <code>.env<\/code> dosyalar\u0131 veya sistem ortam de\u011fi\u015fkenleri kullan\u0131l\u0131r.<\/p>\n<p><code>.env<\/code> dosyas\u0131 kullan\u0131yorsan\u0131z, <code>your_app_name<\/code> dizininizde bir <code>.env<\/code> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">nano .env<\/code><\/pre>\n<pre><code class=\"language-\">PORT=3000\nNODE_ENV=production\nDATABASE_URL=postgres:\/\/user:password@host:port\/database\nAPI_KEY=your_api_key_here<\/code><\/pre>\n<p><strong>\u00d6NEML\u0130:<\/strong> <code>.env<\/code> dosyas\u0131n\u0131 <code>git<\/code> deposuna eklemeyin. <code>.gitignore<\/code> dosyan\u0131za <code>.env<\/code> ekledi\u011finizden emin olun.<\/p>\n<h4>PM2 ile Uygulamay\u0131 Ba\u015flatma<\/h4>\n<p>Uygulaman\u0131z\u0131n ana giri\u015f noktas\u0131n\u0131 (\u00f6rne\u011fin <code>index.js<\/code> veya <code>app.js<\/code>) kullanarak PM2 ile ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">pm2 start index.js --name \"my-nodejs-app\"<\/code><\/pre>\n<p>E\u011fer PM2&#8217;nin k\u00fcme modunda (birden fazla CPU \u00e7ekirde\u011fini kullanmak i\u00e7in) uygulaman\u0131z\u0131 ba\u015flatmas\u0131n\u0131 istiyorsan\u0131z:<\/p>\n<pre><code class=\"language-bash\">pm2 start index.js -i max --name \"my-nodejs-app\"<\/code><\/pre>\n<p><code>-i max<\/code> arg\u00fcman\u0131, PM2&#8217;nin sunucunuzdaki mevcut CPU \u00e7ekirde\u011fi say\u0131s\u0131 kadar uygulaman\u0131z\u0131n bir \u00f6rne\u011fini ba\u015flatmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve PM2 taraf\u0131ndan y\u00f6netildi\u011finden emin olun:<\/p>\n<pre><code class=\"language-bash\">pm2 list\npm2 logs<\/code><\/pre>\n<p>Son olarak, PM2&#8217;nin bu yeni uygulamay\u0131 da sistem ba\u015flang\u0131c\u0131nda ba\u015flatmas\u0131 i\u00e7in yap\u0131land\u0131rmay\u0131 kaydedin:<\/p>\n<pre><code class=\"language-bash\">pm2 save<\/code><\/pre>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>\u00dcretim ortam\u0131ndaki uygulaman\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamak s\u00fcrekli bir s\u00fcre\u00e7tir. \u0130\u015fte baz\u0131 ek ipu\u00e7lar\u0131:<\/p>\n<p>*   <strong>Sistemi G\u00fcncel Tutun:<\/strong> \u0130\u015fletim sisteminizi, Node.js&#8217;i, npm paketlerinizi ve di\u011fer t\u00fcm yaz\u0131l\u0131mlar\u0131 d\u00fczenli olarak g\u00fcncelleyin.<\/p>\n<pre><code class=\"language-bash\">sudo dnf update -y\n    nvm install --lts --reinstall-packages-from=$(nvm current) # Node.js'i g\u00fcnceller<\/code><\/pre>\n<p>*   <strong>Minimum Yetki Prensibi:<\/strong> Uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>root<\/code> kullan\u0131c\u0131s\u0131 yerine <code>sudo<\/code> yetkisi olmayan ayr\u0131 bir kullan\u0131c\u0131 kullan\u0131n. Uygulama dosyalar\u0131n\u0131n ve dizinlerinin do\u011fru izinlere sahip oldu\u011fundan emin olun.<br \/>\n*   <strong>Loglar\u0131 \u0130zleyin:<\/strong> Uygulama loglar\u0131n\u0131, Nginx loglar\u0131n\u0131 ve sistem loglar\u0131n\u0131 d\u00fczenli olarak kontrol edin. PM2&#8217;nin log y\u00f6netimi \u00f6zellikleri bu konuda size yard\u0131mc\u0131 olacakt\u0131r.<br \/>\n*   <strong>Yedeklemeler:<\/strong> Veritaban\u0131n\u0131z\u0131 ve uygulama dosyalar\u0131n\u0131z\u0131 d\u00fczenli olarak yedekleyin.<br \/>\n*   <strong>SSH Anahtar Tabanl\u0131 Kimlik Do\u011frulama:<\/strong> Parola yerine her zaman SSH anahtar tabanl\u0131 kimlik do\u011frulamay\u0131 kullan\u0131n ve SSH portunu de\u011fi\u015ftirin.<br \/>\n*   <strong>G\u00fc\u00e7l\u00fc Parolalar:<\/strong> Veritaban\u0131 ve di\u011fer servisler i\u00e7in g\u00fc\u00e7l\u00fc, karma\u015f\u0131k parolalar kullan\u0131n.<br \/>\n*   <strong>Ortam De\u011fi\u015fkenlerini G\u00fcvenli Y\u00f6netin:<\/strong> Hassas bilgileri (API anahtarlar\u0131, veritaban\u0131 kimlik bilgileri) do\u011frudan kodunuza yazmak yerine ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netin. <code>.env<\/code> dosyalar\u0131n\u0131 <code>.gitignore<\/code> ile Git&#8217;ten hari\u00e7 tutun.<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131:<\/strong> <code>firewalld<\/code>&#8216;yi yaln\u0131zca gerekli portlar\u0131 a\u00e7acak \u015fekilde yap\u0131land\u0131r\u0131n.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k G\u00fcvenli\u011fi:<\/strong> <code>npm audit<\/code> komutunu kullanarak uygulama ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131zdaki bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 d\u00fczenli olarak kontrol edin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 makalede, Node.js uygulaman\u0131z\u0131 Rocky Linux 9 \u00fczerinde \u00fcretim ortam\u0131na kurmak i\u00e7in gereken t\u00fcm temel ad\u0131mlar\u0131 ve en iyi uygulamalar\u0131 ele ald\u0131k. Sunucu haz\u0131rl\u0131\u011f\u0131ndan Node.js ve PM2 kurulumuna, Nginx ters proxy yap\u0131land\u0131rmas\u0131ndan SSL\/TLS \u015fifrelemesine ve uygulama da\u011f\u0131t\u0131m\u0131na kadar her a\u015famay\u0131 detayl\u0131 bir \u015fekilde inceledik. Bu rehberi takip ederek, Node.js uygulaman\u0131z\u0131 g\u00fcvenli, kararl\u0131 ve y\u00fcksek performansl\u0131 bir \u015fekilde yay\u0131na alabilir ve kullan\u0131c\u0131lar\u0131n\u0131za kesintisiz bir deneyim sunabilirsiniz. Unutmay\u0131n ki \u00fcretim ortam\u0131 y\u00f6netimi s\u00fcrekli bir \u00f6\u011frenme ve iyile\u015ftirme s\u00fcrecidir. Uygulaman\u0131z\u0131n ve sunucunuzun g\u00fcvenli\u011fini ve performans\u0131n\u0131 d\u00fczenli olarak izlemeye ve g\u00fcncellemeye devam edin. Ba\u015far\u0131lar dileriz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu\nGiri\u015f\nModern web uygulamalar\u0131 d\u00fcnyas\u0131nda Node.js, h\u0131zl\u0131, \u00f6l\u00e7eklene","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[241],"tags":[],"class_list":{"0":"post-33664","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu\" \/>\n<meta property=\"og:description\" content=\"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu Giri\u015f Modern web uygulamalar\u0131 d\u00fcnyas\u0131nda Node.js, h\u0131zl\u0131, \u00f6l\u00e7eklene\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-05T13:40:44+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu\",\"datePublished\":\"2025-11-05T13:40:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\"},\"wordCount\":2708,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\",\"name\":\"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-05T13:40:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu","og_description":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu Giri\u015f Modern web uygulamalar\u0131 d\u00fcnyas\u0131nda Node.js, h\u0131zl\u0131, \u00f6l\u00e7eklene","og_url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-05T13:40:44+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu","datePublished":"2025-11-05T13:40:44+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/"},"wordCount":2708,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/","name":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-05T13:40:44+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamasini-rocky-linux-9-uzerinde-uretim-ortamina-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js Uygulamas\u0131n\u0131 Rocky Linux 9 \u00dczerinde \u00dcretim Ortam\u0131na Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33664"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33664\/revisions"}],"predecessor-version":[{"id":33665,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33664\/revisions\/33665"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}