Instalacja PostgreSQL
Instalacja
PostgreSQL uruchamiany jest w kontenerze Docker jako usługa bazodanowa dla innych aplikacji (np. n8n, Baserow).
Założenia konfiguracyjne:
- Plik Compose przechowujemy w
/srv/docker/compose/postgres - Dane bazy przechowujemy w
/srv/docker/data/postgres - Logi PostgreSQL są dostępne przez
docker logs(nie tworzymy katalogu/srv/docker/logs) - Używamy obrazu
postgres:17-bookworm(stabilna, przewidywalna wersja) - Konfiguracja tworzy domyślnego użytkownika
postgresoraz bazępostgres(definiujemy tylko hasło)
Dostęp do sieci Docker
Wymagany dostęp do sieci internal
Aby komunikować się z innymi kontenerami, aplikacja wymaga dostępu do wewnętrznej sieci Docker internal.
Sieć internal to sieć wewnętrzna, która służy do komunikacji PostgreSQL z innymi kontenerami (np. n8n, Baserow).
Tworzenie katalogów
Tworzymy foldery aplikacji:
sudo mkdir -p /srv/docker/compose/postgres
sudo mkdir -p /srv/docker/data/postgres
sudo mkdir -p /srv/docker/secrets/postgres
Nadajemy właściciela katalogu danych zgodnego z UID/GID kontenera PostgreSQL:
sudo chown -R 999:999 /srv/docker/data/postgres
Tworzenie pliku app.env
Tworzymy i edytujemy plik app.env w katalogu secrets aplikacji:
cd /srv/docker/secrets/postgres
sudo micro /srv/docker/secrets/postgres/app.env
W pliku umieszczamy:
POSTGRES_PASSWORD=ustaw_mocne_haslo
TZ=Europe/Warsaw
Zapisujemy plik i wychodzimy z edytora.
Konfiguracja Docker Compose
Tworzymy i edytujemy plik compose.yaml w katalogu compose aplikacji:
cd /srv/docker/compose/postgres
sudo micro compose.yaml
W pliku umieszczamy:
services:
postgres:
image: postgres:17-bookworm
container_name: postgres
restart: unless-stopped
env_file:
- /srv/docker/secrets/postgres/app.env
ports:
- "127.0.0.1:5432:5432"
volumes:
- /srv/docker/data/postgres:/var/lib/postgresql/data
- /srv/backups/db-dumps/postgres:/backups
networks:
- internal
networks:
internal:
external: true
Zapisujemy plik i wychodzimy z edytora.
Uruchomienie kontenera
Uruchamiamy PostgreSQL:
docker compose up -d
Sprawdzamy, czy kontener działa:
docker ps | grep postgres
Test działania
Sprawdzamy logi startowe:
docker logs --tail 200 postgres
Sprawdzamy, czy port nasłuchuje tylko na localhost:
sudo ss -tulpn | grep 5432
Podgląd logów
Podglądamy logi PostgreSQL:
docker logs -f postgres
Wejście do bazy
Uruchamiamy klienta psql w kontenerze (domyślny użytkownik i baza):
docker exec -it postgres psql -U postgres
Wychodzimy CTRL + D lub komendą:
\q
Uwagi utrzymaniowe
- PostgreSQL jest dostępny lokalnie na hoście (
127.0.0.1) oraz w sieci Dockerinternal - Inne kontenery powinny łączyć się z bazą po nazwie hosta
postgresi porcie5432 - Hasło użytkownika
postgresnależy backupować razem z plikiemapp.env - Dane bazy należy backupować przez dumpy lub snapshoty katalogu
/srv/docker/data/postgres