it:server:nextcloud

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:server:nextcloud [2025/01/01 10:59] – [Ignorování adresářů] Petr Nosekit:server:nextcloud [2025/01/15 14:10] (aktuální) – [Nextcloud] Petr Nosek
Řádek 2: Řádek 2:
  
 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. 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.
 +
 +
 +===== Přístup přes WebDAV =====
 +
 +Přístup k datům přes WebDAV může být ideální jak přes KODI nebo i v Ubuntu se lze takto připojit k přichystanému serveru. Hledal jsem, jestli je potřeba něco udělat v nastavení nextcloudu, ale není potřeba. 
 +
 +Zde je [[https://docs.nextcloud.com/server/30/user_manual/en/files/access_webdav.html|návod, jak na WebDAV]].
 +
 +V mém případě stačí pracovat s URL:
 +
 +<code>
 +davs://example.com/remote.php/dav/files/USERNAME/
 +</code> 
  
 ===== Problémy s náhledy a přehráváním videí ===== ===== Problémy s náhledy a přehráváním videí =====
Řádek 48: Řádek 61:
   14 => 'OC\\Preview\\MP4',   14 => 'OC\\Preview\\MP4',
   15 => 'OC\\Preview\\AVI',   15 => 'OC\\Preview\\AVI',
 +  16 => 'OC\\Preview\\HEIC',
 +  17 => 'OC\\Preview\\HEIF',
 +  18 => 'OC\\Preview\\EMF',
 ), ),
 </code> </code>
Řádek 91: Řádek 107:
  
  
-===== Úprava EXIF dat =====+===== Nastavení mobilní aplikace pro synchronizaci =====
  
-Nextcloud třídí fotografie podle EXIF dat, což zajišťuje správné řazení dle času pořízení. Pokud však 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.+Při používání mobilní aplikace Nextcloud jsem se setkal s kolika problémy při synchronizaci. Proto jsem se rozhodl sepsat postupjak aplikaci nastavit od začátku. Tento postup je možné použít i v případě, že něco nefunguje správně.
  
-Pro tento účel jsem použil nástroj **ExifTool** společně s vlastním skriptemkterý umožňuje rychlou úpravu EXIF dat ímo z íkazové řádkySkript funguje tak, že nastaví datum čas do EXIF atributů fotografie+ 
 +1. **Vymazání dat aplikace**   
 + 
 +Pokud máte aplikaci Nextcloud již nainstalovanou v telefonu, postupujte takto: 
 +  Přejděte do **Nastavení** → **Aplikace** a vyhledejte aplikaci Nextcloud. 
 +  * Klikněte na **Úložiště a mezipaměť**. 
 +  * Zvolte možnost **Vymazat mezipaměť** a následně **Vymazat úložiště**. 
 + 
 +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. 
 + 
 +{{:it:server:pasted:20250101-230911.png?400}} 
 + 
 +{{:it:server:pasted:20250101-231015.png?400}} 
 + 
 + 
 +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 nastavením automatického nahrávání. Nastavte následující parametry: 
 + 
 +   * **Vzdálená položka** - Vyberte složku na serverukam chcete soubory nahrávat. 
 + 
 +   * **Nahrávat pouze přes neúčtované Wi-Fi připojení** - Pokud chcete synchronizovat pouze přes Wi-Fi, zaškrtněte tuto možnost. 
 + 
 +   * **Také nahrát už existující soubory** - Tuto volbu doporučuji vždy zaškrtnout. Pokud ji nevyberete, budou se nahrávat pouze nově vytvořené soubory (např. fotografie a videa). Spouštěčem nahrávání v tomto ípadě bude vytvoření nového souboru. Pokud zaškrtnete tuto možnost, nahrají se i všechny existující soubory. Tato volba je relevantní pouze i prvotním nahrávání. Po nahrání všech dat se již tato volba nepoužívá, protože následné synchronizace budou probíhat pouze pro nové soubory. 
 + 
 +   * **Co udělat, pokud soubor už existuje?** - Zvolte možnost **Přeskočit nahrávání**Tím se zabrání vzniku duplicitprotože pokud soubor již na serveru existuje, aplikace jej vynechá přejde k dalšímu souboru.
  
  
 +{{:it:server:pasted:20250101-231211.png?400}}
 ===== Úprava EXIF dat ===== ===== Úprava EXIF dat =====
  
