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ż
- n8n na Proxmox LXC — workflow automation podpięty pod NocoDB