Ana içeriğe geç

Docker Compose ile Node.js ve MongoDB Geliştirme Ortamı Kurulumu

Bu Rehberde Ne Öğreneceksiniz?

Bu rehber, Node.js ve MongoDB kullanan projeler için Docker tabanlı bir geliştirme ortamı kurmayı öğretir.
Docker Compose ile çoklu konteyner yapısı oluşturur, kod senkronizasyonu ve veri kalıcılığı sağlarsınız.
Amaç, tutarlı ve taşınabilir bir geliştirme süreci oluşturmaktır.


🧠 Teknik Özet

Ana konu: Node.js uygulamasını MongoDB ile Docker Compose kullanarak konteynerize etme
Amaç: Geliştirme ortamını izole, sürdürülebilir ve hızlı hale getirmek
Adımlar: Kod refaktörü, ortam değişkenleri, servis tanımı, veri kalıcılığı, test


1. Projeyi Hazırlama ve Bağımlılıkları Güncelleme

Geliştirme sırasında kod değişikliklerini otomatik algılamak için nodemon kullanılır.

git clone https://github.com/do-community/nodejs-mongo-mongoose.git node_project
cd node_project
  • Bu komut, örnek Node.js projesini yerel ortama indirir.

package.json dosyasına aşağıdaki bağımlılığı ekleyin:


"devDependencies": {
"nodemon": "^1.18.10"
}
  • Bu ayar, kod değişikliklerinde uygulamanın yeniden başlamasını sağlar.

2. Uygulamayı Konteyner Uyumlu Hale Getirme

  1. Sabit ayarlar yerine ortam değişkenleri kullanılır.

  2. Port Yapılandırması


const port = process.env.PORT || 8080;
  • Bu yapı, farklı ortamlarda port değişimini kolaylaştırır.

Veritabanı Bilgileri

  1. Veritabanı kimlik bilgileri koddan çıkarılır ve .env dosyasına taşınır.

MONGO_USERNAME=rabisu_user
MONGO_PASSWORD=guclu_sifre
MONGO_PORT=27017
MONGO_DB=kopekbaligi_db
  • Bu dosya hassas bilgileri güvenli şekilde yönetir.

3. Veritabanı Bağlantısını Dayanıklı Hale Getirme

  1. Konteynerler farklı hızlarda başlatılabilir.
  • Bağlantı kopmalarını önlemek için yeniden deneme mekanizması eklenir.

const options = {
useNewUrlParser: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 500,
connectTimeoutMS: 10000,
};
  • Bu ayarlar MongoDB bağlantısını daha stabil yapar.

4. Docker Compose ile Servisleri Tanımlama

  1. Docker Compose, tüm servisleri tek dosyadan yönetmenizi sağlar.

Bekleme Betiği (wait-for)

  1. Uygulamanın, veritabanı hazır olmadan başlamasını engeller.

docker-compose.yml


version: '3'
services:
nodejs:
build: .
volumes:
- .:/home/node/app
- node_modules:/home/node/app/node_modules
ports:
- "80:8080"
command: ./wait-for.sh db:27017 -- nodemon app.js

db:
image: mongo:4.1.8
volumes:
- dbdata:/data/db
  • Bu yapı, Node.js ve MongoDB servislerini birlikte orkestre eder.

5. Uygulamayı Başlatma ve Test Etme


docker-compose up -d
  • Bu komut tüm servisleri arka planda başlatır.

Tarayıcıdan uygulamayı kontrol edin:

http://sunucu_ip_adresiniz


docker-compose down
  • Bu komut konteynerleri siler, ancak veriler kalıcı olarak korunur.

❓ Sıkça Sorulan Sorular (SSS)

1. Kod değişiklikleri neden anında yansıyor? Bind mount ve nodemon birlikte çalışır.

2. .env dosyası neden imaja eklenmez? Güvenlik için hassas bilgiler imaj içinde tutulmaz.

3. Veriler konteyner silinince kaybolur mu? Hayır, Docker volume kullanıldığı için kalıcıdır.


🎯 Sonuç

Docker Compose, geliştirme ortamını standartlaştırır. Node.js ve MongoDB projeleri daha yönetilebilir hale gelir. Aynı yapı üretim ortamına kolayca taşınabilir.

Node.js projelerinizi izole, güvenli ve ölçeklenebilir bir altyapıda geliştirmek için Rabisu Bulut platformunu hemen deneyebilirsiniz.