PostgreSQL selbst ist mit einem Befehl installiert. Was schiefgeht, ist der Fernzugriff: Port 5432 wird für die Welt geöffnet, ein Passwort gesetzt, und dann wundert man sich, warum die Logs voller Anmeldeversuche sind. Diese Anleitung installiert Postgres unter Ubuntu 24.04, legt eine Datenbank an und zeigt zwei sichere Wege, sich von außen zu verbinden.
1. Installieren
apt update && apt install -y postgresql
systemctl status postgresql --no-pager
Unter Ubuntu 24.04 ist das PostgreSQL 16. Standardmäßig lauscht es nur auf localhost – lass es so, solange du keinen Grund hast.
2. Nutzer und Datenbank anlegen
sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL
Apps auf demselben Server verbinden sich mit postgresql://app:PASSWORD@localhost:5432/appdb.
3. Vom Laptop verbinden: SSH-Tunnel (empfohlen)
Nichts zu öffnen, nichts auf dem Server zu konfigurieren. Der Tunnel leitet einen lokalen Port über SSH weiter:
ssh -N -L 5433:localhost:5432 root@203.0.113.10
Bei einem NAT-Tarif ergänzt du deinen persönlichen SSH-Port aus dem Dashboard:
ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host
Solange der Tunnel läuft, richte deinen Datenbank-Client auf localhost:5433. SSH verschlüsselt alles, und Port 5432 bleibt fürs Internet geschlossen. GUI-Tools wie DBeaver und pgAdmin haben einen Reiter „SSH-Tunnel“, der dasselbe erledigt.
4. Direkter Zugriff für einen anderen Server (Allowlist)
Muss ein App-Server anderswo direkt zugreifen, erlaube nur dessen IP. Dafür braucht der Datenbankserver einen Tarif mit eigener IP, denn NAT-Tarife nehmen außer SSH keine eingehenden Verbindungen an.
In /etc/postgresql/16/main/postgresql.conf:
listen_addresses = '*'
Ans Ende von /etc/postgresql/16/main/pg_hba.conf:
hostssl appdb app 198.51.100.20/32 scram-sha-256
Öffne die Firewall für genau diese Adresse und starte neu:
ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql
hostssl erzwingt eine verschlüsselte Verbindung – das Ubuntu-Paket bringt ein selbstsigniertes Zertifikat mit, Clients sollten sich also mit sslmode=require verbinden.
5. Vernünftige erste Einstellungen
Für einen Server mit 2 GB RAM, in postgresql.conf:
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB
Nach der Änderung neu starten. Für die meisten kleinen Apps reicht das; feinjustiere, sobald du echte Abfragen siehst.
6. Backups
Ein nächtlicher Dump, eine Woche lang aufbewahrt:
mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF
-Fc erzeugt einen komprimierten Dump, den du mit pg_restore zurückspielst. Kopier Dumps auch vom Server weg; Managed Backups ergänzen tägliche Wiederherstellungspunkte der ganzen Maschine.
Kommentare
Noch keine Kommentare. Sei der Erste.