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:
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', 16 => 'OC\\Preview\\HEIC', 17 => 'OC\\Preview\\HEIF', 18 => 'OC\\Preview\\EMF', ),
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á:
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.
Při používání mobilní aplikace Nextcloud jsem se setkal s několika problémy při synchronizaci. Proto jsem se rozhodl sepsat postup, jak aplikaci nastavit od začátku. Tento postup je možné použít i v případě, že něco nefunguje správně.
1. Vymazání dat aplikace
Pokud máte aplikaci Nextcloud již nainstalovanou v telefonu, postupujte takto:
Tento krok vyresetuje všechna lokální nastavení aplikace. Data na serveru i multimediální data v telefonu zůstanou zachována. Tento postup pomáhá odstranit případné chyby v synchronizaci způsobené nesprávnými daty uloženými v systému.
2. Nové přihlášení a nastavení synchronizace
Spusťte aplikaci znovu, projděte přihlašovacím procesem a přejděte do menu s nastavením automatického nahrávání. Nastavte následující parametry:
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.
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ší.
Plugin Face Recognition slouží k rozpoznávání obličejů na fotografiích v Nextcloudu. Je dostupný na GitHubu: Face Recognition. Instalace v administrátorském rozhraní Nextcloudu však nestačí, zejména pokud Nextcloud běží v Dockeru. Pro správné fungování je potřeba do Dockeru přidat další knihovny.
Pro instalaci Face Recognition jsem vytvořil vlastní Dockerfile s čerpáním z oficiální dokumentace: Docker Wiki. Dokumentace však není aktualizovaná, a proto jsem ji musel upravit a doplnit. Zde je moje aktuální verze:
# # Use a temporary image to compile and test the libraries # FROM nextcloud:apache as builder # Build and install dlib on builder RUN apt-get update ; \ apt-get install -y build-essential wget cmake libx11-dev libopenblas-dev ARG DLIB_BRANCH=v19.19 RUN wget -c -q https://github.com/davisking/dlib/archive/$DLIB_BRANCH.tar.gz \ && tar xf $DLIB_BRANCH.tar.gz \ && mv dlib-* dlib \ && cd dlib/dlib \ && mkdir build \ && cd build \ && cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=Release .. \ && make \ && make install # Build and install PDLib on builder ARG PDLIB_BRANCH=master RUN apt-get install unzip RUN wget -c -q https://github.com/matiasdelellis/pdlib/archive/$PDLIB_BRANCH.zip \ && unzip $PDLIB_BRANCH \ && mv pdlib-* pdlib \ && cd pdlib \ && phpize \ && ./configure \ && make \ && make install # Enable PDlib on builder # If necesary take the php settings folder uncommenting the next line # RUN php -i | grep "Scan this dir for additional .ini files" RUN echo "extension=pdlib.so" > /usr/local/etc/php/conf.d/pdlib.ini # Install bzip2 needed to extract models RUN apt-get install -y libbz2-dev RUN docker-php-ext-install bz2 # Test PDlib instalation on builder RUN apt-get install -y git RUN git clone https://github.com/matiasdelellis/pdlib-min-test-suite.git \ && cd pdlib-min-test-suite \ && make ARG EXT_DIR RUN EXT_DIR=$(php -i | grep -oP "^extension_dir => \K[^ ]+") && \ echo $EXT_DIR > /tmp/ext_dir.txt && \ cp $EXT_DIR/pdlib.so /tmp/ # # If pass the tests, we are able to create the final image. # # Vyjdeme z oficiálního obrazu Nextcloud FROM nextcloud:apache # Přepneme na uživatele root pro instalaci balíčků #USER root # Nainstalujeme ffmpeg RUN apt-get update && apt-get install --no-install-recommends -y ffmpeg libimage-exiftool-perl && \ apt-get clean && rm -rf /var/lib/apt/lists/* # Install dependencies to image RUN apt-get update ; \ apt-get install -y libopenblas-dev libopenblas0 libbz2-dev RUN docker-php-ext-install bz2 # Install dlib and PDlib to image COPY --from=builder /usr/local/lib/libdlib.so* /usr/local/lib/ # If is necesary take the php extention folder (/usr/local/lib/php/extensions/no-debug-non-zts-20180731) uncommenting the next line # RUN php -i | grep extension_dir #COPY --from=builder /usr/local/lib/php/extensions/no-debug-non-zts-20180731/pdlib.so /usr/local/lib/php/extensions/no-debug-non-zts-20180731/ COPY --from=builder /usr/local/lib/php/extensions/no-debug-non-zts-20220829/pdlib.so /usr/local/lib/php/extensions/no-debug-non-zts-20220829/ COPY --from=builder /tmp/ext_dir.txt /tmp/ext_dir.txt COPY --from=builder /tmp/pdlib.so /tmp/pdlib.so # Extract the correct path and copy the extension RUN EXT_DIR=$(cat /tmp/ext_dir.txt) && \ cp /tmp/pdlib.so $EXT_DIR/ # Enable PDlib on final image RUN echo "extension=pdlib.so" > /usr/local/etc/php/conf.d/pdlib.ini # Pdlib is already installed now on final image without all build dependencies. # You could test again if everything is correct, uncommenting the next lines. # # RUN apt-get install -y git wget # RUN git clone https://github.com/matiasdelellis/pdlib-min-test-suite.git \ # && cd pdlib-min-test-suite \ # && make # # At this point you meet all the dependencies to install the application # You can skip this step and install the application from the application store # #ARG FR_BRANCH=master #RUN apt-get install -y wget unzip nodejs npm #RUN wget -c -q -O facerecognition https://github.com/matiasdelellis/facerecognition/archive/$FR_BRANCH.zip \ # && unzip facerecognition \ # && mv facerecognition-* /usr/src/nextcloud/facerecognition \ # && cd /usr/src/nextcloud/facerecognition \ # && make # Node.js for Recognize # 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/*
Kromě toho jsem do Docker Compose souboru přidal environment proměnnou:
environment: - PHP_MEMORY_LIMIT=1024M
Po sestavení a spuštění Nextcloudu:
docker-compose build nextcloud
docker-compose up -d nextcloud
Jsem provedl následující kroky:
1. Výpis dostupných modelů pro rozpoznávání:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup
2. Nastavení přidělené RAM paměti:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -M 1073741824
3. Výběr konkrétního modelu:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -m 3
Více informací o jednotlivých modelech: https://github.com/matiasdelellis/facerecognition/wiki/Models#model-4
Mezi jednotlivými modely lze kdykoli přepínat. Pokud chci použít model 4, musím nejdříve nainstaslovat model 1, 3 a pak je možné nainstalovat model 4.
Když přepnu mezi jednotlivými modely, tak každý model má svoje uložená data. Takže například pokud si vytrénuju model 4 a chci provést migraci dat na model 3, tak nejprve přepnu na model 3, a pak mohu provést migraci:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -m 3 docker exec -u 33 -it nextcloud php /var/www/html/occ face:migrate -m 4 -u admin docker exec -u 33 -it nextcloud php /var/www/html/occ face:background_job -u admin
Po migraci je potřeba znovu vytvořit clustery. Migrace říká, že chci do současného modelu přenést data z modelu 4.
Pokud chci vyresetovat data, musím být v konkrétním modelu a mohu data vyresetovat takto:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:reset --model -u admin
Při pokusu o skenování obličejů jednoho uživatele:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:background_job -u nc_admin -t 900
jsem narazil na problém s dočasnými soubory. Problém jsem vyřešil takto:
1. V administrátorském menu Nextcloudu jsem šel do sekce Rozpoznávání obličejů. 2. Nastavil jsem posuvník pro velikost dočasných souborů. 3. Uložil změnu kliknutím na tlačítko vedle posuvníku.
Tento krok je poměrně neintuitivní, protože nastavení se bez potvrzení neuloží, což vedlo k mnoha pokusům a omylům.
A ještě je potřeba pro uživatele povolit rozpoznávání obličejů.
Pro kontinuální skenování obličejů je potřeba nastavit úlohu na pozadí jako pravidelný cron úkol. Plugin Face Recognition byl navržen tak, aby postupně analyzoval fotografie a výsledky zobrazoval uživatelům průběžně. Dokumentace k tomuto nastavení je dostupná zde: Schedule Background Task.
Před konfigurací cronu je důležité zajistit, že veškeré nastavení Face Recognition funguje správně a že máte jasně definované:
V následujícím příkladu je úloha nastavena na spuštění každých 30 minut s maximální dobou běhu 15 minut:
*/30 * * * * docker exec -u 33 -it nextcloud php /var/www/html/occ face:background_job -t 900
Tento příkaz:
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:
.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`
Vycházím z této diskuse, protože v dokumentaci pluginu jsem tuto informaci bohužel nenašel.
Jednou z pokročilých možností při využívání pluginu Face Recognition v Nextcloudu je použití externího modelu pro rozpoznávání obličejů. Tato varianta umožňuje provádět náročné výpočty na výkonnějším stroji, což ulehčí serveru s Nextcloudem (například Raspberry Pi). Externí model lze použít například pro zpracování velké databáze fotografií, zatímco nově přidané fotografie lze průběžně zpracovávat přímo na slabším zařízení. Dokumentace k této funkcionalitě je dostupná zde: Face Recognition External Model.
Externí model umožňuje:
Při použití externího modelu je nutné si uvědomit, že:
1. Vytvoření API klíče:
openssl rand -base64 32 > api.key cat api.key
Tento klíč bude použit pro ověřování komunikace mezi Nextcloudem a externím modelem.
2. Spuštění externího modelu v Dockeru:
docker run --rm -i -p 8080:5000 -v /path/to/api.key:/app/api.key --name facerecognition matiasdelellis/facerecognition-external-model:v0.2.0
Model je nyní dostupný na portu 8080.
3. Ověření funkčnosti modelu:
curl localhost:8080/welcome
Očekávaný výstup:
{"facerecognition-external-model":"welcome","model":3,"version":"0.2.0"}
4. Konfigurace Nextcloudu: Nastavte externí model a API klíč pomocí OCC příkazů:
docker exec -u 33 -it nextcloud php /var/www/html/occ config:system:set facerecognition.external_model_url --value "192.168.1.123:8080" docker exec -u 33 -it nextcloud php /var/www/html/occ config:system:set facerecognition.external_model_api_key --value "NZ9ciQuH0djnyyTcsDhNL7so6SVrR01znNnv0iXLrSk="
5. Nastavení externího modelu:
docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -m 5
Externí model je nyní připraven pro použití.
Pro paralelní zpracování fotografií lze využít více vláken na externím serveru. Příklad skriptu pro import, analýzu a klastrování obličejů naleznete v dokumentaci nebo níže. Tento proces je vhodné spustit v nástroji jako tmux nebo screen, aby mohl běžet na pozadí.
#!/bin/bash set -o errexit dir=$(pwd) # your nextcloud path cd /var/www/nextcloud/html/ sudo -u www-data php --define apc.enable_cli=1 ./occ face:stats echo -n "Select user for import & parallel processing:" read user echo "" echo "Enabling facerecognition for $user..." sudo -u www-data php --define apc.enable_cli=1 ./occ user:setting $user facerecognition enabled true echo "Done" echo "Synchronizing $user files..." sudo -u www-data php --define apc.enable_cli=1 ./occ face:background_job -u $user --sync-mode echo "Done" echo "Analyzing $user files..." # the upper number has to be lower or equal to the number of GUNICORN_WORKERS for i in {1..3}; do sudo -u www-data php --define apc.enable_cli=1 ./occ face:background_job -u $user --analyze-mode & pids[${i}]=$! done for pid in ${pids[*]}; do wait $pid done echo "Done" echo "Calculating $user face clusters..." sudo -u www-data php --define apc.enable_cli=1 ./occ face:background_job -u user --cluster-mode echo "Done" cd $dir
Použití externího modelu přináší výhody při zpracování velkých datasetů, zejména na méně výkonných zařízeních, jako je Raspberry Pi.
occ face:background_job [-u|--user_id USER_ID] [-t|--timeout TIMEOUT] [--defer-clustering] [-M|--max_image_area MAX_IMAGE_AREA]
Tento příkaz je hlavním nástrojem pro analýzu fotografií:
Tento příkaz je doporučeno spustit manuálně před jeho zařazením do cron úlohy, aby se ověřila konfigurace a dostupné systémové prostředky.
occ face:sync-albums [-u|--user_id USER_ID]
occ face:reset [--all] [--model] [--image-errors] [--clustering] [-u|--user_id USER_ID]
occ face:migrate [-m|--model_id MODEL_ID] [-u|--user_id USER_ID]
occ face:stats [-u|--user_id USER_ID] [-j|--json]
occ face:progress
Tyto příkazy pokrývají širokou škálu úloh a umožňují plně kontrolovat proces rozpoznávání obličejů v Nextcloudu. Pro optimální využití je důležité přizpůsobit parametry podle dostupných prostředků a potřeb konkrétního prostředí.
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:
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:
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.
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:
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"
Tento příkaz je užitečný v situacích, kdy:
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:
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:
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:
Plugin využívá systém Collaborative Tags Nextcloudu, což umožňuje například:
Plugin je dostupný na GitHubu: Recognize.
Velikosti modelů:
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:
Například pro ignorování všech souborů v cestě `path/to/your/folder/*` přidejte soubor `path/to/your/folder/.nomedia`.
tmpfs je speciální typ souborového systému, který uchovává data přímo v paměti (RAM) místo na disku. To znamená, že přístup k těmto datům je výrazně rychlejší, protože eliminuje potřebu čtení a zápisu na fyzický disk. Použití tmpfs může být užitečné zejména pro dočasné soubory, které nepotřebují trvalé uložení.
Plugin Recognize dočasně ukládá soubory k rozpoznání do adresáře `/tmp`. Při použití Dockeru může být výhodné mapovat tento adresář do paměti pomocí tmpfs. Tím se zvyšuje rychlost zpracování souborů a zároveň se snižuje zatížení pevného disku.
⚠️ Pozor: Pro použití tmpfs je důležité zajistit, že váš systém má dostatek volné RAM. V opačném případě mohou selhat veřejné nahrávky nebo práce s velkými soubory.
Pro přidání tmpfs do Docker Compose souboru jsem použil následující konfiguraci:
services: app: image: nextcloud-apache ... volumes: - type: tmpfs target: /tmp tmpfs: mode: "1777" # Volitelně: nastavení oprávnění ...
Tato konfigurace:
Použití tmpfs je tedy skvělým řešením pro zvýšení výkonu, pokud máte dostatečné množství paměti a chcete minimalizovat zátěž pevného disku.
Při provozu Nextcloudu jsem narazil na chyby v logu související s připojením k databázovému serveru PostgreSQL. Záznamy v logu naznačovaly, že Nextcloud nemůže vytvořit nové připojení k databázi kvůli vyčerpání dostupných připojení. Chyba vypadala například takto:
OC\DB\Exceptions\DbalException: An exception occurred in the driver: SQLSTATE[08006] [7] connection to server at "postgres" (192.168.32.9), port 5432 failed: FATAL: remaining connection slots are reserved for roles with the SUPERUSER attribute
Hlavní příčinou problému bylo nízké nastavení maximálního počtu připojení v PostgreSQL. Výchozí hodnota parametru `max_connections` byla příliš nízká pro požadavky aplikace.
Pro vyřešení problému jsem zvýšil hodnotu parametru `max_connections` v konfiguračním souboru PostgreSQL:
1. Otevřete konfigurační soubor PostgreSQL (obvykle se nachází v `/etc/postgresql/<verze>/main/postgresql.conf`). 2. Najděte a upravte následující řádek:
max_connections = 300
Tato hodnota určuje maximální počet současně aktivních připojení. Zvýšení z výchozí hodnoty (obvykle 100) na 300 by mělo být dostatečné pro většinu menších a středně velkých instalací.
3. Restartujte PostgreSQL server, aby se změny projevily:
sudo systemctl restart postgresql
Po úpravě konfiguračního souboru jsem problém znovu monitoroval. Dále je vhodné pravidelně kontrolovat přehled vytížení připojení a zajistit, že žádné procesy zbytečně nespotřebovávají připojení. To lze provést pomocí příkazů v PostgreSQL, například:
SELECT * FROM pg_stat_activity;
Tímto způsobem lze identifikovat potenciální problémy a optimalizovat přístup k databázi.
Při migraci dat na nový server Nextcloudu jsem původně postupoval velmi komplikovaně. Data jsem nejprve stáhl na svůj počítač a poté je přes webové rozhraní nahrával na nový server. Tento přístup byl ale pomalý a neefektivní. Nahrávání přes webové rozhraní jsem používal hlavně proto, aby se soubory správně zapsaly do databáze Nextcloudu.
Začal jsem zvažovat, zda by bylo možné nahrávat soubory přímo do adresáře nextcloud/data/uživatel/files na serveru. Takový postup však vyžaduje další kroky, aby si server nahrané soubory oskenoval a zapsal je do databáze. Bez tohoto by mohlo dojít k problémům, kdy soubory nejsou viditelné přes webové rozhraní nebo synchronizační klienty.
1. Nahrajte soubory na server Připojte se k serveru například pomocí SCP, rsync nebo jiného nástroje pro přenos souborů a nakopírujte je přímo do adresáře nextcloud/data/uživatel/files.
2. Nastavte správná oprávnění Po nahrání souborů nastavte správného vlastníka a oprávnění, aby Nextcloud mohl s těmito soubory pracovat. Typicky by soubory měly patřit uživateli a skupině webového serveru, například www-data na Debian/Ubuntu.
Příklad příkazu:
chown -R www-data:www-data /cesta/k/nextcloud/data/uživatel/files
3. Spusťte synchronizaci souborů Nextcloud poskytuje příkaz pro synchronizaci souborů a jejich zapsání do databáze:
docker exec -u 33 -it nextcloud php /var/www/html/occ files:scan uživatel
Nahraďte uživatel jménem uživatele, kterému patří nahrané soubory. Tento příkaz prohledá adresář files daného uživatele, zkontroluje změny a aktualizuje databázi.
4. Zkontrolujte výsledek
Po dokončení synchronizace: