Schluss mit lokalen Datenbank-Installationen!
Wer kennt das nicht: Für das neue Node.js- oder Python-Projekt wird schnell eine relationale PostgreSQL-Datenbank benötigt. Der klassische Entwickler-Weg? Die Datenbank direkt nativ auf macOS oder Windows installieren. Das Resultat? Nach zwei Jahren lungern fünf verschiedene Datenbank-Versionen unkontrolliert als Hintergrunddienste auf dem System herum, verbrauchen massiv CPU-Ressourcen und verursachen fatale Port-Konflikte.
Die smarte, saubere Lösung für Webentwickler lautet: Isolierung durch Docker Compose.
In diesem praxiserprobten Guide zeige ich dir, wie du dir innerhalb von 3 Minuten eine extrem sichere, lokale Datenbank-Umgebung hochziehst – und sie am Ende deines Projekts spurlos wieder von deiner Festplatte entfernen kannst.
Vorbereitung: Isoliertes Projekt-Setup
Psychologische Sicherheit und ein sauberes File-Management beim Entwickeln beginnen mit einem aufgeräumten Dateisystem. Wir starten nicht blind auf dem Desktop, sondern isolieren unsere Datenbank-Konfiguration in einem brandneuen, absolut leeren Verzeichnis. So weißt du immer genau, wo welche Ressourcen liegen.
Öffne dein Terminal und führe diese grundlegenden Befehle aus:
mkdir pg-local-dev
cd pg-local-dev
Von nun an fügen wir Dateien nur noch in diesem Ordner hinzu!
Die perfekte Docker Compose Struktur
Um unsere Datenbankstruktur professionell aufzubauen (nach dem modernen "Infrastructure as Code" Prinzip), greifen wir auf eine einfache Konfigurationsdatei zurück. Wir integrieren zudem nicht nur den puren PostgreSQL Server, sondern als Bonus direkt das beliebte grafische Open-Source Management-Tool pgAdmin. Damit kannst du sofort bequem per Browser Tabellen bearbeiten und SQL Querys testen.
Erstelle innerhalb deines neuen Verzeichnisses diese Textdateien:
pg-local-dev/.env:
# Sichere Definition der Zugangsdaten als isolierte Variablen
POSTGRES_USER=admin
POSTGRES_PASSWORD=supergeheimespasswort
POSTGRES_DB=meine_test_db
[email protected]
PGADMIN_DEFAULT_PASSWORD=admin
pg-local-dev/package.json:
{
"dependencies": {
"express": "^4.18.2",
"pg": "^8.11.3"
}
}
pg-local-dev/server.js (Die Mini-API, die sich live mit der DB verbindet):
const express = require('express');
const { Pool } = require('pg');
const app = express();
const pool = new Pool({
// Hier nutzen wir den internen Docker-Servicenamen "db"
connectionString: 'postgres://admin:supergeheimespasswort@db:5432/meine_test_db'
});
app.get('/', async (req, res) => {
try {
const result = await pool.query('SELECT NOW() as aktuelle_zeit');
res.json({
status: 'Erfolg! Die Node.js API redet mit PostgreSQL!',
db_zeit: result.rows[0].aktuelle_zeit
});
} catch (err) {
res.status(500).json({ fehler: err.message });
}
});
app.listen(3000, () => console.log('API läuft auf Port 3000'));
pg-local-dev/docker-compose.yaml:
version: '3.8'
services:
db:
image: postgres:15-alpine
container_name: local_postgres_db
restart: unless-stopped
env_file:
- .env
ports:
- "5432:5432"
volumes:
# Speichert die physischen DB-Dateien auf dem Host, damit die Daten einen Container-Neustart überleben
- pg_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
container_name: local_pgadmin
restart: unless-stopped
env_file:
- .env
ports:
- "5050:80"
depends_on:
- db
# Unsere Node.js App als Konsument
api:
image: node:18-alpine
container_name: local_node_api
working_dir: /app
volumes:
- ./server.js:/app/server.js
- ./package.json:/app/package.json
command: sh -c "npm install && node server.js"
ports:
- "3000:3000"
depends_on:
- db
volumes:
pg_data:
Startschuss: Umgebung sicher hochfahren
Da wir alles logisch in einer docker-compose.yaml modelliert haben, entfällt das mühsame, fehleranfällige Abtippen von endlosen docker run-Ketten inkl. manuellen Netzwerkbrücken. Docker sorgt nun automatisch dafür, dass Node.js und PostgreSQL im selben Netzwerk miteinander kommunizieren können.
Befehle deinem System, deine gesamte Datenbank-Infrastruktur lautlos im Hintergrund aufzubauen:
docker compose up -d --build
⚠️ 📸 SCREENSHOT ANFRAGE: Hier einen Screenshot vom Terminal einfügen, der den erfolgreichen Start der Container (local_postgres_db, local_pgadmin, local_node_api) zeigt.
Die Datenbank erfolgreich nutzen
- Die Node.js API testen: Ruf einfach http://localhost:3000 in deinem Browser auf. Du siehst sofort die JSON-Antwort, dass dein Datenbank-Query (aktuelle Server-Zeit) erfolgreich war!
- Datenbank-Management: Wenn du dir schnell einen grafischen Überblick über deine Tabellen verschaffen oder Daten bearbeiten willst, wechsle einfach in deinen Webbrowser auf: 👉 http://localhost:5050
Logge dich dort mit der PGADMIN_DEFAULT_EMAIL und dem Passwort aus der .env Datei ein. Beim Einrichten des Servers in pgAdmin gibst du als Hostname deiner neuen Datenbank dann nicht localhost, sondern intern ganz einfach db (der Service-Name aus unserer YAML-Datei) an.
⚠️ 📸 SCREENSHOT ANFRAGE: Hier einen Screenshot von pgAdmin (Browser) einfügen, der die erfolgreiche Verbindung zur PostgreSQL-Datenbank zeigt.
Alternativ kannst du dich aus Visual Studio Code verknüpfen (z.B. mit der Erweiterung SQLTools). Gib dort einfach Server localhost und Port 5432 ein, da wir den Port nach außen freigegeben haben.
Fazit
Mit der Anlage von lediglich zwei simplen Dateien (.env und docker-compose.yaml) innerhalb deines isolierten Projektordners hast du dir das fehlerbehaftete, manuelle Installieren einer nativen Datenbank für alle Ewigkeit erspart. Du kannst diese Struktur nun für zukünftige Setups sofort kopieren, um für jedes deiner IT-Projekte in Sekunden eine komplett frische, isolierte Instanz bereitzustellen!
Login