Problem mit PostrgreSQL auf Raspberry PI
Eigentlich wollte ich eine menge Programme auf einem Raspberry Pi installieren und das am besten über eine Docker Compose Datei einrichten. Aber bevor ich eine Finale Docker Compose Datei erstellen kann, muss ich mich mehr mit den Ziel Programmen auseinandere setzen.
Zugegeben kann eine Einrichtung der Anwendung auch über KI Chats abgefragt werden und gewisser maßen ließe sich mit dem richtigen Prompt, das Lernen neuer Technologien neu gestalten. Also Warum noch ein Blog schreiben? KI Chat geben oft nur das Ergebnis, was oft in der Masse genutzt wird und wenn eine Lösung Obsolete ist, hatte ich oft die alten Lösungen erhalten, die selbstverständlich nicht funktionierten. Dem KI Chat fehlt noch die Kreative Lösungen zu erarbeiten. Egal wie gut oder Schlecht der geschriebene Prompt ist, man tritt an diese Grenze und aus der KI Hilfe wird schnell zur Bremse.
Setup
- Raspberry Pi 4 mit 4GB Arbeitsspeicher
- RaspbianOS
- Docker for Linux an Arm
- Postgres Datenbank
Anforderung
Die Datenbank Postgres soll auf dem Raspberry Pi installiert werden und über das Netzwerk erreichbar sein. Zudem dürfen die Daten nicht weg sein, nach einem Neustart durch updates oder Stromausfall des Raspberry Pi. Weil später noch weiterere Programme auf dem Raspberry Pi ausgeführt werden, darf die Datenbank maximal 30% der CPU Leistung beanspruchen.
Zusatz ist mein Problem, warum ich wieder ein Blogpost dafür schreibe. Daher die Lösung des Problemfalls beschreiben.
Vorbereitung
Die Einrichtung der Postgres Datenbank in Docker kann komplett in eine Docker Compose festgehalten werden. Einzig und alleine ist sich mit Docker Compose auseinander zusetzen und anschließend die Inhalte zu kommentieren.
Fangen wir an, einen Ordner anzulegen, in dem die Docker Compose für Postgres abgelegt werden.
sudo mkdir SetupPostgresql
Anschließend in den Ordner wechseln
cd SetupPostrgresql
Und dann mit der Anwendung Nano erstellen wir an eine neue Docker Compose Datei.
sudo nano docker-compose.yaml
Mit dem bestätigen des Commands, wechselt die Ansicht in den Textbearbeitungswerkzeug Nano.
Den Inhalt füllen wir nun mit dem Typischen YAML Code. Hier nicht vergessem den Zugang mit Benutzername und Passwort festzulegen.
version: '3.8'
services:
postgres:
image: postgres:latest # installiert die aktuell verfügbare version.
container_name: postgres_rpi
environment:
POSTGRES_USER: dein_benutzername # muss eingerichtet werden
POSTGRES_PASSWORD: dein_sicheres_passwort # muss eingerichtet werden
POSTGRES_DB: deine_datenbank
volumes:
- postgres_data:/var/lib/postgresql/data # stellt sich, dass die Daten bleiben
ports:
- "5432:5432" # Der Port, auf die Datenbank erreichbar ist.
deploy:
resources:
limits:
cpus: '0.3' # Maximale CPU-Auslastung auf 30% begrenzen
restart: unless-stopped # Verfügbarkeit nach dem neustart.
volumes:
postgres_data: # stellt sicher das die Daten bleiben.
Nach dem Einfügen wird mit dem Befehl STRG + o mit anschließenden ENTER gespeichert und mit STRG + x wird die Anwendung Nano verlassen und wechselt wieder in die Terminal Ansicht.
Nun kann mit der fertigen Datei die Installation durchgeführt werden, um den Container zu starten.
sudo docker-compose up -dFalls folgende Meldung kommt, dann das binde Strich weg lassen.
Wenn die Ausführung funktioniert hat, dann sollte folgendes als Ergebniss ausgegeben werden.
Zugriff prüfen
Zunächst kann geprüft werden, ob der Docker Container wirklich ausgeführt wird.
sudo docker psWenn im folgenden Bild der Status mit "Restarting (1) ..." steht, dann funktioniert der Container nicht und startet in diesen Fall immer wieder neu.
Fehlerursache
Um nach dem Problem zu schauen, hilft der Blick in den Docker Logs. Im Command ist darauf zu achten, den Log auf einen Docker Container zu filtern.
sudo docker logs postgres_rpiWie bereits in meinem Intro Bild, erschien bei mir der Fehler, dass mit PostgreSQL Version 18 der Pfad zum Persistieren sich geändert hat.
Klar ist, dass der Pfad zu ändern ist. Also kehren wie in die Docker-Compose Datei zurück.
sudo nano docker-compose.yamlFolgende Anpassung bzw. Ergänzung sollte gesetzt werden vor dem Eintrag "volumes".
# WICHTIGE Anpassung und hilft auch bisherige Pfade zu verwenden.
PGDATA: /var/lib/posgresql/dataWeil mir eine Beschreibung zu lang werden würde, habe ich ein Bild vom YAML angelegt und die Stelle Markiert, das einfach Zeigt, wo der Eintrag gesetzt werden soll.
Anschließend Speichern mit STRG + o und mit Enter bestätigen. Mit STRG + x die Anwendung Nano beenden.
Probieren wir die Änderung aus.
sudo docker compose up -dFolgendes Ergebnis kam in meinem Fall. Am Status ist zu sehen, dass nun die Datenbank funktioniert.
Zugriff von einem anderen System prüfen
Für den Zugriff verwende ich von Jetbrains die Anwendung DataGrip, das für verschiedene Datenbanken verwendet werden kann. Für das einrichten einer neuen Datenbank muss Benutzername und Passwort gesetzt sein, sowie die IP Adresse und Port.
Mit "Test Connection" kann dann geprüft werden, ob die Verbindung zur Datenbank funktioniert.
Hat das geklapp, kann nun auf die Datenbank "developer_data" auf dem Raspberry Pi zu gegriffen werden.
Abschließend
Vielleicht suche ich einfach nach den falschen Begriffen. Mit Google habe ich die Behebung der Fehlerursache nicht gefunden und der lange Eintrag in Github, war für mich mühselig. Besonders, wenn man zu Müde ist. Hilfreich war das Tool Notebook LM in dem man den Link eingibt und dann mit der KI Chat fragen stellen kann. So kam ich relativ schnell auf eine Lösung, wofür ich sonst deutlich länger gebraucht hatte.
Am Anfang hatte ich bereits schon einen KI Chat probiert und festgestellt, dass das Thema wohl zu neu ist oder das es eins von den Dingen ist, wo einem der KI Chat hinhält, um möglichst viele Tokens zu verbrauchen. Das ist mir schon öfter aufgefallen, dass die Lösung schon nach zwei drei Fragen hätte erledigt sein könne. Daher mein anderer Ansatz mit Notebook LM.
Noch was. Ich hätte das Problem weg lassen können und gleich den Lösungsansatz schreiben können. Den YAML Code habe ich über den KI Chat generiert und erkannte gleich ein Problem einer Hinhalte Taktik von KI Chats oder vielleicht doch "Zufall", dass ich schon letztes jahr festgestellt habe.
Quellen:
https://github.com/docker-library/postgres/pull/1259
Kommentare