Eine Standard-PostgreSQL-Installation ist auf eine Workstation der 1990er Jahre abgestimmt. Auf einem 2-8 GB VPS ändern einige Einstellungen alles - hier ist die Kurzversion mit echten Zahlen.
apt update && apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"
Ubuntu liefert PostgreSQL 16 am 24.04. Diese Version ist modern genug für alles, was Sie wahrscheinlich ausführen werden.
sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'strong-password';
CREATE DATABASE appdb OWNER app;
SQL
psql "postgresql://app:strong-password@localhost/appdb" -c "SELECT 1;"
Verwenden Sie niemals den postgres superuser in einer Anwendung. Ein Nutzer pro App, eine Datenbank pro Projekt.
Edit /etc/postgresql/16/main/postgresql.conf und Werte basierend auf der Servergröße festlegen:
| Einstellung | 2 GB VPS | 4 GB VPS | 8 GB VPS |
|---|---|---|---|
| shared buffers | 512 MB | 1 GB | 2 GB |
| effective cache size | 1 GB | 2,5 GB | 5 GB |
| work mem | 16 MB | 32 MB | 48 MB |
| Maintenance work mem | 128 MB | 256 MB | 512 MB |
| max Verbindungen | 50 | 100 | 150 |
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
Wenn ihre app hunderte von verbindungen öffnet, setzen sie pgbouncer vor, anstatt max verbindungen anzuheben - jede verbindung kostet speicher.
cat > /usr/local/bin/pg-dump-all <<'EOF'
#!/bin/sh
set -e
DIR=/var/backups/postgres
mkdir -p "$DIR"
sudo -u postgres pg_dumpall --globals-only > "$DIR/globals.sql"
for db in $(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false"); do
sudo -u postgres pg_dump -Fc "$db" > "$DIR/$db.dump"
done
find "$DIR" -type f -mtime +7 -delete
EOF
chmod +x /usr/local/bin/pg-dump-all
Fügen Sie es zu cron mit crontab -e:
30 3 * * * /usr/local/bin/pg-dump-all
Dumps sind konsistente Snapshots; Dateikopien eines Live-Datenverzeichnisses sind es nicht. Dann verschiffen Sie die Deponien off-site - unsere Restic Guide deckt diesen Teil ab.
sudo -u postgres createdb appdb_restore
sudo -u postgres pg_restore -d appdb_restore /var/backups/postgres/appdb.dump
Besser nicht. Halten sie es auf localhost und lassen sie die app direkt mit ihr sprechen, oder verwenden sie einen z1z-tunnel. Wenn sie es freilegen müssen, lassen sie nur ihre ip in der firewall und benötigen sie z2z.
2 GB RAM sind für Entwicklung und kleine Apps geeignet, 4 GB sind für eine Produktionswebsite geeignet und 8 GB verarbeiten eine geschäftige Datenbank mit Caching. NVMe-Speicher sind hier wichtiger als zusätzliche Kerne.
Aktivieren Sie die Erweiterung pg stat statements und sortieren Sie nach mittlerer Zeit. Es zeigt normalerweise ein oder zwei fehlende Indizes, die den größten Teil der Last erklären.
Eine komfortable Produktionsdatenbank beginnt am Buran-2, €13/Monat.