Tutorials  /  Container & Cloud

Docker und Node.js: Vereinfachte Entwicklung mit MongoDB

Ccentron Redaktion · Oktober 2024 ·4 Min. Lesezeit ·Container & Cloud, Tutorial

Die Entwicklung und Bereitstellung von Anwendungen kann mit Docker stark vereinfacht werden. Docker-Container bieten Entwicklern mehrere Vorteile:

  • Konsistente Umgebungen: Sie können die gewünschten Sprachen und Abhängigkeiten auswählen, ohne sich über Systemkonflikte Gedanken machen zu müssen.
  • Isolierte Umgebungen: Dies erleichtert die Fehlersuche und das Onboarding neuer Teammitglieder.
  • Portabilität: Der Code kann verpackt und einfach weitergegeben werden.

In diesem Artikel zeige ich Ihnen, wie Sie eine Entwicklungsumgebung für eine Node.js-Anwendung mit Docker einrichten. Wir werden zwei Container erstellen: einen für die Node.js-Anwendung und einen weiteren für die MongoDB-Datenbank. Unter anderem werden Sie:

  • Den Anwendungscode mit dem Code im Container synchronisieren, um Änderungen während der Entwicklung zu erleichtern.
  • Sicherstellen, dass Änderungen ohne Neustart der Anwendung übernommen werden.
  • Eine passwortgeschützte, persistente Datenbank erstellen.

Am Ende dieses Tutorials wird eine Haifisch-Informationsanwendung in Docker-Containern ausgeführt.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Entwicklungsserver mit Ubuntu 18.04 und einem nicht-root Benutzer mit Sudo-Rechten.
  • Docker und Docker Compose installiert.
K8

Passende Infrastruktur bei centron

Vom Container zum Cluster: Managed Kubernetes mit cStack gibt es ab 29,99 € im Monat – Control Plane, AutoScaler und Traffic inklusive. Managed Kubernetes ansehen →

Schritt 1 – Projekt klonen und Abhängigkeiten anpassen

Der erste Schritt ist das Klonen des Beispielcodes und das Anpassen der package.json-Datei. Wir fügen nodemon zu den Entwicklungsabhängigkeiten hinzu, sodass die Anwendung automatisch neu startet, wenn Sie Änderungen vornehmen.

Zuerst klonen Sie das Repository:

Konsole
git clone https://github.com/do-community/nodejs-mongo-mongoose.git node_project
cd node_project

Öffnen Sie die package.json-Datei:

Code
nano package.json

Fügen Sie nodemon unter den Abhängigkeiten hinzu:

Code
"devDependencies": {
  "nodemon": "^1.18.10"
}

Speichern und schließen Sie die Datei.

Schritt 2 – Anwendung für Container anpassen

Nun passen wir den Code so an, dass er besser mit Containern funktioniert. Wir nutzen die process.env-Eigenschaft von Node.js, um dynamisch mit Umgebungsvariablen zu arbeiten.

Öffnen Sie app.js und ändern Sie den Port wie folgt:

JavaScript
const port = process.env.PORT || 8080;
app.listen(port, function () {
  console.log(`App hört auf Port ${port}`);
});

Ändern Sie auch die Datenbankverbindung in db.js, um sensible Informationen nicht im Code zu speichern:

Code
const {
  MONGO_USERNAME,
  MONGO_PASSWORD,
  MONGO_HOSTNAME,
  MONGO_PORT,
  MONGO_DB
} = process.env;

Erstellen Sie eine .env-Datei mit den entsprechenden Umgebungsvariablen:

Code
nano .env

Fügen Sie die folgenden Zeilen hinzu (mit Ihren eigenen Werten):

Code
MONGO_USERNAME=benutzer
MONGO_PASSWORD=ihr_passwort
MONGO_PORT=27017
MONGO_DB=sharkinfo

Stellen Sie sicher, dass .env sowohl in .gitignore als auch in .dockerignore enthalten ist, um zu verhindern, dass sensible Daten hochgeladen werden.

Schritt 3 – Verbindungseinstellungen für die Datenbank anpassen

Fügen Sie zusätzliche Optionen in db.js hinzu, um Verbindungsabbrüche zu handhaben:

JavaScript
const options = {
  useNewUrlParser: true,
  reconnectTries: Number.MAX_VALUE,
  reconnectInterval: 500,
  connectTimeoutMS: 10000,
};
mongoose.connect(url, options).then(() => {
  console.log('MongoDB ist verbunden');
}).catch(err => {
  console.log(err);
});

Schritt 4 – Dienste mit Docker Compose definieren

Nun erstellen wir die docker-compose.yml-Datei, um die Dienste zu definieren. Der erste Service ist für die Node.js-Anwendung:

YAML
version: '3'

services:
  nodejs:
    build:
      context: .
      dockerfile: Dockerfile
    image: nodejs
    container_name: nodejs
    restart: unless-stopped
    env_file: .env
    environment:
      - MONGO_USERNAME=$MONGO_USERNAME
      - MONGO_PASSWORD=$MONGO_PASSWORD
      - MONGO_HOSTNAME=db
      - MONGO_PORT=$MONGO_PORT
      - MONGO_DB=$MONGO_DB
    ports:
      - "80:8080"
    volumes:
      - .:/home/node/app
      - node_modules:/home/node/app/node_modules
    networks:
      - app-network
    command: ./wait-for.sh db:27017 -- /home/node/app/node_modules/.bin/nodemon app.js

Der zweite Service ist für die MongoDB-Datenbank:

YAML
db:
  image: mongo:4.1.8-xenial
  container_name: db
  restart: unless-stopped
  env_file: .env
  environment:
    - MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
    - MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
  volumes:
    - dbdata:/data/db
  networks:
    - app-network

Zum Schluss fügen Sie die Netzwerk- und Volumendefinitionen hinzu:

YAML
networks:
  app-network:
    driver: bridge

volumes:
  dbdata:
  node_modules:

Schritt 5 – Anwendung testen

Starten Sie die Anwendung mit:

Konsole
docker-compose up -d

Überprüfen Sie die Logs mit:

Konsole
docker-compose logs

Wenn alles korrekt läuft, sollten Sie die Anwendung unter der URL Ihres Servers aufrufen können.

Fazit

Mit dieser Anleitung haben Sie gelernt, wie Sie eine Node.js-Anwendung mit MongoDB in einer Docker-Umgebung entwickeln und betreiben können. Docker erleichtert es Ihnen, Ihre Umgebung zu isolieren, Ihre Daten zu sichern und Ihre Anwendungen nahtlos zu teilen.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Container & Cloud
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren