it:server:nextcloud

Toto je starší verze dokumentu!


Nextcloud

Při instalaci Nextcloudu v Dockeru jsem se rozhodl zdokumentovat postup a zároveň sdílet zkušenosti s problémy, na které jsem narazil. Použití Dockeru je často výhodné pro snadnou správu kontejnerů, ale i zde je potřeba věnovat pozornost několika detailům.

Během používání Nextcloudu jsem narazil na problém s nezobrazováním náhledů videí. Po krátkém zkoumání jsem zjistil, že je potřeba doinstalovat nástroj ffmpeg do Docker kontejneru, aby Nextcloud mohl generovat náhledy videí.

Níže je uveden obsah mého Dockerfile, který přidává podporu pro ffmpeg a kvůli jinému pluginu rovnou exiftool:

# Vyjdeme z oficiálního obrazu Nextcloud
FROM nextcloud:apache
 
# Přepneme na uživatele root pro instalaci balíčků
USER root
 
# Nainstalujeme ffmpeg a exiftool
RUN apt-get update && apt-get install --no-install-recommends -y ffmpeg libimage-exiftool-perl && apt-get clean

Tento Dockerfile zajišťuje:

  • Instalaci ffmpeg, který je nezbytný pro generování náhledů videí.
  • Instalaci ExifTool, který může být užitečný pro manipulaci s EXIF daty.

Kromě instalace ffmpeg bylo nutné upravit soubor `config.php` v konfiguraci Nextcloudu. Přidal jsem následující nastavení (dle zdroje):

'enable_previews' => true,
'enabledPreviewProviders' =>
array (
  0 => 'OC\\Preview\\TXT',
  1 => 'OC\\Preview\\MarkDown',
  2 => 'OC\\Preview\\OpenDocument',
  3 => 'OC\\Preview\\PDF',
  4 => 'OC\\Preview\\MSOffice2003',
  5 => 'OC\\Preview\\MSOfficeDoc',
  6 => 'OC\\Preview\\Image',
  7 => 'OC\\Preview\\Photoshop',
  8 => 'OC\\Preview\\TIFF',
  9 => 'OC\\Preview\\SVG',
  10 => 'OC\\Preview\\Font',
  11 => 'OC\\Preview\\MP3',
  12 => 'OC\\Preview\\Movie',
  13 => 'OC\\Preview\\MKV',
  14 => 'OC\\Preview\\MP4',
  15 => 'OC\\Preview\\AVI',
),

Po těchto úpravách začaly náhledy videí fungovat, avšak přehrávání videí přímo v prohlížeči stále nefungovalo.

Připojil jsem se do Docker kontejneru Nextcloudu a spustil příkaz pro analýzu videa:

docker exec -it nextcloud bash
ffmpeg -i /path/to/PXL_20241104_172349059.mp4

Z výstupu jsem zjistil, že formát videa je následující:

Stream #0:2[0x3](eng): Video: hevc (Main) (hvc1 / 0x31637668), yuvj420p(pc, bt709), 1920x1080, 19807 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 90k tbn (default)

Formát videa je HEVC (H.265), což je důvod, proč nebylo možné video přehrát v některých prohlížečích.

Podpora pro H.265 v prohlížečích je omezená:

  • Firefox nepodporuje H.265 kvůli licenčním omezením.
  • Google Chrome a Microsoft Edge podporují H.265 pouze při podpoře operačního systému (např. Windows 10/11).
  • Safari na macOS/iOS H.265 obvykle podporuje.

Pro přehrávání videí v prohlížeči je tedy nutné videa překódovat na formát H.264, který je široce podporovaný.

Překódování videa do formátu kompatibilního s prohlížeči lze provést pomocí příkazu:

ffmpeg -i /path/to/input.mp4 -vcodec libx264 -acodec aac /path/to/output.mp4

Pro zajištění kompatibility jsem na telefonu nastavil, aby se videa nahrávala přímo ve formátu H.264. Zvažuji také překódování starších videí do tohoto formátu.

Nextcloud třídí fotografie podle EXIF dat, což zajišťuje správné řazení dle času pořízení. Pokud však některé fotografie EXIF data nemají, Nextcloud je automaticky zatřídí podle data nahrání. Abych zajistil správné třídění i u těchto fotografií, bylo nutné změnit jejich EXIF data.

Pro tento účel jsem použil nástroj ExifTool společně s vlastním skriptem, který umožňuje rychlou úpravu EXIF dat přímo z příkazové řádky. Skript funguje tak, že nastaví datum a čas do EXIF atributů fotografie.

Nextcloud třídí fotografie podle EXIF dat, což zajišťuje správné řazení dle času pořízení. Pokud však některé fotografie EXIF data nemají, Nextcloud je automaticky zatřídí podle data nahrání. Abych zajistil správné třídění i u těchto fotografií, bylo nutné změnit jejich EXIF data. Nextcloud nemá integrovánu editaci EXIF dat. Podle diskuse ve fórech to nemají ani v plánu, protože by to bylo zbytečně náročné.

Pro tento účel jsem použil nástroj ExifTool společně s vlastním skriptem, který umožňuje rychlou úpravu EXIF dat přímo z příkazové řádky. Skript funguje tak, že nastaví datum a čas do EXIF atributů fotografie.

Níže je uveden můj skript, který jsem vytvořil pro tento účel:

#!/bin/bash
 
# Zkontrolovat, zda jsou zadány dva argumenty
if [ "$#" -ne 2 ]; then
    echo "Použití: $0 'YYYY-MM-DD HH:MM:SS' soubor"
    exit 1
fi
 
# Parametry
datum_cas="$1"
soubor="$2"
 
# Zkontrolovat, zda soubor existuje
if [ ! -f "$soubor" ]; then
    echo "Soubor '$soubor' neexistuje!"
    exit 2
fi
 
# Nastavit EXIF data pomocí ExifTool
exiftool -overwrite_original \
    -DateTimeOriginal="$datum_cas" \
    -CreateDate="$datum_cas" \
    -ModifyDate="$datum_cas" \
    "$soubor"
 
# Kontrola úspěšnosti
if [ $? -eq 0 ]; then
    echo "EXIF data úspěšně nastavena pro '$soubor' na '$datum_cas'."
else
    echo "Došlo k chybě při nastavování EXIF dat."
    exit 3
fi

Tento skript umožňuje snadnou změnu datumu a času v EXIF datech souboru. Stačí spustit skript s parametry v následujícím formátu:

./skript.sh 'YYYY-MM-DD HH:MM:SS' cesta_k_souboru

Například:

./skript.sh '2024-12-31 12:34:56' fotka.jpg

Po úspěšném provedení skriptu jsou EXIF data aktualizována a fotografie bude správně zatříděna v Nextcloudu.

Při synchronizaci souborů z telefonu do Nextcloudu jsem narazil na problém, který způsobuje, že nahrávání fotek a videí nefunguje správně. Bohužel se zdá, že jde o aktuální chybu v aplikaci nebo na straně serveru Nextcloudu. Doufám, že tato situace bude brzy vyřešena, jak se uvádí v této diskusi: Photo upload does not work anymore.

Alternativně jsem v jiné diskusi narazil na doporučení používat aplikaci FolderSync jako náhradu za oficiální mobilní aplikaci Nextcloudu: Auto upload on Android not uploading anything. FolderSync nabízí pokročilé možnosti synchronizace a může být užitečnou alternativou.

Podrobný návod na nastavení FolderSync najdete zde: FolderPair Settings - Advanced.

Přestože FolderSync může sloužit jako náhradní řešení, má jedno zásadní omezení: vytváří jinou strukturu složek. Na rozdíl od Nextcloudu neumí automaticky generovat podsložky, což může být při organizaci souborů nevýhodné. Toto je tedy aspekt, který je třeba zvážit při rozhodování, zda tuto aplikaci používat.

Přestože FolderSync může sloužit jako náhradní řešení, má jedno zásadní omezení: vytváří jinou strukturu složek. Na rozdíl od Nextcloudu neumí automaticky generovat podsložky, což může být při organizaci souborů nevýhodné. Toto je tedy aspekt, který je třeba zvážit při rozhodování, zda tuto aplikaci používat.

Dočasné řešení problému s autouploadem

Jako dočasné řešení problému s automatickým nahráváním souborů jsem se rozhodl nainstalovat starší verzi aplikace Nextcloud prostřednictvím F-Droidu. Konkrétně jsem zvolil verzi 3.30.4, která funguje bez problémů.

Výhodou F-Droidu je možnost výběru konkrétní verze aplikace při instalaci. V nabídce jsem viděl celkem tři dostupné starší verze, což usnadňuje volbu při testování, která z nich bude nejlépe vyhovovat.

Ve zdrojových kódech pro Android jsou nahlášeny chyby. Problematická verze je 3.30.6. Takže nezbývá než počkat na opravu a novější verzi a zatím fungovat na starší.

Při hledání řešení pro rozpoznávání obličejů v Nextcloudu jsem narazil na plugin Face Recognition, který je dostupný na GitHubu. Instalace samotného pluginu v Nextcloudu však nestačí, protože v Docker kontejneru chybí potřebné knihovny, které plugin vyžaduje.

Na stránce Docker Wiki pluginu jsem našel návod na instalaci potřebných knihoven. Bohužel se mi zatím nepodařilo knihovny zkompilovat. Možná je problém v architektuře, protože se pokouším plugin zprovoznit na zařízení Raspberry Pi 4 s 32bitovým operačním systémem.

Plánuji se k tomuto problému vrátit později a vyzkoušet další možnosti, jak knihovny úspěšně nainstalovat a plugin zprovoznit.

Pro správu Nextcloudu je často potřeba spouštět příkazy přes rozhraní OCC (OwnCloud Console). V případě instalace Nextcloudu v Dockeru je nutné OCC příkazy spouštět specifickým způsobem, například:

docker exec -u 33 -it nextcloud php /var/www/html/occ

Tento příkaz provádí následující kroky:

  • docker exec: Spustí příkaz uvnitř běžícího Docker kontejneru.
  • -u 33: Specifikuje uživatele s ID 33, což je ve výchozím nastavení uživatel www-data, který má oprávnění ke správě Nextcloudu.
  • -it: Spustí příkaz v interaktivním režimu.
  • nextcloud: Název kontejneru, ve kterém běží instance Nextcloudu.
  • php /var/www/html/occ: Spouští konzolovou aplikaci OCC pomocí PHP.

Jedním z užitečných OCC příkazů je například:

docker exec -u 33 -it nextcloud php /var/www/html/occ files:scan myuser

Tento příkaz je určen pro manuální rescan souborů konkrétního uživatele (v tomto případě uživatele myuser). To může být užitečné v následujících situacích:

  • Pokud byly soubory nahrány přímo do úložiště Nextcloudu mimo oficiální aplikaci (např. přes SFTP nebo jiný nástroj).
  • Pokud došlo ke změnám v souborové struktuře, které nejsou automaticky zohledněny.
  • Pro synchronizaci databáze Nextcloudu s aktuálním stavem souborového systému.

Příkaz projde souborový systém, zkontroluje všechny soubory a složky uživatele a aktualizuje databázi Nextcloudu, aby odrážela aktuální stav úložiště.

Dalším užitečným příkazem v Nextcloudu je:

docker exec -u 33 -it nextcloud php /var/www/html/occ maintenance:repair --include-expensive

Tento příkaz spouští údržbový proces, který slouží k opravě různých problémů v databázi a souborovém systému Nextcloudu.

  • php /var/www/html/occ maintenance:repair: Spouští údržbový proces, který provádí automatické opravy.
  • –include-expensive: Tento přepínač zahrnuje i časově náročné opravy, které vyžadují více prostředků a mohou trvat delší dobu.

