pgAdmin 4

pgAdmin 4 to oficjalny webowy klient do PostgreSQL.

Architektura

graph LR
    I[Internet<br/>:443] --> T[Traefik]
    T -->|authelia-auth| P[pgAdmin 4<br/>:80]
    P -.->|PostgreSQL<br/>connection| DB1[(plausible_db)]
    P -.-> DB2[(inna baza)]

pgAdmin ma własny ekran logowania, ale authelia-auth przed nim daje drugą warstwę i SSO z resztą homelaba. Dlatego dalej wyłączam SERVER_MODE i hasło master pgAdmina — i tak jestem już uwierzytelniony zanim się tam dostanę.

Konfiguracja

docker-compose.yml

services:
  pgadmin4:
    image: dpage/pgadmin4
    container_name: pgadmin4
    restart: unless-stopped
    env_file:
      - .env
    environment:
      PGADMIN_DEFAULT_EMAIL: "robertolechowski@gmail.com"
      PGADMIN_CONFIG_SERVER_MODE: "False"
      PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
    volumes:
      - ./data:/var/lib/pgadmin
    networks: [traefik_network]
    labels:
      com.centurylinklabs.watchtower.enable: true

networks:
  traefik_network:
    external: true

.env

PGADMIN_DEFAULT_PASSWORD=<haslo>

Najważniejsze zmienne środowiskowe:

Parametry konfiguracyjne kontenera pgadmin4.
ParametrWartośćOpis
PGADMIN_DEFAULT_EMAILrobertolechowski@gmail.comLogin konta inicjalizowanego przy pierwszym starcie.
PGADMIN_DEFAULT_PASSWORD<haslo>Hasło konta początkowego.
PGADMIN_CONFIG_SERVER_MODEFalseTryb desktopowy zamiast wieloużytkownikowego. Jeden user, brak panelu administracyjnego, prostsza obsługa.
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIREDFalseWyłącza dodatkowe hasło szyfrujące zapisane hasła do baz. Za Authelia to nadmiarowa warstwa.

Struktura katalogów

pgadmin4/
├── docker-compose.yml
├── .env                # PGADMIN_DEFAULT_EMAIL/PASSWORD (gitignore)
├── .gitignore
└── data/               # baza pgAdmina, zapisane serwery (gitignore)

Router Traefik

Konfiguracja w pliku dynamic/pgadmin4.yaml na hoście z Traefikiem:

http:
  routers:
    dbadmin:
      rule: "Host(`dbadmin.robertolechowski.com`)"
      entryPoints: [websecure]
      middlewares: [authelia-auth]
      tls:
        certresolver: letsencrypt
      service: db_admin

  services:
    db_admin:
      loadBalancer:
        servers:
          - url: "http://pgadmin4:80"