NocoDB na Proxmox LXC — instalacja, reverse proxy i SSO przez Authentik

NocoDB na Proxmox LXC — instalacja, reverse proxy i SSO przez Authentik

Potrzebowałem wygodnego miejsca do przechowywania ustrukturyzowanych danych w homelabcie — streszczenia filmów YouTube, listy urządzeń, notatki do kursów. NocoDB daje Airtable-like interfejs, auto-generowane REST API i integrację z n8n przez HTTP Request node. Całość można postawić w jeden wieczór.

Wymagania

  • System: Proxmox 8.x, kontener Debian 13 (Trixie) LXC
  • RAM: 2 GB minimum
  • Dysk: 15 GB — koniecznie na SSD (PostgreSQL przy bazach danych jest I/O-intensive)
  • Nesting: włączone w ustawieniach LXC (wymagane dla Dockera)
  • Zależności: Docker, Docker Compose plugin
  • Opcjonalnie: Nginx Proxy Manager jako reverse proxy, Authentik do SSO

1. Przygotowanie LXC w Proxmox

Utwórz kontener z następującymi parametrami:

Parametr Wartość
OS Debian 13 (Trixie)
CPU 2 cores
RAM 2 048 MB
Dysk 15 GB (SSD)
VLAN według własnej sieci
Nesting ✅ włączone

Nesting jest kluczowe — bez niego Docker nie uruchomi kontenerów wewnątrz LXC.


2. Instalacja Dockera

Zaloguj się do kontenera i zaktualizuj system:

apt update && apt upgrade -y

Dodaj oficjalne repozytorium Docker:

apt install -y ca-certificates curl gnupg

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Zweryfikuj instalację:

docker --version && docker compose version

3. Konfiguracja NocoDB

Utwórz katalog roboczy:

mkdir -p /opt/nocodb && cd /opt/nocodb

Generowanie haseł

Wygeneruj losowe hasło do PostgreSQL i sekret JWT przed tworzeniem pliku compose:

echo "PG_PASS=$(openssl rand -base64 16)"
echo "JWT_SECRET=$(openssl rand -hex 32)"

Zapisz obie wartości — będą potrzebne w kolejnym kroku.

Plik docker-compose.yml

nano /opt/nocodb/docker-compose.yml
services:
  nocodb:
    image: nocodb/nocodb:latest
    ports:
      - "8080:8080"
    environment:
      - NC_DB=pg://postgres:5432?u=nocodb&p=<pg_pass>&d=nocodb
      - NC_AUTH_JWT_SECRET=<jwt_secret>
    depends_on:
      - postgres
    restart: unless-stopped
    volumes:
      - nocodb-data:/usr/app/data

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: <pg_pass>
      POSTGRES_DB: nocodb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  nocodb-data:
  postgres-data:

Zastąp <pg_pass> i <jwt_secret> wygenerowanymi wartościami.

Uruchomienie

docker compose up -d
docker compose ps

Po chwili oba kontenery powinny mieć status Up:
- nocodb-nocodb-1
- nocodb-postgres-1

⚠️ Uwaga: NocoDB startuje wolniej niż postgres — poczekaj ~30 sekund przed sprawdzeniem interfejsu.

4. Konfiguracja reverse proxy (NPM)

Jeśli używasz Nginx Proxy Manager, utwórz nowy Proxy Host:

Pole Wartość
Domain Names db.TWOJA_DOMENA
Scheme http
Forward Hostname TWOJE_IP_LXC
Forward Port 8080
Websockets Support
SSL Let's Encrypt, Force SSL ✅

Dodaj wpis DNS wskazujący na IP serwera NPM — w AdGuard Home lub innym resolverze lokalnym.

💡 Tip: Websockets są wymagane do poprawnego działania interfejsu — bez nich odświeżanie widoków może się zawieszać.

5. Pierwsze uruchomienie

Wejdź na https://db.TWOJA_DOMENA i utwórz konto administratora. Przy pierwszym logowaniu NocoDB pyta o email i hasło — to będzie konto główne.


6. Watchtower — automatyczne aktualizacje

Watchtower sprawdza co noc nowe wersje obrazów i aktualizuje kontenery bez przestojów.

nano /opt/nocodb/docker-compose.watchtower.yml
services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_SCHEDULE=0 0 3 * * *
    restart: unless-stopped
docker compose -f docker-compose.watchtower.yml up -d

Harmonogram 0 0 3 * * * to codziennie o 3:00 — zmień jeśli wolisz inną godzinę.


7. Weryfikacja

# Status kontenerów
cd /opt/nocodb && docker compose ps

# Logi NocoDB
docker compose logs nocodb --tail=30

# Logi PostgreSQL
docker compose logs postgres --tail=20

Interfejs powinien być dostępny pod skonfigurowaną domeną z ważnym certyfikatem SSL.


Troubleshooting

Problem: Kontener nocodb-nocodb-1 restartuje się w pętli
Przyczyna: Błędne hasło PostgreSQL — wartości <pg_pass> w sekcji nocodb i postgres muszą być identyczne
Rozwiązanie: Sprawdź docker compose logs nocodb --tail=50, popraw docker-compose.yml, uruchom docker compose down && docker compose up -d


Problem: Interfejs ładuje się, ale widoki się zawieszają lub odświeżają w nieskończoność
Przyczyna: Brak obsługi WebSocket w reverse proxy
Rozwiązanie: W NPM włącz opcję Websockets Support dla danego hosta i zrestartuj konfigurację nginx.


Podsumowanie

NocoDB działa na LXC z Dockerem, PostgreSQL jako backend i Let's Encrypt na SSL. Watchtower aktualizuje obrazy automatycznie co noc. Opcjonalna integracja z Authentik pozwala na jedno konto do wszystkich aplikacji w homelabcie.

Zobacz też