Setup Nextcloud 29 for private photo/video storage and sharing using Ubuntu and docker compose on Intel NUC minipc
...
(and some other) mini PC
Tested on hardware
- Topton N200 router (4 core [4E] N100, 16GB, 2TB nvme) + Ubuntu 24.04
- Intel(R) Client Systems NUC10i7FNK (6 core [6P] i7-10710U, 64GB, 4TB nvme) + Ubuntu 24.04 noble
- Topton i7-1355U router (10 core [2P/8E] i7-1355U,32GB, 4TB nvme) + Ubuntu 24.04
Docker install
https://docs.docker.com/engine/install/ubuntu/
...
Code Block |
---|
server { listen 80; server_name cloud.example.com; return 301 https://$server_name$request_uri; location / { } } server { #listen 443 quic; listen 443 ssl; http2 on; server_name cloud.example.com; ssl_certificate /docker/etc/ssl/private/key-and-certificates.pem; ssl_certificate_key /docker/etc/ssl/private/key-and-certificates.pem; client_max_body_size 16G; client_body_timeout 600s; add_header Strict-Transport-Security 'max-age=15552000; includeSubDomains'; ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; ssl_session_cache shared:SSL:20m; ssl_session_timeout 1h; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate "/docker/etc/ssl/certs/my-certificate-authotities.ca"; resolver 1.1.1.1 8.8.4.4 valid=300s; resolver_timeout 5s; location ^~ /.well-known { location = /.well-known/carddav { return 301 /remote.php/dav/; } location = /.well-known/caldav { return 301 /remote.php/dav/; } location /.well-known/acme-challenge { try_files $uri $uri/ =404; } location /.well-known/pki-validation { try_files $uri $uri/ =404; } return 301 /index.php$request_uri; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { #add_header alt-svc 'h3-27=":443"; ma=86400, h3-28=":443"; ma=86400, h3-29=":443"; ma=86400, h3=":443"; ma=86400'; add_header X-protocol $server_protocol always; include /etc/nginx/mime.types; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://192.168.0.1:8880; } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
services: web: image: nginx container_name: cloud-web restart: always ports: - 80:80 - 443:443/tcp - 443:443/udp - 8080:8080 volumes: - /docker/etc/nginx:/etc/nginx - /docker/etc/ssl:/etc/ssl:ro - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro db: image: mariadb:10.11.7 container_name: cloud-db restart: always command: --transaction-isolation=READ-COMMITTED --log-bin=mysqld-bin --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed --log_bin_trust_function_creators=true volumes: - /docker/mariadb/var/lib/mysql:/var/lib/mysql:rw - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - type: tmpfs target: /tmp environment: - MYSQL_ROOT_PASSWORD=db_admin_pass - MYSQL_PASSWORD=db_user_pass - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MARIADB_AUTO_UPGRADE=yes - REDIS_HOST=redis - REDIS_PORT=6379 redis: image: redis:alpine container_name: cloud-cache restart: always app: image: nextcloud:29.0.1 container_name: cloud-server hostname: cloud.example.com restart: always ports: - 8880:80 links: - db - redis volumes: - /docker/nextcloud/var/www/html:/var/www/html:rw - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - type: tmpfs target: /tmp:exec devices: - /dev/dri:/dev/dri environment: - MYSQL_PASSWORD=db_user_pass - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db - OVERWRITEHOST=cloud.example.com - OVERWRITEPROTOCOL=https - NEXTCLOUD_ADMIN_USER=nc_admin_user - NEXTCLOUD_ADMIN_PASSWORD=nc_admin_pass - NEXTCLOUD_UPLOAD_LIMIT=20G - PHP_UPLOAD_LIMIT=32G - PHP_MEMORY_LIMIT=32G - APACHE_BODY_LIMIT=0 |
...
Code Block |
---|
apt update apt install -y --allow-unauthenticated sudo vim git wget exiftool vainfo intel-media-va-driver-non-free ffmpeg # add HW media conversion support (for Intel graphics) # group id to be checked on host system groupadd -g 993 render groupadd -g 109 render2 usermod -a -G video www-data usermod -a -G render www-data usermod -a -G render2 www-data |
install some tools and compile ImageMagick
Code Block |
---|
# Compile latest ImageMagick apt install -y build-essential autoconf libtool apt build-dep -y imagemagick libmagickcore-dev libde265 libheif cd /usr/src/ git clone https://github.com/strukturag/libde265.git git clone https://github.com/strukturag/libheif.git cd libde265/ ./autogen.sh ./configure make -j 6 make install cd /usr/src/libheif/ ./autogen.sh#git checkout develop-v1.18.0 mkdir build cd build cmake --preset=release .. ./configure make -j 6 make install cd /usr/src/ #wget https://www.imagemagick.org/download/ImageMagick.tar.gz #wget https://imagemagick.org/download/ImageMagick.tar.gz #wget https://imagemagick.org/archive/ImageMagick.tar.gz wget https://download.imagemagick.org/archive/ImageMagick.tar.gz tar xf ImageMagick.tar.gz cd ImageMagick-7* ./configure --with-heic=yes make -j 6 make install ldconfig |
...
Code Block |
---|
cd /var/www/html
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install memories"
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install recognize"
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install previewgenerator"
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install workflow_media_converter"
#sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install imageconverter"
#sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ app:install video_converter"
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ recognize:download-models"
sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ memories:places-setup"
|
in case memories:place-setup fail see https://memories.gallery/troubleshooting/#general-error-2006-mysql-server-has-gone-away and transaction-size can be reduced to avoid this error
Code Block |
---|
default places-setup transaction-size is 500 sudo -u www-data /bin/bash -c "PHP_MEMORY_LIMIT=512M ./occ memories:places-setup --transaction-size=100 |
use facerecognition instead of recognize
...
cli for facerecognition
Code Block | ||
---|---|---|
| ||
/usr/bin/docker exec cloud-server sudo -u www-data /bin/bash -c "./occ face:reset --all" /usr/bin/docker exec cloud-server sudo -u www-data /bin/bash -c "./occ face:stats" /usr/bin/docker exec cloud-server sudo -u www-data /bin/bash -c "./occ face:progress" /usr/bin/docker exec cloud-server sudo -u www-data /bin/bash -c "./occ face:background_job -t 900" |
...