Řádek 181: Řádek 223:
 ===== Instalace Face Recognition v Nextcloudu ===== ===== Instalace Face Recognition v Nextcloudu =====
  
-Při hledání řešení pro rozpoznávání obličejů v Nextcloudu jsem narazil na plugin **Face Recognition**, který je dostupný na [[https://github.com/matiasdelellis/facerecognition|GitHubu]]. Instalace samotného pluginu v Nextcloudu však nestačí, protožDocker kontejneru chybí potřebné knihovny, které plugin vyžaduje.+Plugin **Face Recognition** slouží k rozpoznávání obličejů na fotografiích v Nextcloudu. Je dostupný na GitHubu: [[https://github.com/matiasdelellis/facerecognition|Face Recognition]]. Instalace v administrátorském rozhraní Nextcloudu však nestačí, zejména pokud Nextcloud běží Dockeru. Pro správné fungování je potřeba do Dockeru přidat další knihovny.
  
-Na stránce [[https://github.com/matiasdelellis/facerecognition/wiki/Docker|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.+==== Úprava Dockerfile ====
  
-Plánuji se k tomuto problému vrátit později vyzkoušet další možnostijak knihovny úspěšně nainstalovat plugin zprovoznit.+Pro instalaci Face Recognition jsem vytvořil vlastní **Dockerfile** s čerpáním z oficiální dokumentace: [[https://github.com/matiasdelellis/facerecognition/wiki/Docker|Docker Wiki]]. Dokumentace však není aktualizovaná, a proto jsem ji musel upravit a doplnit. Zde je moje aktuální verze: 
 + 
 +<code bash> 
 +#                                                                                                                                                                                                                   
 +# 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/
 +</code> 
 + 
 +Kromě toho jsem do Docker Compose souboru přidal environment proměnnou: 
 + 
 +<code yaml> 
 +environment: 
 +  - PHP_MEMORY_LIMIT=1024M 
 +</code> 
 + 
 +==== Nastavení a spuštění ==== 
 + 
 +Po sestavení a spuštění Nextcloudu: 
 + 
 +<code bash> 
 +docker-compose build nextcloud 
 +docker-compose up -d nextcloud 
 +</code> 
 + 
 +Jsem provedl následující kroky: 
 + 
 +1. **Výpis dostupných modelů pro rozpoznávání**: 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup 
 +</code> 
 + 
 +2. **Nastavení přidělené RAM paměti**: 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -M 1073741824 
 +</code> 
 + 
 +3. **Výběr konkrétního modelu**: 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -m 3 
 +</code> 
 + 
 +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: 
 + 
 +<code bash> 
 +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 
 +</code> 
 + 
 +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: 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:reset --model -u admin 
 +</code> 
 + 
 +==== Řešení problémů ==== 
 + 
 +Při pokusu o skenování obličejů jednoho uživatele: 
 + 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:background_job -u nc_admin -t 900 
 +</code> 
 + 
 +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. 
 + 
 +{{:it:server:pasted:20250101-151318.png}} 
 + 
 +A ještě je potřeba pro uživatele povolit rozpoznávání obličejů. 
 + 
 +{{:it:server:pasted:20250101-151436.png}} 
 + 
 + 
 +==== Nastavení cronu pro kontinuální skenová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: [[https://github.com/matiasdelellis/facerecognition/wiki/Schedule-Background-Task|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é: 
 + 
 +  * **Interval spouštění úlohy**: Jak často se má úloha spustit. 
 +  * **Doba běhu úlohy**: Maximální doba, po kterou může úloha běžet, aby nedošlo k překrývání více instancí. 
 + 
 +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: 
 + 
 +<code> 
 +*/30 *  *  *  * docker exec -u 33 -it nextcloud php /var/www/html/occ face:background_job -t 900 
 +</code> 
 + 
 +Tento příkaz: 
 + 
 +  * ***/30**: Spouští úlohu každých 30 minut. 
 +  * **docker exec**: Spouští příkaz uvnitř Docker kontejneru, kde běží Nextcloud. 
 +  * **php /var/www/html/occ face:background_job**: Spouští úlohu rozpoznávání obličejů. 
 +  * **-t 900**: Nastavuje maximální dobu běhu na 900 sekund (15 minut). 
 + 
 + 
 +==== Ignorování adresářů ==== 
 + 
 + 
 +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 [[https://github.com/matiasdelellis/facerecognition/issues/446|této diskuse]], protože v dokumentaci pluginu jsem tuto informaci bohužel nenašel. 
 + 
 +==== Použití Face Recognition na externím modelu ==== 
 + 
 +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 strojicož 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: [[https://github.com/matiasdelellis/facerecognition-external-model|Face Recognition External Model]]. 
 + 
 +=== Výhody použití externího modelu === 
 + 
 +Externí model umožňuje: 
 + 
 +  * Rozložit náročné úkoly na samostatný výkonnější server, čímž se sníží zátěž na server, kde běží Nextcloud. 
 +  * Paralelizovat zpracování velkých objemů fotografií. 
 +  * Flexibilitu při implementaci vlastních modelů pomocí oblíbených nástrojů strojového učení. 
 + 
 +=== Bezpečnostní úvahy === 
 + 
 +Při použití externího modelu je nutné si uvědomit, že: 
 + 
 +  * Obrázky se přenášejí z Nextcloudu na externí server prostřednictvím POST požadavků. 
 +  * Obrázky jsou po analýze okamžitě smazány, ale během přenosu je nutné zajistit bezpečnost dat. 
 +  * Pokud je externí model provozován mimo lokální síť, doporučuje se použít HTTPS proxy pro ochranu dat. 
 + 
 +=== Konfigurace externího modelu === 
 + 
 +1. **Vytvoření API klíče**: 
 +<code bash> 
 +openssl rand -base64 32 > api.key 
 +cat api.key 
 +</code> 
 + 
 +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**: 
 +<code bash> 
 +docker run --rm -i -p 8080:5000 -v /path/to/api.key:/app/api.key --name facerecognition matiasdelellis/facerecognition-external-model:v0.2.0 
 +</code> 
 + 
 +Model je nyní dostupný na portu 8080. 
 + 
 +3. **Ověření funkčnosti modelu**: 
 +<code bash> 
 +curl localhost:8080/welcome 
 +</code> 
 + 
 +Očekávaný výstup: 
 +<code> 
 +{"facerecognition-external-model":"welcome","model":3,"version":"0.2.0"
 +</code> 
 + 
 +4. **Konfigurace Nextcloudu**: 
 +Nastavte externí model a API klíč pomocí OCC příkazů: 
 + 
 +<code bash> 
 +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=" 
 +</code> 
 + 
 +5. **Nastavení externího modelu**: 
 +<code bash> 
 +docker exec -u 33 -it nextcloud php /var/www/html/occ face:setup -m 5 
 +</code> 
 + 
 +Externí model je nyní připraven pro použití. 
 + 
 +=== Zpracování paralelních úloh === 
 + 
 +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í.  
 + 
 +<code bash> 
 +#!/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 -"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 
 +</code> 
 + 
 +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. 
 + 
 + 
 +==== Další příkazy pro Face Recognition ==== 
 + 
 +=== Face Analysis === 
 + 
 +<code> 
 +occ face:background_job [-u|--user_id USER_ID] [-t|--timeout TIMEOUT] [--defer-clustering] [-M|--max_image_area MAX_IMAGE_AREA] 
 +</code> 
 + 
 +Tento příkaz je hlavním nástrojem pro analýzu fotografií: 
 + 
 +  * **Funkce**: Vyhledává obrázky, analyzuje je a třídí nalezené obličeje do skupin podobných osob (clustering). 
 +  * **Parametry**: 
 +    - **-u USER_ID**: Analyzuje pouze fotografie konkrétního uživatele. Uživatel musí analýzu povolit individuálně. 
 +    - **-t TIMEOUT**: Nastavuje maximální dobu (v sekundách), po kterou příkaz běží. Po uplynutí doby se příkaz zastaví a pokračuje při dalším spuštění. 
 +    - **-M MAX_IMAGE_AREA**: Omezuje maximální plochu obrázku (v pixelech²) pro zpracování, čímž snižuje paměťové nároky. 
 +    - **--defer-clustering**: Odkládá třídění obličejů na konec analýzy. 
 + 
 +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. 
 + 
 + 
 +=== Vytváření alb v aplikaci Photos === 
 + 
 +<code> 
 +occ face:sync-albums [-u|--user_id USER_ID] 
 +</code> 
 + 
 +  * **Funkce**: Vytváří alba v aplikaci Nextcloud Photos na základě rozpoznaných osob. 
 +  * **Parametry**: 
 +    - **-u USER_ID**: Synchronizuje alba pouze pro daného uživatele. 
 +  * **Poznámka**: Jakékoliv úpravy alb provedené v aplikaci Photos budou při dalším spuštění tohoto příkazu přepsány. 
 + 
 +=== Resetování informací === 
 + 
 +<code> 
 +occ face:reset [--all] [--model] [--image-errors] [--clustering] [-u|--user_id USER_ID] 
 +</code> 
 + 
 +  * **Funkce**: Umožňuje resetovat databázi obličejů a souvisejících informací. 
 +  * **Parametry**: 
 +    - **--all**: Smaže všechny informace o obrázcích, obličejích a skupinách osob. 
 +    - **--model**: Resetuje aktuální model a nutí k nové analýze všech obrázků. 
 +    - **--clustering**: Resetuje pouze seskupování obličejů (clustering). 
 +    - **--image-errors**: Resetuje pouze obrázky, u kterých došlo k chybám při analýze. 
 +    - **-u USER_ID**: Resetuje data pouze pro konkrétního uživatele. 
 + 
 +=== Migrace modelů === 
 + 
 +<code> 
 +occ face:migrate [-m|--model_id MODEL_ID] [-u|--user_id USER_ID] 
 +</code> 
 + 
 +  * **Funkce**: Migrace rozpoznaných obličejů mezi modely. 
 +  * **Parametry**: 
 +    - **-m MODEL_ID**: Určuje model, do kterého budou data migrována. 
 +    - **-u USER_ID**: Migruje data pouze pro daného uživatele. 
 +  * **Poznámka**: Jména osob nejsou přenesena a musí být znovu zadána uživatelem. 
 + 
 +=== Statistiky === 
 + 
 +<code> 
 +occ face:stats [-u|--user_id USER_ID] [-j|--json] 
 +</code> 
 + 
 +  * **Funkce**: Poskytuje souhrn počtu obrázků, rozpoznaných obličejů a identifikovaných osob. 
 +  * **Parametry**: 
 +    - **-u USER_ID**: Vrací statistiky pouze pro konkrétního uživatele. 
 +    - **-j**: Výstup ve formátu JSON pro snadné zpracování jinými nástroji. 
 + 
 +=== Stav analýzy === 
 + 
 +<code> 
 +occ face:progress 
 +</code> 
 + 
 +  * **Funkce**: Zobrazuje průběh analýzy a odhadem dobu potřebnou k dokončení. 
 +  * **Parametry**: 
 +    - **-j**: Výstup ve formátu JSON pro snadné zpracování jinými nástroji. 
 + 
 +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ů potřeb konkrétního prostředí.
  
  
Řádek 386: Řádek 861:
  
 Například pro ignorování všech souborů v cestě `path/to/your/folder/*` přidejte soubor `path/to/your/folder/.nomedia`. Například pro ignorování všech souborů v cestě `path/to/your/folder/*` přidejte soubor `path/to/your/folder/.nomedia`.
 +
 +
 +==== Nastavení tmpfs v docker-compose.yml ====
 +
 +**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í.
 +
 +=== Proč použít tmpfs v Nextcloudu ===
 +
 +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.
 +
 +=== Nastavení tmpfs v docker-compose.yml ===
 +
 +Pro přidání tmpfs do Docker Compose souboru jsem použil následující konfiguraci:
 +
 +<code yaml>
 +services:
 +  app:
 +    image: nextcloud-apache
 +    ...
 +    volumes:
 +      - type: tmpfs
 +        target: /tmp
 +        tmpfs:
 +          mode: "1777" # Volitelně: nastavení oprávnění
 +    ...
 +</code>
 +
 +Tato konfigurace:
 +
 +  * Vytváří tmpfs svazek namapovaný na `/tmp`.
 +  * Ukládá dočasná data přímo do paměti, což zrychluje zpracování.
 +  * Nastavuje oprávnění pomocí volitelného parametru **mode**, kde `1777` zajišťuje, že adresář `/tmp` je zapisovatelný pro všechny uživatele.
 +
 +=== Výhody a omezení ===
 +
 +  * **Výhody**:
 +    - Výrazně vyšší rychlost při práci s dočasnými soubory.
 +    - Snížení opotřebení disku.
 +  * **Omezení**:
 +    - Velikost tmpfs je omezena velikostí dostupné RAM.
 +    - Velké soubory nebo velké množství dočasných souborů mohou vést k vyčerpání paměti a selhání aplikace.
 +
 +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.
 +
  
  
Řádek 396: Řádek 917:
 Pro jistotu jsem ještě snížil prioritu procesu. Pro jistotu jsem ještě snížil prioritu procesu.
 {{:it:server:pasted:20250101-115915.png}} {{:it:server:pasted:20250101-115915.png}}
 +
 +
 +===== Řešení problému s připojením k databázi v Nextcloudu =====
 +
 +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:
 +
 +<code>
 +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
 +</code>
 +
 +==== Interpretace chyby ====
 +
 +  * **Nedostatek dostupných připojení**: PostgreSQL omezuje počet současně aktivních připojení k databázovému serveru. Pokud je tento počet vyčerpán, zbývající sloty jsou rezervovány pro uživatele s atributem **SUPERUSER**. To znamená, že běžné uživatelské připojení (např. používané Nextcloudem) nemůže být vytvořeno.
 +  * **Doctrine\DBAL\Exception**: Knihovna **Doctrine DBAL**, kterou Nextcloud využívá pro práci s databází, nemohla navázat připojení kvůli výše uvedenému problému.
 +  * **SQLSTATE[08006]**: Tato chyba indikuje selhání připojení k databázovému serveru.
 +
 +==== Příčina ====
 +
 +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.
 +
 +==== Řešení ====
 +
 +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:
 +
 +<code>
 +max_connections = 300
 +</code>
 +
 +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:
 +
 +<code bash>
 +sudo systemctl restart postgresql
 +</code>
 +
 +==== Doporučení ====
 +
 +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:
 +
 +<code sql>
 +SELECT * FROM pg_stat_activity;
 +</code>
 +
 +Tímto způsobem lze identifikovat potenciální problémy a optimalizovat přístup k databázi.
 +
 +
 +
 +===== Migrace dat na server Nextcloudu =====
 +
 +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.
 +
 +==== Doporučený postup ====
 +
 +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:
 +<code bash>
 +chown -R www-data:www-data /cesta/k/nextcloud/data/uživatel/files
 +</code>
 +
 +3. **Spusťte synchronizaci souborů**  
 +Nextcloud poskytuje příkaz pro synchronizaci souborů a jejich zapsání do databáze:
 +
 +<code bash>
 +docker exec -u 33 -it nextcloud php /var/www/html/occ files:scan uživatel
 +</code>
 +
 +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:
 +   - Otevřete webové rozhraní Nextcloudu.
 +   - Přihlaste se jako daný uživatel a ověřte, že jsou soubory viditelné a správně zařazené.
 +
 +==== Poznámky ====
 +
 +  * Přímý přenos souborů pomocí **rsync** je často rychlejší a efektivnější než stahování a nahrávání přes webové rozhraní.
 +  * Tento postup doporučuji provádět mimo pracovní dobu, pokud server používá více uživatelů, aby se minimalizovalo zatížení serveru.
 +
 +
  • it/server/nextcloud.1735729171.txt.gz
  • Poslední úprava: 2025/01/01 10:59
  • autor: Petr Nosek