Skip to content

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 postgres oraz 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.

Tworzenie sieci Docker

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:

app.env
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:

compose.yaml
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 Docker internal
  • Inne kontenery powinny łączyć się z bazą po nazwie hosta postgres i porcie 5432
  • Hasło użytkownika postgres należy backupować razem z plikiem app.env
  • Dane bazy należy backupować przez dumpy lub snapshoty katalogu /srv/docker/data/postgres