Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
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 Nosek | it: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ů, | 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ů, | ||
+ | |||
+ | |||
+ | ===== 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:// | ||
+ | |||
+ | V mém případě stačí pracovat s URL: | ||
+ | |||
+ | < | ||
+ | davs:// | ||
+ | </ | ||
===== 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 => ' | 14 => ' | ||
15 => ' | 15 => ' | ||
+ | 16 => ' | ||
+ | 17 => ' | ||
+ | 18 => ' | ||
), | ), | ||
</ | </ | ||
Řá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 některé fotografie EXIF data nemají, Nextcloud | + | 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 |
- | Pro tento účel jsem použil nástroj | + | |
+ | 1. **Vymazání dat aplikace** | ||
+ | |||
+ | Pokud máte aplikaci Nextcloud již nainstalovanou v telefonu, postupujte takto: | ||
+ | | ||
+ | * 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. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | * **Vzdálená položka** - Vyberte složku na serveru, kam 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 pří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 při prvotním nahrávání. Po nahrání všech dat se již tato volba nepoužívá, | ||
+ | |||
+ | * **Co udělat, pokud soubor už existuje?** - Zvolte možnost **Přeskočit nahrávání**. Tím se zabrání vzniku duplicit, protože pokud soubor již na serveru existuje, aplikace jej vynechá | ||
+ | {{: | ||
===== Ú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 | + | Plugin **Face Recognition** slouží k rozpoznávání obličejů |
- | Na stránce [[https:// | + | ==== Úprava Dockerfile ==== |
- | Plánuji | + | Pro instalaci Face Recognition jsem vytvořil vlastní **Dockerfile** s čerpáním z oficiální dokumentace: |
+ | |||
+ | <code bash> | ||
+ | # | ||
+ | # Use a temporary image to compile and test the libraries | ||
+ | # | ||
+ | FROM nextcloud: | ||
+ | |||
+ | # 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:// | ||
+ | && 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:// | ||
+ | && 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 " | ||
+ | |||
+ | # 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:// | ||
+ | && cd pdlib-min-test-suite \ | ||
+ | && make | ||
+ | |||
+ | |||
+ | ARG EXT_DIR | ||
+ | RUN EXT_DIR=$(php -i | grep -oP " | ||
+ | echo $EXT_DIR > / | ||
+ | cp $EXT_DIR/ | ||
+ | # | ||
+ | # If pass the tests, we are able to create the final image. | ||
+ | # | ||
+ | |||
+ | |||
+ | |||
+ | # Vyjdeme z oficiálního obrazu Nextcloud | ||
+ | FROM nextcloud: | ||
+ | |||
+ | # 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 / | ||
+ | |||
+ | # 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 / | ||
+ | |||
+ | # If is necesary take the php extention folder (/ | ||
+ | # RUN php -i | grep extension_dir | ||
+ | #COPY --from=builder / | ||
+ | COPY --from=builder / | ||
+ | |||
+ | COPY --from=builder / | ||
+ | COPY --from=builder / | ||
+ | |||
+ | # Extract the correct path and copy the extension | ||
+ | RUN EXT_DIR=$(cat / | ||
+ | cp / | ||
+ | |||
+ | |||
+ | # Enable PDlib on final image | ||
+ | RUN echo " | ||
+ | |||
+ | # 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:// | ||
+ | # && 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:// | ||
+ | # && unzip facerecognition \ | ||
+ | # && mv facerecognition-* | ||
+ | # && cd / | ||
+ | # && make | ||
+ | |||
+ | |||
+ | # Node.js for Recognize | ||
+ | # https:// | ||
+ | |||
+ | RUN apt-get update && apt-get install -y \ | ||
+ | ca-certificates \ | ||
+ | curl \ | ||
+ | gnupg && \ | ||
+ | curl -fsSL https:// | ||
+ | echo "deb [signed-by=/ | ||
+ | apt-get update && \ | ||
+ | apt-get install -y nodejs && \ | ||
+ | apt-get clean && rm -rf / | ||
+ | </ | ||
+ | |||
+ | Kromě toho jsem do Docker Compose souboru přidal environment proměnnou: | ||
+ | |||
+ | <code yaml> | ||
+ | environment: | ||
+ | - PHP_MEMORY_LIMIT=1024M | ||
+ | </ | ||
+ | |||
+ | ==== Nastavení a spuštění ==== | ||
+ | |||
+ | Po sestavení a spuštění Nextcloudu: | ||
+ | |||
+ | <code bash> | ||
+ | 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í**: | ||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 2. **Nastavení přidělené RAM paměti**: | ||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 3. **Výběr konkrétního modelu**: | ||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | Více informací o jednotlivých modelech: https:// | ||
+ | |||
+ | 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 / | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | ==== Řešení problémů ==== | ||
+ | |||
+ | Při pokusu o skenování obličejů jednoho uživatele: | ||
+ | |||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 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í, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | A ještě je potřeba pro uživatele povolit rozpoznávání obličejů. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== 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 | ||
+ | |||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | */30 * * * * docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 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 / | ||
+ | * **-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í, | ||
+ | |||
+ | .nomedia: Pro úplné vyloučení z rozpoznávání. | ||
+ | |||
+ | Například pro ignorování všech souborů v cestě `path/ | ||
+ | |||
+ | Vycházím z [[https:// | ||
+ | |||
+ | ==== Použití Face Recognition na externím modelu ==== | ||
+ | |||
+ | Jednou z pokročilých | ||
+ | |||
+ | === 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 | ||
+ | </ | ||
+ | |||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | Model je nyní dostupný na portu 8080. | ||
+ | |||
+ | 3. **Ověření funkčnosti modelu**: | ||
+ | <code bash> | ||
+ | curl localhost: | ||
+ | </ | ||
+ | |||
+ | Očekávaný výstup: | ||
+ | < | ||
+ | {" | ||
+ | </ | ||
+ | |||
+ | 4. **Konfigurace Nextcloudu**: | ||
+ | Nastavte externí model a API klíč pomocí OCC příkazů: | ||
+ | |||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 5. **Nastavení externího modelu**: | ||
+ | <code bash> | ||
+ | docker exec -u 33 -it nextcloud php / | ||
+ | </ | ||
+ | |||
+ | 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> | ||
+ | # | ||
+ | |||
+ | set -o errexit | ||
+ | |||
+ | dir=$(pwd) | ||
+ | # your nextcloud path | ||
+ | cd / | ||
+ | sudo -u www-data php --define apc.enable_cli=1 ./occ face: | ||
+ | |||
+ | echo -n " | ||
+ | read user | ||
+ | echo "" | ||
+ | |||
+ | echo " | ||
+ | sudo -u www-data php --define apc.enable_cli=1 ./occ user: | ||
+ | echo " | ||
+ | |||
+ | echo " | ||
+ | sudo -u www-data php --define apc.enable_cli=1 ./occ face: | ||
+ | echo " | ||
+ | |||
+ | echo " | ||
+ | # 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: | ||
+ | pids[${i}]=$! | ||
+ | done | ||
+ | |||
+ | for pid in ${pids[*]}; do | ||
+ | wait $pid | ||
+ | done | ||
+ | echo " | ||
+ | |||
+ | echo " | ||
+ | sudo -u www-data php --define apc.enable_cli=1 ./occ face: | ||
+ | echo " | ||
+ | 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, | ||
+ | |||
+ | |||
+ | ==== Další příkazy pro Face Recognition ==== | ||
+ | |||
+ | === Face Analysis === | ||
+ | |||
+ | < | ||
+ | occ face: | ||
+ | </ | ||
+ | |||
+ | 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), | ||
+ | - **-M MAX_IMAGE_AREA**: | ||
+ | - **--defer-clustering**: | ||
+ | |||
+ | 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 === | ||
+ | |||
+ | < | ||
+ | occ face: | ||
+ | </ | ||
+ | |||
+ | * **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**: | ||
+ | |||
+ | === Resetování informací === | ||
+ | |||
+ | < | ||
+ | occ face:reset [--all] [--model] [--image-errors] [--clustering] [-u|--user_id USER_ID] | ||
+ | </ | ||
+ | |||
+ | * **Funkce**: Umožňuje resetovat databázi obličejů a souvisejících informací. | ||
+ | * **Parametry**: | ||
+ | - **--all**: Smaže všechny informace o obrázcích, | ||
+ | - **--model**: | ||
+ | - **--clustering**: | ||
+ | - **--image-errors**: | ||
+ | - **-u USER_ID**: Resetuje data pouze pro konkrétního uživatele. | ||
+ | |||
+ | === Migrace modelů === | ||
+ | |||
+ | < | ||
+ | occ face: | ||
+ | </ | ||
+ | |||
+ | * **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**: | ||
+ | |||
+ | === Statistiky === | ||
+ | |||
+ | < | ||
+ | occ face:stats [-u|--user_id USER_ID] [-j|--json] | ||
+ | </ | ||
+ | |||
+ | * **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 === | ||
+ | |||
+ | < | ||
+ | occ face: | ||
+ | </ | ||
+ | |||
+ | * **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ů | ||
Řádek 386: | Řádek 861: | ||
Například pro ignorování všech souborů v cestě `path/ | Například pro ignorování všech souborů v cestě `path/ | ||
+ | |||
+ | |||
+ | ==== 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ší, | ||
+ | |||
+ | === 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: " | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | 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, | ||
+ | |||
+ | === 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. | ||
{{: | {{: | ||
+ | |||
+ | |||
+ | ===== Ř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, | ||
+ | |||
+ | < | ||
+ | OC\DB\Exceptions\DbalException: | ||
+ | </ | ||
+ | |||
+ | ==== Interpretace chyby ==== | ||
+ | |||
+ | * **Nedostatek dostupných připojení**: | ||
+ | * **Doctrine\DBAL\Exception**: | ||
+ | * **SQLSTATE[08006]**: | ||
+ | |||
+ | ==== 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 `/ | ||
+ | 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: | ||
+ | |||
+ | <code bash> | ||
+ | sudo systemctl restart postgresql | ||
+ | </ | ||
+ | |||
+ | ==== 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; | ||
+ | </ | ||
+ | |||
+ | 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/ | ||
+ | |||
+ | ==== 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/ | ||
+ | |||
+ | 2. **Nastavte správná oprávnění** | ||
+ | Po nahrání souborů nastavte správného vlastníka a oprávnění, | ||
+ | |||
+ | Příklad příkazu: | ||
+ | <code bash> | ||
+ | chown -R www-data: | ||
+ | </ | ||
+ | |||
+ | 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 / | ||
+ | </ | ||
+ | |||
+ | 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ů, | ||
+ | |||
+ |