Node.js Uygulamanızı Bir VPS Üzerindeki MongoDB Veritabanına Bağlama Rehberi
Bu kapsamlı teknik makalede, Node.js tabanlı bir uygulamanın bir Sanal Özel Sunucu (VPS) üzerinde çalışan bir MongoDB veritabanına nasıl bağlanacağını adım adım inceleyeceğiz. Modern web uygulamalarının geliştirilmesinde sıklıkla tercih edilen bu güçlü ikilinin kurulumu, yapılandırılması ve güvenli bir şekilde birbirine bağlanması süreçlerini detaylandıracağız. Amacımız, hem yeni başlayanlar hem de deneyimli geliştiriciler için anlaşılır ve pratik bir rehber sunmaktır.
Giriş
Günümüzün dinamik ve ölçeklenebilir web uygulamaları dünyasında, Node.js ve MongoDB kombinasyonu, hızlı geliştirme süreçleri ve yüksek performans sağlayan popüler bir teknoloji yığını haline gelmiştir. Node.js, sunucu tarafı JavaScript çalışma ortamı olarak, gerçek zamanlı uygulamalar ve API’ler oluşturmak için idealdir. MongoDB ise, esnek, belge tabanlı (NoSQL) yapısıyla veri depolama konusunda geliştiricilere büyük kolaylıklar sunar. Bu ikilinin bir Sanal Özel Sunucu (VPS) üzerinde çalıştırılması, geliştiricilere kendi sunucu ortamları üzerinde tam kontrol sağlarken, aynı zamanda maliyet etkin ve ölçeklenebilir bir çözüm sunar.
Bir VPS, paylaşımlı barındırma hizmetlerinin kısıtlamalarından kurtulup, fiziksel bir sunucunun sanallaştırılmış bir bölümünde kendi işletim sisteminizi ve yazılımlarınızı çalıştırma özgürlüğü verir. Bu, uygulamanızın performansını optimize etme, özel güvenlik önlemleri uygulama ve kaynakları dilediğiniz gibi yapılandırma imkanı tanır.
Bu makale, bir VPS üzerinde temel bir Ubuntu/Debian işletim sistemi kurulumundan başlayarak, MongoDB ve Node.js ortamlarının hazırlanmasına, güvenlik ayarlarının yapılmasına ve son olarak Node.js uygulamanızın MongoDB veritabanına güvenli bir şekilde bağlanmasına kadar tüm süreci kapsayacaktır. Ayrıca, uygulamanızı sürekli çalışır durumda tutmak için pratik dağıtım yöntemlerini ve güvenlik en iyi uygulamalarını da ele alacağız.
Ön Koşullar ve Gerekli Araçlar
Bu rehbere başlamadan önce, aşağıdaki ön koşullara ve araçlara sahip olmanız gerekmektedir:
* Bir VPS Hesabı: DigitalOcean, Linode, Vultr, AWS EC2, Google Cloud Compute Engine veya benzeri bir sağlayıcıdan alınmış, Ubuntu (tercihen 20.04 LTS veya daha yeni) veya Debian tabanlı bir VPS.
* SSH İstemcisi: Sunucunuza bağlanmak için bir SSH istemcisi. Linux/macOS kullanıcıları için terminal (OpenSSH), Windows kullanıcıları için PuTTY veya WSL (Windows Subsystem for Linux) yeterli olacaktır.
* Temel Linux Komut Bilgisi: sudo, apt, cd, ls, nano veya vi gibi temel komutlara aşina olmak.
* Node.js ve npm (Yerel Makinenizde): Uygulamanızı yerel olarak geliştirmek ve test etmek için Node.js ve npm’in kurulu olması.
* Temel Node.js ve MongoDB Bilgisi: Node.js ve MongoDB’nin temel kavramlarına ve çalışma prensiplerine genel bir aşinalık.
VPS Kurulumu ve Temel Ayarlar
VPS’inizi ilk kez kurarken yapmanız gereken bazı temel ayarlar vardır. Bu adımlar, sunucunuzun güvenliğini artıracak ve daha sonraki kurulumları kolaylaştıracaktır.
SSH ile Bağlanma ve Kullanıcı Oluşturma
VPS sağlayıcınızdan aldığınız IP adresi ve root kullanıcı bilgileriyle sunucunuza SSH üzerinden bağlanın:
ssh root@your_vps_ip_address
İlk bağlantıdan sonra, root kullanıcısı yerine daha güvenli bir yöntem olan yeni bir kullanıcı oluşturup sudo yetkileri vermek önemlidir.
adduser your_username
usermod -aG sudo your_username
Şimdi root oturumundan çıkış yapıp yeni kullanıcınızla tekrar bağlanabilirsiniz:
exit
ssh your_username@your_vps_ip_address
SSH Anahtar Tabanlı Kimlik Doğrulama (Önerilir)
Parola ile giriş yapmak yerine SSH anahtarları kullanarak daha güvenli bir bağlantı sağlayabilirsiniz.
1. Yerel Makinenizde SSH Anahtarı Oluşturma (Eğer Yoksa):
ssh-keygen -t rsa -b 4096
Varsayılan konumları ve boş parolayı kabul edebilirsiniz.
2. Genel Anahtarı VPS’e Kopyalama:
ssh-copy-id your_username@your_vps_ip_address
Bu komut, yerel makinenizdeki genel anahtarı (~/.ssh/id_rsa.pub) VPS’teki .ssh/authorized_keys dosyasına kopyalar.
3. Parola Kimlik Doğrulamasını Devre Dışı Bırakma (İsteğe Bağlı ama Önerilir):
VPS’nizde /etc/ssh/sshd_config dosyasını düzenleyerek PasswordAuthentication no olarak ayarlayın ve SSH servisini yeniden başlatın:
sudo nano /etc/ssh/sshd_config
# 'PasswordAuthentication yes' satırını bulup 'no' yapın
# 'PermitRootLogin yes' satırını bulup 'no' yapın (root ile doğrudan giriş yapmayı engeller)
sudo systemctl restart sshd
Sistem Güncelleme ve Güvenlik Duvarı (UFW)
Sunucunuzu güncel tutmak ve temel bir güvenlik duvarı yapılandırmak kritik öneme sahiptir.
sudo apt update && sudo apt upgrade -y
UFW (Uncomplicated Firewall) Kurulumu ve Ayarları:
sudo apt install ufw -y
sudo ufw allow OpenSSH # SSH bağlantılarına izin ver
sudo ufw allow 'Nginx HTTP' # Eğer Nginx kullanacaksanız HTTP trafiğine izin ver
sudo ufw allow 'Nginx HTTPS' # Eğer Nginx kullanacaksanız HTTPS trafiğine izin ver
Eğer Node.js uygulamanız doğrudan 80/443 dışında bir portta çalışacaksa:
sudo ufw allow 3000/tcp # Örnek olarak 3000 portuna izin ver
sudo ufw enable # Güvenlik duvarını etkinleştir
sudo ufw status # Güvenlik duvarı durumunu kontrol et
MongoDB Kurulumu ve Güvenliği
Node.js uygulamanızın verilerini depolayacağı MongoDB veritabanını VPS’inize kuracağız.
MongoDB Kurulumu
Ubuntu/Debian sistemler için MongoDB’nin resmi deposunu kullanarak kurulum yapmak en iyi yöntemdir.
1. MongoDB GPG Anahtarını İçe Aktarma:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
Not: apt-key kullanımdan kaldırılıyor. Daha modern bir yaklaşım için:
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
2. MongoDB Deposunu Ekleme:
Ubuntu 20.04 (Focal) için:
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
Diğer Ubuntu/Debian versiyonları için uygun kod adını kullanmalısınız (örn. jammy for Ubuntu 22.04, buster for Debian 10, bullseye for Debian 11).
3. Paket Listesini Güncelleme ve MongoDB Kurulumu:
sudo apt update
sudo apt install -y mongodb-org
4. MongoDB Servisini Başlatma ve Etkinleştirme:
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod # Servisin çalıştığını kontrol edin
MongoDB Güvenlik Ayarları
MongoDB’yi varsayılan ayarlarla bırakmak ciddi güvenlik riskleri taşır. Mutlaka aşağıdaki adımları uygulayın.
Kimlik Doğrulama (Authentication)
MongoDB’de kullanıcı tabanlı kimlik doğrulamasını etkinleştirmek çok önemlidir.
1. mongod.conf Dosyasını Düzenleme:
sudo nano /etc/mongod.conf
security: bölümünü bulun veya ekleyin ve authorization: enabled satırını ekleyin:
# /etc/mongod.conf
# ...
security:
authorization: enabled
# ...
Ayrıca, net: bölümünde bindIp ayarını kontrol edin. Eğer Node.js uygulamanız MongoDB ile aynı sunucuda çalışacaksa, sadece yerel erişime izin vermek en güvenlisidir:
# /etc/mongod.conf
# ...
net:
port: 27017
bindIp: 127.0.0.1 # Sadece yerel bağlantılara izin verir
# ...
Eğer Node.js uygulamanız farklı bir sunucuda olacaksa, o sunucunun IP adresini de bindIp listesine eklemeniz gerekir (örneğin, bindIp: 127.0.0.1,your_node_js_server_ip). Ancak bu senaryoda güvenlik duvarı ayarlarını çok dikkatli yapmanız gerekecektir. Aynı VPS üzerinde çalıştırıyorsanız 127.0.0.1 en güvenli seçenektir.
2. MongoDB Servisini Yeniden Başlatma:
Ayarları uygulamak için servisi yeniden başlatın:
sudo systemctl restart mongod
3. Yönetici Kullanıcısı Oluşturma:
Artık kimlik doğrulama etkin olduğu için, MongoDB kabuğuna bağlanıp bir yönetici kullanıcısı oluşturmalıyız. Bu işlemi kimlik doğrulama etkinleştirildikten hemen sonra yapmalısınız, aksi takdirde bağlanamazsınız.
mongo
MongoDB kabuğuna girdikten sonra:
use admin
db.createUser(
{
user: "mongoAdmin",
pwd: "your_strong_admin_password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
exit
Artık mongo kabuğuna bağlanmak için kullanıcı adı ve parola belirtmeniz gerekecek:
mongo -u mongoAdmin -p --authenticationDatabase admin
Parolanızı istendiğinde girin.
4. Uygulama Kullanıcısı Oluşturma:
Uygulamanızın doğrudan yönetici kullanıcısını kullanması yerine, sadece belirli veritabanlarına erişim yetkisi olan ayrı bir kullanıcı oluşturmak daha güvenlidir.
Yönetici kullanıcınızla MongoDB kabuğuna bağlanın ve uygulamanız için bir veritabanı oluşturun (örneğin my_app_db):
mongo -u mongoAdmin -p --authenticationDatabase admin
use my_app_db
db.createUser(
{
user: "appUser",
pwd: "your_strong_app_password",
roles: [ { role: "readWrite", db: "my_app_db" } ]
}
)
exit
Bu kullanıcı sadece my_app_db veritabanında okuma/yazma yetkisine sahip olacaktır.
Güvenlik Duvarı (UFW) Ayarları
MongoDB’nin varsayılan portu 27017’dir. Bu porta sadece Node.js uygulamanızın çalıştığı sunucudan erişime izin vermelisiniz. Eğer Node.js ve MongoDB aynı VPS’te ise, sadece yerel bağlantılara izin vermek en güvenlisidir. bindIp: 127.0.0.1 ayarını yaptıysanız, UFW’de ayrıca bir kural eklemenize gerek kalmaz, çünkü dışarıdan hiçbir bağlantıya izin verilmeyecektir.
Eğer farklı bir sunucudan erişime izin vermeniz gerekirse (ki bu daha karmaşık ve risklidir):
sudo ufw allow from your_node_js_server_ip to any port 27017
Ancak, bu rehberde Node.js ve MongoDB’nin aynı VPS üzerinde çalıştığı varsayılmıştır, bu nedenle bindIp: 127.0.0.1 ayarı ile dışarıdan erişimi engellemek en iyi yaklaşımdır.
Node.js Ortamının Kurulumu
Şimdi Node.js uygulamanızı çalıştıracak ortamı VPS üzerinde kuracağız.
Node.js ve npm Kurulumu
nvm (Node Version Manager) kullanarak Node.js kurmak, farklı Node.js versiyonları arasında kolayca geçiş yapmanızı sağladığı için önerilir.
1. nvm Kurulumu:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
Kurulumdan sonra terminali kapatıp yeniden açmanız veya aşağıdaki komutları çalıştırmanız gerekebilir:
source ~/.bashrc # veya ~/.zshrc eğer zsh kullanıyorsanız
2. Node.js Kurulumu:
nvm install node # En son LTS (Uzun Süreli Destek) versiyonunu kurar
nvm use node # Kurulan versiyonu kullanıma alır
nvm alias default node # Her yeni oturumda bu versiyonu varsayılan yapar
3. Versiyonları Kontrol Etme:
node -v
npm -v
Basit Bir Node.js Uygulaması Oluşturma
Uygulamanızı yerel makinenizde geliştirip daha sonra VPS’e aktarmanız en yaygın yaklaşımdır. İşte basit bir örnek uygulama yapısı:
1. Uygulama Dizini Oluşturma:
mkdir my-node-app
cd my-node-app
2. package.json Oluşturma:
npm init -y
3. app.js Dosyası Oluşturma:
// app.js
const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
dotenv.config(); // Ortam değişkenlerini yükle
const app = express();
const port = process.env.PORT || 3000;
// MongoDB bağlantısı
const mongoUri = process.env.MONGO_URI;
mongoose.connect(mongoUri, {
useNewUrlParser: true,
useUnifiedTopology: true,
// useCreateIndex: true, // Mongoose 6+ ile genellikle gerekmez
// useFindAndModify: false // Mongoose 6+ ile genellikle gerekmez
})
.then(() => console.log('MongoDB bağlantısı başarılı.'))
.catch(err => console.error('MongoDB bağlantı hatası:', err));
// Basit bir Schema ve Model (örnek için)
const itemSchema = new mongoose.Schema({
name: String,
description: String
});
const Item = mongoose.model('Item', itemSchema);
app.use(express.json()); // JSON istek gövdelerini ayrıştırmak için
app.get('/', (req, res) => {
res.send('Node.js uygulaması çalışıyor ve MongoDB\'ye bağlanmaya çalışıyor!');
});
// Yeni bir öğe ekleme
app.post('/items', async (req, res) => {
try {
const newItem = new Item(req.body);
await newItem.save();
res.status(201).json(newItem);
} catch (error) {
res.status(400).json({ message: error.message });
}
});
// Tüm öğeleri listeleme
app.get('/items', async (req, res) => {
try {
const items = await Item.find();
res.json(items);
} catch (error) {
res.status(500).json({ message: error.message });
}
});
app.listen(port, () => {
console.log(Sunucu http://localhost:${port} adresinde çalışıyor.);
});
4. Gerekli Bağımlılıkları Yükleme:
npm install express mongoose dotenv
5. .env Dosyası Oluşturma:
Bu dosya hassas bilgileri saklamak için kullanılır ve Git gibi versiyon kontrol sistemlerine eklenmemelidir (.gitignore dosyasına ekleyin).
# .env
PORT=3000
MONGO_URI=mongodb://appUser:your_strong_app_password@127.0.0.1:27017/my_app_db?authSource=admin
appUser, your_strong_app_password ve my_app_db değerlerini MongoDB kurulumunuzdaki değerlerle değiştirmeyi unutmayın. authSource=admin parametresi, kimlik doğrulamasının admin veritabanında yapılması gerektiğini belirtir.
Node.js Uygulamasını MongoDB’ye Bağlama
Yukarıdaki app.js örneği zaten MongoDB bağlantısını mongoose kullanarak göstermektedir. Bu bölümde, bağlantı dizisinin yapısını ve ortam değişkenlerinin önemini daha detaylı açıklayacağız.
mongoose ile Bağlantı
mongoose, Node.js için popüler bir MongoDB Object Data Modeling (ODM) kütüphanesidir. Schema tabanlı çözümler sunarak veri modellemeyi ve etkileşimi kolaylaştırır.
Bağlantı kodu:
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
// useCreateIndex: true, // Bu seçenekler Mongoose 6.0 ve üzeri sürümlerde varsayılan olarak true'dur ve belirtilmesi gerekmez.
// useFindAndModify: false // Benzer şekilde
})
.then(() => console.log('MongoDB bağlantısı başarılı.'))
.catch(err => console.error('MongoDB bağlantı hatası:', err));
useNewUrlParser ve useUnifiedTopology seçenekleri, MongoDB’nin yeni URL ayrıştırma ve topoloji motorlarını kullanmasını sağlar, bu da gelecekteki sürümlerle uyumluluk için önerilir.
Bağlantı Dizisi (Connection String)
MongoDB bağlantı dizisi, uygulamanızın veritabanına nasıl bağlanacağını belirleyen bilgileri içerir. Temel formatı şöyledir:
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
Örnek bağlantı dizimiz:
mongodb://appUser:your_strong_app_password@127.0.0.1:27017/my_app_db?authSource=admin
* appUser: MongoDB’de oluşturduğumuz uygulama kullanıcısının adı.
* your_strong_app_password: Uygulama kullanıcısının parolası.
* 127.0.0.1: MongoDB sunucusunun IP adresi. Aynı VPS üzerinde oldukları için yerel IP kullanıyoruz.
* 27017: MongoDB’nin varsayılan portu.
* my_app_db: Uygulamanızın kullanacağı veritabanının adı.
* authSource=admin: Kimlik doğrulamasının admin veritabanında yapılması gerektiğini belirtir. Bu, appUser kullanıcısını my_app_db veritabanında oluşturmuş olsak bile, kimlik bilgilerinin admin veritabanında kayıtlı olduğu anlamına gelir.
Ortam Değişkenleri Kullanımı
Hassas bilgileri (veritabanı parolaları, API anahtarları vb.) doğrudan kodda tutmak yerine ortam değişkenleri olarak saklamak en iyi güvenlik uygulamasıdır. dotenv paketi, .env dosyasındaki değişkenleri process.env nesnesine yüklemeyi kolaylaştırır.
1. dotenv Kurulumu:
npm install dotenv
2. .env Dosyası:
MONGO_URI=mongodb://appUser:your_strong_app_password@127.0.0.1:27017/my_app_db?authSource=admin
3. Kullanım:
Uygulamanızın giriş dosyasının (genellikle app.js veya server.js) en başına aşağıdaki satırı ekleyin:
require('dotenv').config();
Artık process.env.MONGO_URI ile bağlantı dizisine erişebilirsiniz.
Uygulamayı VPS’e Dağıtma
Uygulamanızı yerel makinenizde geliştirdikten sonra, onu VPS’inize aktarmanız ve orada çalıştırmanız gerekir.
Kodun Sunucuya Aktarılması
Kodunuzu sunucuya aktarmanın birkaç yolu vardır:
1. scp Kullanarak (Basit Uygulamalar İçin):
scp -r /path/to/your/local/my-node-app your_username@your_vps_ip_address:/home/your_username/
Bu komut, yerel my-node-app klasörünü VPS’teki kullanıcınızın ana dizinine kopyalar.
2. Git Kullanarak (Önerilen):
Uygulamanızı bir Git deposuna (GitHub, GitLab, Bitbucket vb.) yükleyin. Ardından VPS’inizde depoyu klonlayın:
sudo apt install git -y # Eğer git kurulu değilse
cd /home/your_username/
git clone https://github.com/your_username/my-node-app.git
cd my-node-app
Bu yöntem, versiyon kontrolü, işbirliği ve güncellemeler için çok daha iyidir.
Bağımlılıkların Yüklenmesi
Uygulama kodunuzu VPS’e aktardıktan sonra, gerekli Node.js paketlerini yüklemeniz gerekir:
cd /home/your_username/my-node-app # Uygulama dizinine gidin
npm install
.env Dosyasının Oluşturulması
VPS’inizde de .env dosyasını oluşturmanız ve hassas bilgileri buraya girmeniz gerekir:
cd /home/your_username/my-node-app
nano .env
İçeriği yerel makinenizdeki gibi doldurun:
PORT=3000
MONGO_URI=mongodb://appUser:your_strong_app_password@127.0.0.1:27017/my_app_db?authSource=admin
Uygulamayı Çalıştırma
Uygulamanızı test etmek için doğrudan çalıştırabilirsiniz:
node app.js
Tarayıcınızdan http://your_vps_ip_address:3000 adresine giderek uygulamanızın çalıştığını kontrol edebilirsiniz. Ancak bu şekilde çalıştırdığınızda SSH bağlantısını kapattığınızda uygulama duracaktır. Sürekli çalışma için pm2 gibi bir süreç yöneticisi kullanmalıyız.
pm2 ile Sürekli Çalışma
pm2, Node.js uygulamalarını üretim ortamında yönetmek, izlemek ve sürekli çalışır durumda tutmak için popüler bir süreç yöneticisidir.
1. pm2 Kurulumu:
npm install -g pm2
2. Uygulamayı pm2 ile Başlatma:
cd /home/your_username/my-node-app
pm2 start app.js --name my-node-app
--name bayrağı, uygulamanıza kolayca tanınabilir bir isim verir.
3. pm2 Durumunu Kontrol Etme:
pm2 list
pm2 logs my-node-app # Uygulamanızın loglarını görmek için
4. Sistem Başlangıcında Otomatik Başlatma:
pm2‘nin sunucu yeniden başlatıldığında uygulamalarınızı otomatik olarak başlatmasını sağlamak için:
pm2 startup
# Yukarıdaki komut size bir komut verecektir, onu kopyalayıp çalıştırın.
# Örnek: 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
pm2 save # Mevcut pm2 süreçlerini kaydet
Bu adımlar, sunucu yeniden başlatıldığında my-node-app uygulamasının otomatik olarak pm2 tarafından başlatılmasını sağlayacaktır.
Güvenlik En İyi Uygulamaları
Uygulamanızın ve veritabanınızın güvenliğini sağlamak için aşağıdaki en iyi uygulamaları göz önünde bulundurun:
* Güçlü ve Benzersiz Parolalar: Tüm kullanıcılar ve veritabanı için karmaşık ve benzersiz parolalar kullanın.
* SSH Anahtar Tabanlı Kimlik Doğrulama: Parola tabanlı SSH girişini devre dışı bırakın ve yalnızca anahtarlarınızı kullanarak bağlanın.
* Güvenlik Duvarı (UFW): Yalnızca gerekli portlara (SSH, HTTP/S, uygulamanızın kullandığı port, MongoDB için yerel erişim) izin verin. Diğer tüm portları kapalı tutun.
* MongoDB Kimlik Doğrulaması: MongoDB’de kullanıcı tabanlı kimlik doğrulamasını etkinleştirin ve uygulama için ayrı, kısıtlı yetkilere sahip kullanıcılar oluşturun.
* MongoDB bindIp Ayarı: MongoDB’nin yalnızca yerel IP adresinden (127.0.0.1) veya Node.js uygulamanızın IP adresinden gelen bağlantıları kabul etmesini sağlayın.
* Ortam Değişkenleri: Hassas bilgileri (veritabanı bağlantı dizeleri, API anahtarları) .env dosyaları veya sunucu ortam değişkenleri aracılığıyla yönetin, asla kodunuza doğrudan yazmayın ve Git’e commit etmeyin.
* Düzenli Güncellemeler: İşletim sisteminizi, Node.js ve MongoDB’yi düzenli olarak güncelleyerek güvenlik açıklarını kapatın.
* Yedeklemeler: Veritabanınızın düzenli yedeklerini alın ve güvenli bir yerde saklayın.
* SSL/TLS: Uygulamanız HTTP trafiği sağlıyorsa, Let’s Encrypt gibi ücretsiz sertifikalarla SSL/TLS kullanarak trafiği şifreleyin. Bu genellikle bir ters proxy (Nginx veya Apache) aracılığıyla yapılır.
Sık Karşılaşılan Sorunlar ve Çözümleri
Kurulum ve bağlantı sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve olası çözümleri:
* MongoDB Bağlantı Hatası (Authentication Failed):
* Çözüm: Bağlantı dizinizdeki kullanıcı adı, parola, veritabanı adı ve authSource parametresinin doğru olduğundan emin olun. MongoDB’de kimlik doğrulamanın (authorization: enabled) etkin olduğundan ve uygulama kullanıcısının doğru yetkilerle oluşturulduğundan emin olun.
* MongoDB Bağlantı Hatası (Connection Refused):
* Çözüm: MongoDB servisinin çalıştığından emin olun (sudo systemctl status mongod). mongod.conf dosyasındaki bindIp ayarının 127.0.0.1 olduğundan veya Node.js uygulamanızın IP adresini içerdiğinden emin olun. Güvenlik duvarınızın (UFW) MongoDB portuna (27017) erişimi engellemediğinden emin olun. Eğer bindIp 127.0.0.1 ise, dışarıdan erişim zaten engellenmiştir ve bu doğru bir davranıştır.
* Node.js Uygulaması Başlamıyor veya Çöküyor:
* Çözüm: pm2 logs my-node-app komutuyla uygulama loglarını kontrol edin. Hata mesajları genellikle sorunun kaynağını (eksik bağımlılıklar, kod hataları, ortam değişkeni sorunları) gösterir. .env dosyasının doğru yerde ve doğru içerikle olduğundan emin olun.
* nvm Komutları Bulunamıyor:
* Çözüm: nvm kurulumundan sonra terminali kapatıp yeniden açın veya source ~/.bashrc (veya ~/.zshrc) komutunu çalıştırın.
* Uygulamaya Tarayıcıdan Erişilemiyor:
* Çözüm: Uygulamanızın doğru portta çalıştığından emin olun (pm2 list veya loglar). Güvenlik duvarınızın (UFW) uygulamanızın kullandığı porta (örn. 3000) izin verdiğinden emin olun.
* Eğer Nginx gibi bir ters proxy kullanıyorsanız, Nginx yapılandırmasının doğru olduğundan ve Node.js uygulamanıza yönlendirme yaptığından emin olun.
Sonuç
Bu makalede, Node.js uygulamanızı bir VPS üzerinde çalışan MongoDB veritabanına güvenli ve verimli bir şekilde bağlamak için gerekli tüm adımları detaylı bir şekilde inceledik. VPS kurulumundan başlayarak, MongoDB ve Node.js ortamlarının yapılandırılmasına, güvenlik önlemlerinin alınmasına ve uygulamanın dağıtımına kadar kapsamlı bir rehber sunduk.
Artık kendi Node.js uygulamanızı bir VPS üzerinde MongoDB ile çalışır hale getirecek bilgi ve araçlara sahipsiniz. Bu bilgi birikimi, sadece basit bir bağlantı kurmanın ötesinde, uygulamanızın performansını ve güvenliğini artırmak için sağlam bir temel oluşturacaktır. Unutmayın ki, sürekli öğrenme ve güvenlik en iyi uygulamalarını takip etme, başarılı bir geliştirme ve dağıtım sürecinin anahtarıdır.
Geliştirmelerinize devam ederken, MongoDB replika setleri ve sharding ile veritabanı ölçeklendirme, Nginx gibi bir ters proxy ile yük dengeleme ve SSL/TLS yapılandırması gibi konuları da araştırmanız, uygulamanızın daha sağlam ve kurumsal düzeyde olmasına yardımcı olacaktır. Başarılar dileriz!