Tento příkaz je vhodné použít v situacích, kdy je třeba opravit databázové nesrovnalosti nebo jiné problémy, které mohou nastat při běhu Nextcloudu. Například:

  • Po ruční manipulaci se soubory nebo databází.
  • Při problémech s indexy databáze.
  • Po neúspěšné aktualizaci nebo instalaci aplikací.
  • Když dojde ke ztrátě integrity některých dat.

Příklady oprav, které příkaz provádí

  • Rekonstrukce chybějících databázových indexů.
  • Oprava duplicitních nebo nekonzistentních záznamů v databázi.
  • Aktualizace souborových metadat.
  • Synchronizace oprávnění a vlastnictví souborů.

Použití přepínače –include-expensive je užitečné zejména při větších instalacích nebo složitějších problémech, protože tento přepínač zahrnuje komplexní opravy, které jsou standardně vypnuté kvůli vyšším nárokům na výkon a čas.

Pro použití jsem musel nejprve nainstalovat v Nextcloudu plugin previewgenerator. Podrobnosti k příkazům a možnostem jsou v dokumentaci.

Tento příkaz slouží k vygenerování všech náhledů obrázků v Nextcloudu pro specifikovanou složku. Konkrétní příklad příkazu je:

docker exec -u 33 -it nextcloud php /var/www/html/occ preview:generate-all --path="/myuser/files/Photos"
  • –path=„/myuser/files/Photos“: Specifikuje konkrétní složku (v tomto případě složku Photos uživatele myuser), pro kterou se náhledy generují.

Tento příkaz je užitečný v situacích, kdy:

  • Je potřeba vygenerovat náhledy obrázků pro nově přidané soubory, například po ručním nahrání přes SFTP nebo jiný externí nástroj.
  • Chcete zrychlit procházení obrázků ve webovém rozhraní Nextcloudu, protože předem vygenerované náhledy minimalizují zatížení serveru při prohlížení.
  • Po instalaci nebo konfiguraci pluginů, které upravují zpracování náhledů.

Výhody a upozornění

  • Výhody: Předem vygenerované náhledy zlepšují uživatelský zážitek a snižují nároky na výkon serveru během procházení obrázků.
  • Upozornění: Proces generování náhledů může být časově náročný, zvláště pokud složka obsahuje velké množství obrázků nebo pokud je server méně výkonný. Doporučuje se tento příkaz spouštět mimo špičku, aby nedošlo k ovlivnění běhu aplikace.

Tento příkaz je tedy ideální pro správu a optimalizaci náhledů v Nextcloudu, zejména pro složky s mnoha obrázky.

Pro správné fungování Nextcloudu je důležité nastavit cron, který se stará o pravidelné provádění úloh na pozadí. Tyto úlohy zahrnují například:

  • Aktualizace metadat souborů.
  • Mazání starých a nepotřebných dat.
  • Synchronizaci a další operace nutné pro plynulý chod aplikace.

Nejprve jsem se pokusil nastavit webcron, který spouští úlohy při přístupu přes webový prohlížeč. Tento přístup však nedostačoval při větším množství nahraných souborů, protože úlohy nestíhaly být vykonány včas. Proto jsem musel přejít na systémový cron, který spouští úlohy pravidelně podle definovaného plánu.

Pro konfiguraci jsem přidal následující řádek do souboru `/etc/crontab`:

*/5 *   * * *   root    /usr/bin/docker exec -u 33 nextcloud php /var/www/html/cron.php > /dev/null

Tento příkaz zajišťuje spuštění úloh každých 5 minut uvnitř Docker kontejneru, kde běží Nextcloud. Všechny výstupy jsou přesměrovány na /dev/null, aby nebyly ukládány.

