{"id":36022,"date":"2025-12-06T22:40:47","date_gmt":"2025-12-06T19:40:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36022"},"modified":"2025-12-06T22:40:47","modified_gmt":"2025-12-06T19:40:47","slug":"node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/","title":{"rendered":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi<\/h2>\n<p>Bu kapsaml\u0131 teknik makalede, Node.js tabanl\u0131 bir uygulaman\u0131n bir Sanal \u00d6zel Sunucu (VPS) \u00fczerinde \u00e7al\u0131\u015fan bir MongoDB veritaban\u0131na nas\u0131l ba\u011flanaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Modern web uygulamalar\u0131n\u0131n geli\u015ftirilmesinde s\u0131kl\u0131kla tercih edilen bu g\u00fc\u00e7l\u00fc ikilinin kurulumu, yap\u0131land\u0131r\u0131lmas\u0131 ve g\u00fcvenli bir \u015fekilde birbirine ba\u011flanmas\u0131 s\u00fcre\u00e7lerini detayland\u0131raca\u011f\u0131z. Amac\u0131m\u0131z, hem yeni ba\u015flayanlar hem de deneyimli geli\u015ftiriciler i\u00e7in anla\u015f\u0131l\u0131r ve pratik bir rehber sunmakt\u0131r.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dinamik ve \u00f6l\u00e7eklenebilir web uygulamalar\u0131 d\u00fcnyas\u0131nda, Node.js ve MongoDB kombinasyonu, h\u0131zl\u0131 geli\u015ftirme s\u00fcre\u00e7leri ve y\u00fcksek performans sa\u011flayan pop\u00fcler bir teknoloji y\u0131\u011f\u0131n\u0131 haline gelmi\u015ftir. Node.js, sunucu taraf\u0131 JavaScript \u00e7al\u0131\u015fma ortam\u0131 olarak, ger\u00e7ek zamanl\u0131 uygulamalar ve API&#8217;ler olu\u015fturmak i\u00e7in idealdir. MongoDB ise, esnek, belge tabanl\u0131 (NoSQL) yap\u0131s\u0131yla veri depolama konusunda geli\u015ftiricilere b\u00fcy\u00fck kolayl\u0131klar sunar. Bu ikilinin bir Sanal \u00d6zel Sunucu (VPS) \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131, geli\u015ftiricilere kendi sunucu ortamlar\u0131 \u00fczerinde tam kontrol sa\u011flarken, ayn\u0131 zamanda maliyet etkin ve \u00f6l\u00e7eklenebilir bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p>Bir VPS, payla\u015f\u0131ml\u0131 bar\u0131nd\u0131rma hizmetlerinin k\u0131s\u0131tlamalar\u0131ndan kurtulup, fiziksel bir sunucunun sanalla\u015ft\u0131r\u0131lm\u0131\u015f bir b\u00f6l\u00fcm\u00fcnde kendi i\u015fletim sisteminizi ve yaz\u0131l\u0131mlar\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rma \u00f6zg\u00fcrl\u00fc\u011f\u00fc verir. Bu, uygulaman\u0131z\u0131n performans\u0131n\u0131 optimize etme, \u00f6zel g\u00fcvenlik \u00f6nlemleri uygulama ve kaynaklar\u0131 diledi\u011finiz gibi yap\u0131land\u0131rma imkan\u0131 tan\u0131r.<\/p>\n<p>Bu makale, bir VPS \u00fczerinde temel bir Ubuntu\/Debian i\u015fletim sistemi kurulumundan ba\u015flayarak, MongoDB ve Node.js ortamlar\u0131n\u0131n haz\u0131rlanmas\u0131na, g\u00fcvenlik ayarlar\u0131n\u0131n yap\u0131lmas\u0131na ve son olarak Node.js uygulaman\u0131z\u0131n MongoDB veritaban\u0131na g\u00fcvenli bir \u015fekilde ba\u011flanmas\u0131na kadar t\u00fcm s\u00fcreci kapsayacakt\u0131r. Ayr\u0131ca, uygulaman\u0131z\u0131 s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda tutmak i\u00e7in pratik da\u011f\u0131t\u0131m y\u00f6ntemlerini ve g\u00fcvenlik en iyi uygulamalar\u0131n\u0131 da ele alaca\u011f\u0131z.<\/p>\n<h3>\u00d6n Ko\u015fullar ve Gerekli Ara\u00e7lar<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce, a\u015fa\u011f\u0131daki \u00f6n ko\u015fullara ve ara\u00e7lara sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>Bir VPS Hesab\u0131:<\/strong> DigitalOcean, Linode, Vultr, AWS EC2, Google Cloud Compute Engine veya benzeri bir sa\u011flay\u0131c\u0131dan al\u0131nm\u0131\u015f, Ubuntu (tercihen 20.04 LTS veya daha yeni) veya Debian tabanl\u0131 bir VPS.<br \/>\n*   <strong>SSH \u0130stemcisi:<\/strong> Sunucunuza ba\u011flanmak i\u00e7in bir SSH istemcisi. Linux\/macOS kullan\u0131c\u0131lar\u0131 i\u00e7in terminal (OpenSSH), Windows kullan\u0131c\u0131lar\u0131 i\u00e7in PuTTY veya WSL (Windows Subsystem for Linux) yeterli olacakt\u0131r.<br \/>\n*   <strong>Temel Linux Komut Bilgisi:<\/strong> <code>sudo<\/code>, <code>apt<\/code>, <code>cd<\/code>, <code>ls<\/code>, <code>nano<\/code> veya <code>vi<\/code> gibi temel komutlara a\u015fina olmak.<br \/>\n*   <strong>Node.js ve npm (Yerel Makinenizde):<\/strong> Uygulaman\u0131z\u0131 yerel olarak geli\u015ftirmek ve test etmek i\u00e7in Node.js ve npm&#8217;in kurulu olmas\u0131.<br \/>\n*   <strong>Temel Node.js ve MongoDB Bilgisi:<\/strong> Node.js ve MongoDB&#8217;nin temel kavramlar\u0131na ve \u00e7al\u0131\u015fma prensiplerine genel bir a\u015final\u0131k.<\/p>\n<h3>VPS Kurulumu ve Temel Ayarlar<\/h3>\n<p>VPS&#8217;inizi ilk kez kurarken yapman\u0131z gereken baz\u0131 temel ayarlar vard\u0131r. Bu ad\u0131mlar, sunucunuzun g\u00fcvenli\u011fini art\u0131racak ve daha sonraki kurulumlar\u0131 kolayla\u015ft\u0131racakt\u0131r.<\/p>\n<h4>SSH ile Ba\u011flanma ve Kullan\u0131c\u0131 Olu\u015fturma<\/h4>\n<p>VPS sa\u011flay\u0131c\u0131n\u0131zdan ald\u0131\u011f\u0131n\u0131z IP adresi ve root kullan\u0131c\u0131 bilgileriyle sunucunuza SSH \u00fczerinden ba\u011flan\u0131n:<\/p>\n<pre><code class=\"language-bash\">ssh root@your_vps_ip_address<\/code><\/pre>\n<p>\u0130lk ba\u011flant\u0131dan sonra, root kullan\u0131c\u0131s\u0131 yerine daha g\u00fcvenli bir y\u00f6ntem olan yeni bir kullan\u0131c\u0131 olu\u015fturup sudo yetkileri vermek \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">adduser your_username\nusermod -aG sudo your_username<\/code><\/pre>\n<p>\u015eimdi root oturumundan \u00e7\u0131k\u0131\u015f yap\u0131p yeni kullan\u0131c\u0131n\u0131zla tekrar ba\u011flanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">exit\nssh your_username@your_vps_ip_address<\/code><\/pre>\n<h4>SSH Anahtar Tabanl\u0131 Kimlik Do\u011frulama (\u00d6nerilir)<\/h4>\n<p>Parola ile giri\u015f yapmak yerine SSH anahtarlar\u0131 kullanarak daha g\u00fcvenli bir ba\u011flant\u0131 sa\u011flayabilirsiniz.<\/p>\n<p>1.  <strong>Yerel Makinenizde SSH Anahtar\u0131 Olu\u015fturma (E\u011fer Yoksa):<\/strong><\/p>\n<pre><code class=\"language-bash\">ssh-keygen -t rsa -b 4096<\/code><\/pre>\n<p>    Varsay\u0131lan konumlar\u0131 ve bo\u015f parolay\u0131 kabul edebilirsiniz.<br \/>\n2.  <strong>Genel Anahtar\u0131 VPS&#8217;e Kopyalama:<\/strong><\/p>\n<pre><code class=\"language-bash\">ssh-copy-id your_username@your_vps_ip_address<\/code><\/pre>\n<p>    Bu komut, yerel makinenizdeki genel anahtar\u0131 (<code>~\/.ssh\/id_rsa.pub<\/code>) VPS&#8217;teki <code>.ssh\/authorized_keys<\/code> dosyas\u0131na kopyalar.<br \/>\n3.  <strong>Parola Kimlik Do\u011frulamas\u0131n\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir):<\/strong><br \/>\n    VPS&#8217;nizde <code>\/etc\/ssh\/sshd_config<\/code> dosyas\u0131n\u0131 d\u00fczenleyerek <code>PasswordAuthentication no<\/code> olarak ayarlay\u0131n ve SSH servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/ssh\/sshd_config\n    # 'PasswordAuthentication yes' sat\u0131r\u0131n\u0131 bulup 'no' yap\u0131n\n    # 'PermitRootLogin yes' sat\u0131r\u0131n\u0131 bulup 'no' yap\u0131n (root ile do\u011frudan giri\u015f yapmay\u0131 engeller)\n    sudo systemctl restart sshd<\/code><\/pre>\n<h4>Sistem G\u00fcncelleme ve G\u00fcvenlik Duvar\u0131 (UFW)<\/h4>\n<p>Sunucunuzu g\u00fcncel tutmak ve temel bir g\u00fcvenlik duvar\u0131 yap\u0131land\u0131rmak kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-bash\">sudo apt update && sudo apt upgrade -y<\/code><\/pre>\n<p><strong>UFW (Uncomplicated Firewall) Kurulumu ve Ayarlar\u0131:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt install ufw -y\nsudo ufw allow OpenSSH # SSH ba\u011flant\u0131lar\u0131na izin ver\nsudo ufw allow 'Nginx HTTP' # E\u011fer Nginx kullanacaksan\u0131z HTTP trafi\u011fine izin ver\nsudo ufw allow 'Nginx HTTPS' # E\u011fer Nginx kullanacaksan\u0131z HTTPS trafi\u011fine izin ver\n<h2>E\u011fer Node.js uygulaman\u0131z do\u011frudan 80\/443 d\u0131\u015f\u0131nda bir portta \u00e7al\u0131\u015facaksa:<\/h2>\n<h2>sudo ufw allow 3000\/tcp # \u00d6rnek olarak 3000 portuna izin ver<\/h2>\nsudo ufw enable # G\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftir\nsudo ufw status # G\u00fcvenlik duvar\u0131 durumunu kontrol et<\/code><\/pre>\n<h3>MongoDB Kurulumu ve G\u00fcvenli\u011fi<\/h3>\n<p>Node.js uygulaman\u0131z\u0131n verilerini depolayaca\u011f\u0131 MongoDB veritaban\u0131n\u0131 VPS&#8217;inize kuraca\u011f\u0131z.<\/p>\n<h4>MongoDB Kurulumu<\/h4>\n<p>Ubuntu\/Debian sistemler i\u00e7in MongoDB&#8217;nin resmi deposunu kullanarak kurulum yapmak en iyi y\u00f6ntemdir.<\/p>\n<p>1.  <strong>MongoDB GPG Anahtar\u0131n\u0131 \u0130\u00e7e Aktarma:<\/strong><\/p>\n<pre><code class=\"language-bash\">wget -qO - https:\/\/www.mongodb.org\/static\/pgp\/server-6.0.asc | sudo apt-key add -<\/code><\/pre>\n<p>    <em>Not: <code>apt-key<\/code> kullan\u0131mdan kald\u0131r\u0131l\u0131yor. Daha modern bir yakla\u015f\u0131m i\u00e7in:<\/em><\/p>\n<pre><code class=\"language-bash\">wget -qO - https:\/\/www.mongodb.org\/static\/pgp\/server-6.0.asc | gpg --dearmor | sudo tee \/etc\/apt\/trusted.gpg.d\/mongodb-6.0.gpg > \/dev\/null<\/code><\/pre>\n<p>2.  <strong>MongoDB Deposunu Ekleme:<\/strong><br \/>\n    Ubuntu 20.04 (Focal) i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">echo \"deb [ arch=amd64,arm64 ] https:\/\/repo.mongodb.org\/apt\/ubuntu focal\/mongodb-org\/6.0 multiverse\" | sudo tee \/etc\/apt\/sources.list.d\/mongodb-org-6.0.list<\/code><\/pre>\n<p>    Di\u011fer Ubuntu\/Debian versiyonlar\u0131 i\u00e7in uygun kod ad\u0131n\u0131 kullanmal\u0131s\u0131n\u0131z (\u00f6rn. <code>jammy<\/code> for Ubuntu 22.04, <code>buster<\/code> for Debian 10, <code>bullseye<\/code> for Debian 11).<br \/>\n3.  <strong>Paket Listesini G\u00fcncelleme ve MongoDB Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install -y mongodb-org<\/code><\/pre>\n<p>4.  <strong>MongoDB Servisini Ba\u015flatma ve Etkinle\u015ftirme:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo systemctl start mongod\n    sudo systemctl enable mongod\n    sudo systemctl status mongod # Servisin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edin<\/code><\/pre>\n<h4>MongoDB G\u00fcvenlik Ayarlar\u0131<\/h4>\n<p>MongoDB&#8217;yi varsay\u0131lan ayarlarla b\u0131rakmak ciddi g\u00fcvenlik riskleri ta\u015f\u0131r. Mutlaka a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 uygulay\u0131n.<\/p>\n<h5>Kimlik Do\u011frulama (Authentication)<\/h5>\n<p>MongoDB&#8217;de kullan\u0131c\u0131 tabanl\u0131 kimlik do\u011frulamas\u0131n\u0131 etkinle\u015ftirmek \u00e7ok \u00f6nemlidir.<\/p>\n<p>1.  <strong><code>mongod.conf<\/code> Dosyas\u0131n\u0131 D\u00fczenleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/mongod.conf<\/code><\/pre>\n<p>    <code>security:<\/code> b\u00f6l\u00fcm\u00fcn\u00fc bulun veya ekleyin ve <code>authorization: enabled<\/code> sat\u0131r\u0131n\u0131 ekleyin:<\/p>\n<pre><code class=\"language-yaml\"># \/etc\/mongod.conf\n    # ...\n    security:\n      authorization: enabled\n    # ...<\/code><\/pre>\n<p>    Ayr\u0131ca, <code>net:<\/code> b\u00f6l\u00fcm\u00fcnde <code>bindIp<\/code> ayar\u0131n\u0131 kontrol edin. E\u011fer Node.js uygulaman\u0131z MongoDB ile ayn\u0131 sunucuda \u00e7al\u0131\u015facaksa, sadece yerel eri\u015fime izin vermek en g\u00fcvenlisidir:<\/p>\n<pre><code class=\"language-yaml\"># \/etc\/mongod.conf\n    # ...\n    net:\n      port: 27017\n      bindIp: 127.0.0.1 # Sadece yerel ba\u011flant\u0131lara izin verir\n    # ...<\/code><\/pre>\n<p>    E\u011fer Node.js uygulaman\u0131z farkl\u0131 bir sunucuda olacaksa, o sunucunun IP adresini de <code>bindIp<\/code> listesine eklemeniz gerekir (\u00f6rne\u011fin, <code>bindIp: 127.0.0.1,your_node_js_server_ip<\/code>). Ancak bu senaryoda g\u00fcvenlik duvar\u0131 ayarlar\u0131n\u0131 \u00e7ok dikkatli yapman\u0131z gerekecektir. Ayn\u0131 VPS \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z <code>127.0.0.1<\/code> en g\u00fcvenli se\u00e7enektir.<\/p>\n<p>2.  <strong>MongoDB Servisini Yeniden Ba\u015flatma:<\/strong><br \/>\n    Ayarlar\u0131 uygulamak i\u00e7in servisi yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart mongod<\/code><\/pre>\n<p>3.  <strong>Y\u00f6netici Kullan\u0131c\u0131s\u0131 Olu\u015fturma:<\/strong><br \/>\n    Art\u0131k kimlik do\u011frulama etkin oldu\u011fu i\u00e7in, MongoDB kabu\u011funa ba\u011flan\u0131p bir y\u00f6netici kullan\u0131c\u0131s\u0131 olu\u015fturmal\u0131y\u0131z. Bu i\u015flemi kimlik do\u011frulama etkinle\u015ftirildikten hemen sonra yapmal\u0131s\u0131n\u0131z, aksi takdirde ba\u011flanamazs\u0131n\u0131z.<\/p>\n<pre><code class=\"language-bash\">mongo<\/code><\/pre>\n<p>    MongoDB kabu\u011funa girdikten sonra:<\/p>\n<pre><code class=\"language-javascript\">use admin\n    db.createUser(\n       {\n         user: \"mongoAdmin\",\n         pwd: \"your_strong_admin_password\",\n         roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" }, \"readWriteAnyDatabase\" ]\n       }\n    )\n    exit<\/code><\/pre>\n<p>    Art\u0131k <code>mongo<\/code> kabu\u011funa ba\u011flanmak i\u00e7in kullan\u0131c\u0131 ad\u0131 ve parola belirtmeniz gerekecek:<\/p>\n<pre><code class=\"language-bash\">mongo -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<p>    Parolan\u0131z\u0131 istendi\u011finde girin.<\/p>\n<p>4.  <strong>Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015fturma:<\/strong><br \/>\n    Uygulaman\u0131z\u0131n do\u011frudan y\u00f6netici kullan\u0131c\u0131s\u0131n\u0131 kullanmas\u0131 yerine, sadece belirli veritabanlar\u0131na eri\u015fim yetkisi olan ayr\u0131 bir kullan\u0131c\u0131 olu\u015fturmak daha g\u00fcvenlidir.<br \/>\n    Y\u00f6netici kullan\u0131c\u0131n\u0131zla MongoDB kabu\u011funa ba\u011flan\u0131n ve uygulaman\u0131z i\u00e7in bir veritaban\u0131 olu\u015fturun (\u00f6rne\u011fin <code>my_app_db<\/code>):<\/p>\n<pre><code class=\"language-bash\">mongo -u mongoAdmin -p --authenticationDatabase admin<\/code><\/pre>\n<pre><code class=\"language-javascript\">use my_app_db\n    db.createUser(\n       {\n         user: \"appUser\",\n         pwd: \"your_strong_app_password\",\n         roles: [ { role: \"readWrite\", db: \"my_app_db\" } ]\n       }\n    )\n    exit<\/code><\/pre>\n<p>    Bu kullan\u0131c\u0131 sadece <code>my_app_db<\/code> veritaban\u0131nda okuma\/yazma yetkisine sahip olacakt\u0131r.<\/p>\n<h5>G\u00fcvenlik Duvar\u0131 (UFW) Ayarlar\u0131<\/h5>\n<p>MongoDB&#8217;nin varsay\u0131lan portu 27017&#8217;dir. Bu porta sadece Node.js uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucudan eri\u015fime izin vermelisiniz. E\u011fer Node.js ve MongoDB ayn\u0131 VPS&#8217;te ise, sadece yerel ba\u011flant\u0131lara izin vermek en g\u00fcvenlisidir. <code>bindIp: 127.0.0.1<\/code> ayar\u0131n\u0131 yapt\u0131ysan\u0131z, UFW&#8217;de ayr\u0131ca bir kural eklemenize gerek kalmaz, \u00e7\u00fcnk\u00fc d\u0131\u015far\u0131dan hi\u00e7bir ba\u011flant\u0131ya izin verilmeyecektir.<\/p>\n<p>E\u011fer farkl\u0131 bir sunucudan eri\u015fime izin vermeniz gerekirse (ki bu daha karma\u015f\u0131k ve risklidir):<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow from your_node_js_server_ip to any port 27017<\/code><\/pre>\n<p><strong>Ancak, bu rehberde Node.js ve MongoDB&#8217;nin ayn\u0131 VPS \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 varsay\u0131lm\u0131\u015ft\u0131r, bu nedenle <code>bindIp: 127.0.0.1<\/code> ayar\u0131 ile d\u0131\u015far\u0131dan eri\u015fimi engellemek en iyi yakla\u015f\u0131md\u0131r.<\/strong><\/p>\n<h3>Node.js Ortam\u0131n\u0131n Kurulumu<\/h3>\n<p>\u015eimdi Node.js uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131racak ortam\u0131 VPS \u00fczerinde kuraca\u011f\u0131z.<\/p>\n<h4>Node.js ve npm Kurulumu<\/h4>\n<p><code>nvm<\/code> (Node Version Manager) kullanarak Node.js kurmak, farkl\u0131 Node.js versiyonlar\u0131 aras\u0131nda kolayca ge\u00e7i\u015f yapman\u0131z\u0131 sa\u011flad\u0131\u011f\u0131 i\u00e7in \u00f6nerilir.<\/p>\n<p>1.  <strong><code>nvm<\/code> Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.1\/install.sh | bash<\/code><\/pre>\n<p>    Kurulumdan sonra terminali kapat\u0131p yeniden a\u00e7man\u0131z veya a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z gerekebilir:<\/p>\n<pre><code class=\"language-bash\">source ~\/.bashrc # veya ~\/.zshrc e\u011fer zsh kullan\u0131yorsan\u0131z<\/code><\/pre>\n<p>2.  <strong>Node.js Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">nvm install node # En son LTS (Uzun S\u00fcreli Destek) versiyonunu kurar\n    nvm use node # Kurulan versiyonu kullan\u0131ma al\u0131r\n    nvm alias default node # Her yeni oturumda bu versiyonu varsay\u0131lan yapar<\/code><\/pre>\n<p>3.  <strong>Versiyonlar\u0131 Kontrol Etme:<\/strong><\/p>\n<pre><code class=\"language-bash\">node -v\n    npm -v<\/code><\/pre>\n<h4>Basit Bir Node.js Uygulamas\u0131 Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z\u0131 yerel makinenizde geli\u015ftirip daha sonra VPS&#8217;e aktarman\u0131z en yayg\u0131n yakla\u015f\u0131md\u0131r. \u0130\u015fte basit bir \u00f6rnek uygulama yap\u0131s\u0131:<\/p>\n<p>1.  <strong>Uygulama Dizini Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">mkdir my-node-app\n    cd my-node-app<\/code><\/pre>\n<p>2.  <strong><code>package.json<\/code> Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<p>3.  <strong><code>app.js<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ app.js\n    const express = require('express');\n    const mongoose = require('mongoose');\n    const dotenv = require('dotenv');\n\n    dotenv.config(); \/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n\n    const app = express();\n    const port = process.env.PORT || 3000;\n\n    \/\/ MongoDB ba\u011flant\u0131s\u0131\n    const mongoUri = process.env.MONGO_URI;\n\n    mongoose.connect(mongoUri, {\n      useNewUrlParser: true,\n      useUnifiedTopology: true,\n      \/\/ useCreateIndex: true, \/\/ Mongoose 6+ ile genellikle gerekmez\n      \/\/ useFindAndModify: false \/\/ Mongoose 6+ ile genellikle gerekmez\n    })\n    .then(() => console.log('MongoDB ba\u011flant\u0131s\u0131 ba\u015far\u0131l\u0131.'))\n    .catch(err => console.error('MongoDB ba\u011flant\u0131 hatas\u0131:', err));\n\n    \/\/ Basit bir Schema ve Model (\u00f6rnek i\u00e7in)\n    const itemSchema = new mongoose.Schema({\n      name: String,\n      description: String\n    });\n    const Item = mongoose.model('Item', itemSchema);\n\n    app.use(express.json()); \/\/ JSON istek g\u00f6vdelerini ayr\u0131\u015ft\u0131rmak i\u00e7in\n\n    app.get('\/', (req, res) => {\n      res.send('Node.js uygulamas\u0131 \u00e7al\u0131\u015f\u0131yor ve MongoDB\\'ye ba\u011flanmaya \u00e7al\u0131\u015f\u0131yor!');\n    });\n\n    \/\/ Yeni bir \u00f6\u011fe ekleme\n    app.post('\/items', async (req, res) => {\n      try {\n        const newItem = new Item(req.body);\n        await newItem.save();\n        res.status(201).json(newItem);\n      } catch (error) {\n        res.status(400).json({ message: error.message });\n      }\n    });\n\n    \/\/ T\u00fcm \u00f6\u011feleri listeleme\n    app.get('\/items', async (req, res) => {\n      try {\n        const items = await Item.find();\n        res.json(items);\n      } catch (error) {\n        res.status(500).json({ message: error.message });\n      }\n    });\n\n    app.listen(port, () => {\n      console.log(<code>Sunucu http:\/\/localhost:${port} adresinde \u00e7al\u0131\u015f\u0131yor.<\/code>);\n    });<\/code><\/pre>\n<p>4.  <strong>Gerekli Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00fckleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm install express mongoose dotenv<\/code><\/pre>\n<p>5.  <strong><code>.env<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    Bu dosya hassas bilgileri saklamak i\u00e7in kullan\u0131l\u0131r ve Git gibi versiyon kontrol sistemlerine eklenmemelidir (<code>.gitignore<\/code> dosyas\u0131na ekleyin).<\/p>\n<pre><code class=\"language-\"># .env\n    PORT=3000\n    MONGO_URI=mongodb:\/\/appUser:your_strong_app_password@127.0.0.1:27017\/my_app_db?authSource=admin<\/code><\/pre>\n<p>    <code>appUser<\/code>, <code>your_strong_app_password<\/code> ve <code>my_app_db<\/code> de\u011ferlerini MongoDB kurulumunuzdaki de\u011ferlerle de\u011fi\u015ftirmeyi unutmay\u0131n. <code>authSource=admin<\/code> parametresi, kimlik do\u011frulamas\u0131n\u0131n <code>admin<\/code> veritaban\u0131nda yap\u0131lmas\u0131 gerekti\u011fini belirtir.<\/p>\n<h3>Node.js Uygulamas\u0131n\u0131 MongoDB&#8217;ye Ba\u011flama<\/h3>\n<p>Yukar\u0131daki <code>app.js<\/code> \u00f6rne\u011fi zaten MongoDB ba\u011flant\u0131s\u0131n\u0131 <code>mongoose<\/code> kullanarak g\u00f6stermektedir. Bu b\u00f6l\u00fcmde, ba\u011flant\u0131 dizisinin yap\u0131s\u0131n\u0131 ve ortam de\u011fi\u015fkenlerinin \u00f6nemini daha detayl\u0131 a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h4><code>mongoose<\/code> ile Ba\u011flant\u0131<\/h4>\n<p><code>mongoose<\/code>, Node.js i\u00e7in pop\u00fcler bir MongoDB Object Data Modeling (ODM) k\u00fct\u00fcphanesidir. Schema tabanl\u0131 \u00e7\u00f6z\u00fcmler sunarak veri modellemeyi ve etkile\u015fimi kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Ba\u011flant\u0131 kodu:<\/p>\n<pre><code class=\"language-javascript\">mongoose.connect(process.env.MONGO_URI, {\n  useNewUrlParser: true,\n  useUnifiedTopology: true,\n  \/\/ useCreateIndex: true, \/\/ Bu se\u00e7enekler Mongoose 6.0 ve \u00fczeri s\u00fcr\u00fcmlerde varsay\u0131lan olarak true'dur ve belirtilmesi gerekmez.\n  \/\/ useFindAndModify: false \/\/ Benzer \u015fekilde\n})\n.then(() => console.log('MongoDB ba\u011flant\u0131s\u0131 ba\u015far\u0131l\u0131.'))\n.catch(err => console.error('MongoDB ba\u011flant\u0131 hatas\u0131:', err));<\/code><\/pre>\n<p><code>useNewUrlParser<\/code> ve <code>useUnifiedTopology<\/code> se\u00e7enekleri, MongoDB&#8217;nin yeni URL ayr\u0131\u015ft\u0131rma ve topoloji motorlar\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar, bu da gelecekteki s\u00fcr\u00fcmlerle uyumluluk i\u00e7in \u00f6nerilir.<\/p>\n<h4>Ba\u011flant\u0131 Dizisi (Connection String)<\/h4>\n<p>MongoDB ba\u011flant\u0131 dizisi, uygulaman\u0131z\u0131n veritaban\u0131na nas\u0131l ba\u011flanaca\u011f\u0131n\u0131 belirleyen bilgileri i\u00e7erir. Temel format\u0131 \u015f\u00f6yledir:<\/p>\n<p><code>mongodb:\/\/[username:password@]host1[:port1][,...hostN[:portN]][\/[defaultauthdb][?options]]<\/code><\/p>\n<p>\u00d6rnek ba\u011flant\u0131 dizimiz:<br \/>\n<code>mongodb:\/\/appUser:your_strong_app_password@127.0.0.1:27017\/my_app_db?authSource=admin<\/code><\/p>\n<p>*   <code>appUser<\/code>: MongoDB&#8217;de olu\u015fturdu\u011fumuz uygulama kullan\u0131c\u0131s\u0131n\u0131n ad\u0131.<br \/>\n*   <code>your_strong_app_password<\/code>: Uygulama kullan\u0131c\u0131s\u0131n\u0131n parolas\u0131.<br \/>\n*   <code>127.0.0.1<\/code>: MongoDB sunucusunun IP adresi. Ayn\u0131 VPS \u00fczerinde olduklar\u0131 i\u00e7in yerel IP kullan\u0131yoruz.<br \/>\n*   <code>27017<\/code>: MongoDB&#8217;nin varsay\u0131lan portu.<br \/>\n*   <code>my_app_db<\/code>: Uygulaman\u0131z\u0131n kullanaca\u011f\u0131 veritaban\u0131n\u0131n ad\u0131.<br \/>\n*   <code>authSource=admin<\/code>: Kimlik do\u011frulamas\u0131n\u0131n <code>admin<\/code> veritaban\u0131nda yap\u0131lmas\u0131 gerekti\u011fini belirtir. Bu, <code>appUser<\/code> kullan\u0131c\u0131s\u0131n\u0131 <code>my_app_db<\/code> veritaban\u0131nda olu\u015fturmu\u015f olsak bile, kimlik bilgilerinin <code>admin<\/code> veritaban\u0131nda kay\u0131tl\u0131 oldu\u011fu anlam\u0131na gelir.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri Kullan\u0131m\u0131<\/h4>\n<p>Hassas bilgileri (veritaban\u0131 parolalar\u0131, API anahtarlar\u0131 vb.) do\u011frudan kodda tutmak yerine ortam de\u011fi\u015fkenleri olarak saklamak en iyi g\u00fcvenlik uygulamas\u0131d\u0131r. <code>dotenv<\/code> paketi, <code>.env<\/code> dosyas\u0131ndaki de\u011fi\u015fkenleri <code>process.env<\/code> nesnesine y\u00fcklemeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>1.  <strong><code>dotenv<\/code> Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm install dotenv<\/code><\/pre>\n<p>2.  <strong><code>.env<\/code> Dosyas\u0131:<\/strong><\/p>\n<pre><code class=\"language-\">MONGO_URI=mongodb:\/\/appUser:your_strong_app_password@127.0.0.1:27017\/my_app_db?authSource=admin<\/code><\/pre>\n<p>3.  <strong>Kullan\u0131m:<\/strong><br \/>\n    Uygulaman\u0131z\u0131n giri\u015f dosyas\u0131n\u0131n (genellikle <code>app.js<\/code> veya <code>server.js<\/code>) en ba\u015f\u0131na a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code class=\"language-javascript\">require('dotenv').config();<\/code><\/pre>\n<p>    Art\u0131k <code>process.env.MONGO_URI<\/code> ile ba\u011flant\u0131 dizisine eri\u015febilirsiniz.<\/p>\n<h3>Uygulamay\u0131 VPS&#8217;e Da\u011f\u0131tma<\/h3>\n<p>Uygulaman\u0131z\u0131 yerel makinenizde geli\u015ftirdikten sonra, onu VPS&#8217;inize aktarman\u0131z ve orada \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir.<\/p>\n<h4>Kodun Sunucuya Aktar\u0131lmas\u0131<\/h4>\n<p>Kodunuzu sunucuya aktarman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<p>1.  <strong><code>scp<\/code> Kullanarak (Basit Uygulamalar \u0130\u00e7in):<\/strong><\/p>\n<pre><code class=\"language-bash\">scp -r \/path\/to\/your\/local\/my-node-app your_username@your_vps_ip_address:\/home\/your_username\/<\/code><\/pre>\n<p>    Bu komut, yerel <code>my-node-app<\/code> klas\u00f6r\u00fcn\u00fc VPS&#8217;teki kullan\u0131c\u0131n\u0131z\u0131n ana dizinine kopyalar.<br \/>\n2.  <strong>Git Kullanarak (\u00d6nerilen):<\/strong><br \/>\n    Uygulaman\u0131z\u0131 bir Git deposuna (GitHub, GitLab, Bitbucket vb.) y\u00fckleyin. Ard\u0131ndan VPS&#8217;inizde depoyu klonlay\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo apt install git -y # E\u011fer git kurulu de\u011filse\n    cd \/home\/your_username\/\n    git clone https:\/\/github.com\/your_username\/my-node-app.git\n    cd my-node-app<\/code><\/pre>\n<p>    Bu y\u00f6ntem, versiyon kontrol\u00fc, i\u015fbirli\u011fi ve g\u00fcncellemeler i\u00e7in \u00e7ok daha iyidir.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar\u0131n Y\u00fcklenmesi<\/h4>\n<p>Uygulama kodunuzu VPS&#8217;e aktard\u0131ktan sonra, gerekli Node.js paketlerini y\u00fcklemeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">cd \/home\/your_username\/my-node-app # Uygulama dizinine gidin\nnpm install<\/code><\/pre>\n<h4><code>.env<\/code> Dosyas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>VPS&#8217;inizde de <code>.env<\/code> dosyas\u0131n\u0131 olu\u015fturman\u0131z ve hassas bilgileri buraya girmeniz gerekir:<\/p>\n<pre><code class=\"language-bash\">cd \/home\/your_username\/my-node-app\nnano .env<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi yerel makinenizdeki gibi doldurun:<\/p>\n<pre><code class=\"language-\">PORT=3000\nMONGO_URI=mongodb:\/\/appUser:your_strong_app_password@127.0.0.1:27017\/my_app_db?authSource=admin<\/code><\/pre>\n<h4>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Uygulaman\u0131z\u0131 test etmek i\u00e7in do\u011frudan \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">node app.js<\/code><\/pre>\n<p>Taray\u0131c\u0131n\u0131zdan <code>http:\/\/your_vps_ip_address:3000<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz. Ancak bu \u015fekilde \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda SSH ba\u011flant\u0131s\u0131n\u0131 kapatt\u0131\u011f\u0131n\u0131zda uygulama duracakt\u0131r. S\u00fcrekli \u00e7al\u0131\u015fma i\u00e7in <code>pm2<\/code> gibi bir s\u00fcre\u00e7 y\u00f6neticisi kullanmal\u0131y\u0131z.<\/p>\n<h4><code>pm2<\/code> ile S\u00fcrekli \u00c7al\u0131\u015fma<\/h4>\n<p><code>pm2<\/code>, Node.js uygulamalar\u0131n\u0131 \u00fcretim ortam\u0131nda y\u00f6netmek, izlemek ve s\u00fcrekli \u00e7al\u0131\u015f\u0131r durumda tutmak i\u00e7in pop\u00fcler bir s\u00fcre\u00e7 y\u00f6neticisidir.<\/p>\n<p>1.  <strong><code>pm2<\/code> Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">npm install -g pm2<\/code><\/pre>\n<p>2.  <strong>Uygulamay\u0131 <code>pm2<\/code> ile Ba\u015flatma:<\/strong><\/p>\n<pre><code class=\"language-bash\">cd \/home\/your_username\/my-node-app\n    pm2 start app.js --name my-node-app<\/code><\/pre>\n<p>    <em><code>--name<\/code> bayra\u011f\u0131, uygulaman\u0131za kolayca tan\u0131nabilir bir isim verir.<\/em><br \/>\n3.  <strong><code>pm2<\/code> Durumunu Kontrol Etme:<\/strong><\/p>\n<pre><code class=\"language-bash\">pm2 list\n    pm2 logs my-node-app # Uygulaman\u0131z\u0131n loglar\u0131n\u0131 g\u00f6rmek i\u00e7in<\/code><\/pre>\n<p>4.  <strong>Sistem Ba\u015flang\u0131c\u0131nda Otomatik Ba\u015flatma:<\/strong><br \/>\n    <code>pm2<\/code>&#8216;nin sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda uygulamalar\u0131n\u0131z\u0131 otomatik olarak ba\u015flatmas\u0131n\u0131 sa\u011flamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">pm2 startup\n    # Yukar\u0131daki komut size bir komut verecektir, onu kopyalay\u0131p \u00e7al\u0131\u015ft\u0131r\u0131n.\n    # \u00d6rnek: sudo env PATH=$PATH:\/home\/your_username\/.nvm\/versions\/node\/v16.14.0\/bin \/home\/your_username\/.nvm\/versions\/node\/v16.14.0\/lib\/node_modules\/pm2\/bin\/pm2 startup systemd -u your_username --hp \/home\/your_username\n    pm2 save # Mevcut pm2 s\u00fcre\u00e7lerini kaydet<\/code><\/pre>\n<p>    Bu ad\u0131mlar, sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda <code>my-node-app<\/code> uygulamas\u0131n\u0131n otomatik olarak <code>pm2<\/code> taraf\u0131ndan ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>G\u00fcvenlik En \u0130yi Uygulamalar\u0131<\/h3>\n<p>Uygulaman\u0131z\u0131n ve veritaban\u0131n\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in a\u015fa\u011f\u0131daki en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurun:<\/p>\n<p>*   <strong>G\u00fc\u00e7l\u00fc ve Benzersiz Parolalar:<\/strong> T\u00fcm kullan\u0131c\u0131lar ve veritaban\u0131 i\u00e7in karma\u015f\u0131k ve benzersiz parolalar kullan\u0131n.<br \/>\n*   <strong>SSH Anahtar Tabanl\u0131 Kimlik Do\u011frulama:<\/strong> Parola tabanl\u0131 SSH giri\u015fini devre d\u0131\u015f\u0131 b\u0131rak\u0131n ve yaln\u0131zca anahtarlar\u0131n\u0131z\u0131 kullanarak ba\u011flan\u0131n.<br \/>\n*   <strong>G\u00fcvenlik Duvar\u0131 (UFW):<\/strong> Yaln\u0131zca gerekli portlara (SSH, HTTP\/S, uygulaman\u0131z\u0131n kulland\u0131\u011f\u0131 port, MongoDB i\u00e7in yerel eri\u015fim) izin verin. Di\u011fer t\u00fcm portlar\u0131 kapal\u0131 tutun.<br \/>\n*   <strong>MongoDB Kimlik Do\u011frulamas\u0131:<\/strong> MongoDB&#8217;de kullan\u0131c\u0131 tabanl\u0131 kimlik do\u011frulamas\u0131n\u0131 etkinle\u015ftirin ve uygulama i\u00e7in ayr\u0131, k\u0131s\u0131tl\u0131 yetkilere sahip kullan\u0131c\u0131lar olu\u015fturun.<br \/>\n*   <strong>MongoDB <code>bindIp<\/code> Ayar\u0131:<\/strong> MongoDB&#8217;nin yaln\u0131zca yerel IP adresinden (<code>127.0.0.1<\/code>) veya Node.js uygulaman\u0131z\u0131n IP adresinden gelen ba\u011flant\u0131lar\u0131 kabul etmesini sa\u011flay\u0131n.<br \/>\n*   <strong>Ortam De\u011fi\u015fkenleri:<\/strong> Hassas bilgileri (veritaban\u0131 ba\u011flant\u0131 dizeleri, API anahtarlar\u0131) <code>.env<\/code> dosyalar\u0131 veya sunucu ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netin, asla kodunuza do\u011frudan yazmay\u0131n ve Git&#8217;e commit etmeyin.<br \/>\n*   <strong>D\u00fczenli G\u00fcncellemeler:<\/strong> \u0130\u015fletim sisteminizi, Node.js ve MongoDB&#8217;yi d\u00fczenli olarak g\u00fcncelleyerek g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131n.<br \/>\n*   <strong>Yedeklemeler:<\/strong> Veritaban\u0131n\u0131z\u0131n d\u00fczenli yedeklerini al\u0131n ve g\u00fcvenli bir yerde saklay\u0131n.<br \/>\n*   <strong>SSL\/TLS:<\/strong> Uygulaman\u0131z HTTP trafi\u011fi sa\u011fl\u0131yorsa, Let&#8217;s Encrypt gibi \u00fccretsiz sertifikalarla SSL\/TLS kullanarak trafi\u011fi \u015fifreleyin. Bu genellikle bir ters proxy (Nginx veya Apache) arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r.<\/p>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Kurulum ve ba\u011flant\u0131 s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve olas\u0131 \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>MongoDB Ba\u011flant\u0131 Hatas\u0131 (Authentication Failed):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Ba\u011flant\u0131 dizinizdeki kullan\u0131c\u0131 ad\u0131, parola, veritaban\u0131 ad\u0131 ve <code>authSource<\/code> parametresinin do\u011fru oldu\u011fundan emin olun. MongoDB&#8217;de kimlik do\u011frulaman\u0131n (<code>authorization: enabled<\/code>) etkin oldu\u011fundan ve uygulama kullan\u0131c\u0131s\u0131n\u0131n do\u011fru yetkilerle olu\u015fturuldu\u011fundan emin olun.<br \/>\n*   <strong>MongoDB Ba\u011flant\u0131 Hatas\u0131 (Connection Refused):<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> MongoDB servisinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun (<code>sudo systemctl status mongod<\/code>). <code>mongod.conf<\/code> dosyas\u0131ndaki <code>bindIp<\/code> ayar\u0131n\u0131n <code>127.0.0.1<\/code> oldu\u011fundan veya Node.js uygulaman\u0131z\u0131n IP adresini i\u00e7erdi\u011finden emin olun. G\u00fcvenlik duvar\u0131n\u0131z\u0131n (UFW) MongoDB portuna (27017) eri\u015fimi engellemedi\u011finden emin olun. E\u011fer <code>bindIp<\/code> <code>127.0.0.1<\/code> ise, d\u0131\u015far\u0131dan eri\u015fim zaten engellenmi\u015ftir ve bu do\u011fru bir davran\u0131\u015ft\u0131r.<br \/>\n*   <strong>Node.js Uygulamas\u0131 Ba\u015flam\u0131yor veya \u00c7\u00f6k\u00fcyor:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>pm2 logs my-node-app<\/code> komutuyla uygulama loglar\u0131n\u0131 kontrol edin. Hata mesajlar\u0131 genellikle sorunun kayna\u011f\u0131n\u0131 (eksik ba\u011f\u0131ml\u0131l\u0131klar, kod hatalar\u0131, ortam de\u011fi\u015fkeni sorunlar\u0131) g\u00f6sterir. <code>.env<\/code> dosyas\u0131n\u0131n do\u011fru yerde ve do\u011fru i\u00e7erikle oldu\u011fundan emin olun.<br \/>\n*   <strong><code>nvm<\/code> Komutlar\u0131 Bulunam\u0131yor:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>nvm<\/code> kurulumundan sonra terminali kapat\u0131p yeniden a\u00e7\u0131n veya <code>source ~\/.bashrc<\/code> (veya <code>~\/.zshrc<\/code>) komutunu \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>Uygulamaya Taray\u0131c\u0131dan Eri\u015filemiyor:<\/strong><br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Uygulaman\u0131z\u0131n do\u011fru portta \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun (<code>pm2 list<\/code> veya loglar). G\u00fcvenlik duvar\u0131n\u0131z\u0131n (UFW) uygulaman\u0131z\u0131n kulland\u0131\u011f\u0131 porta (\u00f6rn. 3000) izin verdi\u011finden emin olun.<br \/>\n    *   E\u011fer Nginx gibi bir ters proxy kullan\u0131yorsan\u0131z, Nginx yap\u0131land\u0131rmas\u0131n\u0131n do\u011fru oldu\u011fundan ve Node.js uygulaman\u0131za y\u00f6nlendirme yapt\u0131\u011f\u0131ndan emin olun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Node.js uygulaman\u0131z\u0131 bir VPS \u00fczerinde \u00e7al\u0131\u015fan MongoDB veritaban\u0131na g\u00fcvenli ve verimli bir \u015fekilde ba\u011flamak i\u00e7in gerekli t\u00fcm ad\u0131mlar\u0131 detayl\u0131 bir \u015fekilde inceledik. VPS kurulumundan ba\u015flayarak, MongoDB ve Node.js ortamlar\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131na, g\u00fcvenlik \u00f6nlemlerinin al\u0131nmas\u0131na ve uygulaman\u0131n da\u011f\u0131t\u0131m\u0131na kadar kapsaml\u0131 bir rehber sunduk.<\/p>\n<p>Art\u0131k kendi Node.js uygulaman\u0131z\u0131 bir VPS \u00fczerinde MongoDB ile \u00e7al\u0131\u015f\u0131r hale getirecek bilgi ve ara\u00e7lara sahipsiniz. Bu bilgi birikimi, sadece basit bir ba\u011flant\u0131 kurman\u0131n \u00f6tesinde, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve g\u00fcvenli\u011fini art\u0131rmak i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r. Unutmay\u0131n ki, s\u00fcrekli \u00f6\u011frenme ve g\u00fcvenlik en iyi uygulamalar\u0131n\u0131 takip etme, ba\u015far\u0131l\u0131 bir geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcrecinin anahtar\u0131d\u0131r.<\/p>\n<p>Geli\u015ftirmelerinize devam ederken, MongoDB replika setleri ve sharding ile veritaban\u0131 \u00f6l\u00e7eklendirme, Nginx gibi bir ters proxy ile y\u00fck dengeleme ve SSL\/TLS yap\u0131land\u0131rmas\u0131 gibi konular\u0131 da ara\u015ft\u0131rman\u0131z, uygulaman\u0131z\u0131n daha sa\u011flam ve kurumsal d\u00fczeyde olmas\u0131na yard\u0131mc\u0131 olacakt\u0131r. Ba\u015far\u0131lar dileriz!<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi\nBu kapsaml\u0131 teknik makalede, Node.js tabanl\u0131 bir uygulaman\u0131n bir","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":[676],"tags":[],"class_list":{"0":"post-36022","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-mongodb","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 Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi - 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-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi\" \/>\n<meta property=\"og:description\" content=\"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi Bu kapsaml\u0131 teknik makalede, Node.js tabanl\u0131 bir uygulaman\u0131n bir\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-06T19:40:47+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=\"19 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-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi\",\"datePublished\":\"2025-12-06T19:40:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\"},\"wordCount\":2773,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"MongoDB\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\",\"name\":\"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-06T19:40:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi\"}]},{\"@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 Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi - 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-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi","og_description":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi Bu kapsaml\u0131 teknik makalede, Node.js tabanl\u0131 bir uygulaman\u0131n bir","og_url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-06T19:40:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi","datePublished":"2025-12-06T19:40:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/"},"wordCount":2773,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["MongoDB"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/","name":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-06T19:40:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/node-js-uygulamanizi-bir-vps-uzerindeki-mongodb-veritabanina-baglama-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js Uygulaman\u0131z\u0131 Bir VPS \u00dczerindeki MongoDB Veritaban\u0131na Ba\u011flama Rehberi"}]},{"@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\/36022","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=36022"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36022\/revisions"}],"predecessor-version":[{"id":36023,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36022\/revisions\/36023"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}