Maximální délka spuštění příkazu je 15 minut, pak skončí. Takže při velkém množství zpracování by měli v jednu chvíli v časovém intervalu běžet maximálně 3 instance.

Pro získání přehledu o aktuálních úlohách lze použít následující příkaz:

docker exec -u 33 -it nextcloud php /var/www/html/occ background-job:list

Struktura výstupu obsahuje následující informace:

  • id: Jedinečný identifikátor úlohy v databázi.
  • class: Třída odpovědná za vykonání úlohy (např. aktualizace metadat nebo mazání starých souborů).
  • last_run: Datum a čas posledního spuštění úlohy.
  • argument: Parametry předané úloze, které mohou být specifické (např. uživatelské jméno, ID souboru).

Po nastavení cronu je dobré zkontrolovat jeho funkčnost v administrátorském rozhraní Nextcloudu v sekci Základní nastaveníÚlohy na pozadí. Zde je možné ověřit, zda cron probíhá podle očekávání a úlohy jsou správně vykonávány.

Plugin Recognize slouží k automatickému rozpoznávání obsahu médií v Nextcloudu. Umožňuje automatické přidávání tagů k fotografiím, videím a hudbě, čímž usnadňuje jejich kategorizaci a vyhledávání. Plugin dokáže:

  • 📷 👪 Rozpoznávat obličeje na fotografiích (např. z kontaktů).
  • 📷 🏔 Rozpoznávat zvířata, krajiny, jídlo, vozidla, budovy a další objekty.
  • 📷 🗼 Rozpoznávat památky a monumenty.
  • 👂 🎵 Rozpoznávat hudební žánry.
  • 🎥 🤸 Rozpoznávat lidské akce na videích.

Plugin využívá systém Collaborative Tags Nextcloudu, což umožňuje například:

  • 👂 Poslouchat označenou hudbu pomocí aplikace audioplayer.
  • 📷 Prohlížet označené fotografie a videa v aplikaci photos.

Plugin je dostupný na GitHubu: Recognize.

Velikosti modelů:

  • Object recognition: 1GB
  • Landmark recognition: 300MB
  • Video action recognition: 50MB
  • Music genre recognition: 50MB

Plugin jsem nejprve nainstaloval v Nextcloudu jako administrátor. Během instalace jsem zjistil, že plugin vyžaduje nainstalovanou verzi Node.js 20.9 a vyšší. Pro instalaci Node.js na Raspberry Pi 4 jsem využil návod z článku: Install Node.js 20 on Raspberry Pi 4.

Do svého Dockerfile jsem přidal následující část pro instalaci Node.js:

# Node.js for Recognize
# source for node.js: https://xavier.arnaus.net/blog/install-nodejs-20-into-a-raspberry-pi-4
 
RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    gnupg && \
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
    apt-get update && \
    apt-get install -y nodejs && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

Po dokončení instalace Node.js jsem nainstaloval modely pro rozpoznávání pomocí příkazu:

docker exec -u 33 -it nextcloud php /var/www/html/occ recognize:download-models

Vzhledem k tomu, že plugin běží na Raspberry Pi 4, je výkon omezený. Předpokládám postupné dodávání fotografií v malém množství (jednotky fotografií za den), což by zařízení mělo bez problémů zvládnout.

Pokud nechcete, aby byl určitý adresář procházen při rozpoznávání, můžete do něj přidat příslušné soubory:

  • .noimage: Pro vyloučení z rozpoznávání obrázků.
  • .nomusic: Pro vyloučení z rozpoznávání hudebních žánrů.
  • .novideo: Pro vyloučení z rozpoznávání videí.
  • .nomedia: Pro úplné vyloučení z rozpoznávání.

Například pro ignorování všech souborů v cestě `path/to/your/folder/*` přidejte soubor `path/to/your/folder/.nomedia`.

  • it/server/nextcloud.1735729038.txt.gz
  • Poslední úprava: 2025/01/01 10:57
  • autor: Petr Nosek