raspberry: nextcloud + caddy2 docker με caddy2 reverse proxy στο host

Τα official docker images του nextcloud έρχονται σε 2 εκδόσεις . Ένα με έναν ενσωματωμένο apache web server και ένα fpm για χρήση με οποίον web server εμείς θέλουμε και το οποίο βασίζετε στο php-fpm docker image και τρέχει fastCGI-Process οι οποίες εξυπηρετούν τις σελίδες του Nextcloud .Στα example δίνουν και ένα παράδειγμα με χρήση nginx docker image.
Εδώ θα δούμε πως να το χρησιμοποιούμε με ένα caddy2 webserver docker container το οποίο θα γυρνάει τα http requests στην FastCGI-port του container.
*Τώρα όλα αυτά προσωπικά μου φαίνονται και λίγο κινέζικα . ο βασικός λόγος που το έκανα ήταν γιατί ήθελα dockerised nextcloud και όλα όσα δοκίμασα official με apache , του linuxserver , του nextcloudpi δεν κατάφερα να τα δουλέψω όπως ήθελα . *
Πολύ πιθανόν και λόγο απειρίας
anyway αυτό το config μου δουλεψε απροβλημάτιστα με χρήση caddy2 server στο dietpi

Δημιουργια του docker-compose.yml

mkdir ncfpm
cd ncfpm
nano docker-compose.yml

paste

version: '2'
 
volumes:
  nextcloud:
  db:
  caddy_data:

services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
     image: nextcloud:fpm
     links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always

  web:
    image: caddy
    ports:
      - 8080:80
    links:
      - app
     volumes:
       - ./Caddyfile:/etc/caddy/Caddyfile
       - caddy_data:/data
     volumes_from:
       - app
     restart: always
ctrl + x
y
enter

Δημιουργία του Caddyfile στο dir που βρισκομαστε (ncfpm στο παράδειγμα μας ή όπως αλλιώς το έχεις ονομάσει)

nano Caddyfile
 :80 {
 
         root    * /var/www/html
         file_server
 
         php_fastcgi app:9000
         header {
                 # enable HSTS
                 # Strict-Transport-Security max-age=31536000;
         }
 
         redir /.well-known/carddav /remote.php/dav 301
         redir /.well-known/caldav /remote.php/dav 301
 
         # .htaccess / data / config / ... shouldn't be accessible from outside
         @forbidden {
                 path    /.htaccess
                 path    /data/*
                 path    /config/*
                 path    /db_structure
                 path    /.xml
                 path    /README
                 path    /3rdparty/*
                 path    /lib/*
                 path    /templates/*
                 path    /occ
                 path    /console.php
         }
 
         respond @forbidden 404
 
 }
ctrl + x
y
enter

Δημιουργούμε τα container

docker-compose up -d

πάμε στην localhost:8080
δημιουργούμε admin acount
σημειώνουμε τα user name / password εγώ τουλάχιστον δεν έχω βρει τρόπο να τα επαναφέρω και χρειάστηκε να κάνω rebuild όταν τα ξέχασα

allowed domains
Το container υποστηρίζει όλες τις php occ εντολές αλλά πρέπει πρώτα να δηλώσουμε user και όνομα container.

docker ps

copy container id of nextcloud:fpm

docker exec --user www-data container_id php occ config:system:set trusted_domains 2 --value=your_domain_name_here
docker stop container_id
docker start container_id

reverse proxy
αν εχεις caddy2 στο host

nano /etc/caddy/Caddyfile

add

your_domain_name:an_open_port {
    reverse_proxy localhost:8080  
}

rebuild
Σε περιπτωση που χρειαστει να κανεις rebuild τα container πρέπει να διαγράψεις οτι εχουν δημιουρησει

docker ps -a

copy cotnainer id

docker kill container_id
docker rm container_id
docker volume ls

copy volume id

docker volume inspect volume_id

copy mount point

ls mount_point

check τι εχει μεσα αν ειναι αυτο που θες να σβησεις

docker volume rm volume_id

επαναλαμβάνουμε για ncfpm_web_1 , ncfpm_app_1 , ncfpm_db_1

rebuild με

docker-compose up -d

Τα images αν θέλουμε να ξαναχτίσουμε τα ιδια δε τα διαγράφουμε προφανώς αλλά αν αφού έχουμε μια λειτουργική εγκατάσταση θέλουμε να εξοικονομήσουμε χώρο:

docker images
docker rmi image_id

Aν οι android client δεν μπορούν να κάνουν sign in ή να κανουν grant access

nano /var/lib/docker/volumes/ncfpm_nextcloud/_data/config/config.php

προσθέτουμε
'overwriteprotocol' => 'https'

mount external storage on nextcloud:fpm docker container

Το external storage app μέσα απο το nextcloud δε δούλεψε σε μένα τουλάχιστον σε κανένα container που δοκίμασα
θέλει bind mound
το επίσημο συντακτικό του docker Λινκ επίσης δε μου δούλεψε έκανα mount --bind χειροκίνητα

docker volume ls
docker volume inspect ncfpm_nextcloud

copy path

ls path/data/user_name/files/
mkdir /var/lib/docker/volumes/ncfpm_nextcloud/_data/data/user_name/files/folder_name
mount --bind /mnt/storage_name/photos /var/lib/docker/volumes/ncfpm_nextcloud/_data/data/user_name/files/folder_name
docker exec --user www-data container_id php occ files:scan --all

un mount

umount /var/lib/docker/volumes/ncfpm_nextcloud/_data/data/user_name/files/folder_name

source

5 «Μου αρέσει»

Extra tips:

Προσάρτιση External Storage στο Nextcloud μέσα από το docker-compose:

Το μόνο που έχουμε να κάνουμε είναι να προσθέσουμε στο docker compose στο app, ως var/www/html/data , τον φάκελο που επιθυμούμε. Στο παράδειγμα μου, ορίσαμε τον φάκελο nextcloud του εξωτερικού δίσκου TuxDriveA ως var/www/html/data και αφήσαμε τους υπόλοιπους φακέλους στο default volume :

app:
    image: nextcloud:fpm
    restart: always
    links:
      - db
    volumes:
      - nextcloud:/var/www/html 
      - /media/TuxDriveA/nextcloud:/var/www/html/data #new_line for our external storage
    environment:
      - MYSQL_PASSWORD=xxxx
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

Χρήση με domain name:

Αν χρησιμοποιείτε το Caddy με domain name, αντί για ΙΡ και πόρτα, μπορείτε να ορίσετε τον server:

cloud.v.flix {
    tls internal
    reverse_proxy localhost:8080
}

Απενεργοποίηση του http και ανακατεύθυνση προς https:

Για να πραγματοποιηθεί αυτό, πρέπει να προσθέσετε τις παρακάτω γραμμές στο αρχείο config/config.php αρχείο του nextcloud, κάτω από τα trusted_domains:

'trusted_domains' => 
  array (
    0 => '192.168.1.210:8080',
    2 => 'cloud.v.flix',
  ),
# από εδώ και πέρα προσθέτετε ό,τι χρειάζεται:
'overwriteprotocol' => 'https',
'overwritewebroot' => '/',
overwrite.cli.url' => 'https://cloud.v.flix', #your domain name/ ip port?
'trusted_proxies' => ['192.168.1.210'], #your ip

Χρήση ενός φακέλου στο NextCloud και σε άλλες υπηρεσίες ταυτόχρονα (Not Recommended, but it works):

Ας υποθέσουμε ότι έχουμε έναν κοινό φάκελο, τον οποίο έχουμε σε περισσότερες από μία υπηρεσίες και θέλουμε να δώσουμε τα ίδια δικαιώματα, προσαρτώντας τες ταυτόχρονα και σις 2 υπηρεσίες.

Δημιουργούμε κοινή ομάδα:

sudo groupadd union

Προσθέτουμε σε αυτή τον χρήστη που θα βάζει αρχεία στον φάκελο καθώς και στου www-data:

sudo usermod -aG union user1 
sudo usermod -aG union user2

Δίνουμε στο group union την ιδιοκτησία του φακέλου:

sudo chown :union /path/to/folder

Δίνουμε δικαίωμα ανάγνωσης, εγγραφής ανάγνωσης στον ιδιοκτήτη και στην ομάδα:

sudo chmod 770 /path/to/folder

Παίρνουμε το guid της ομάδας από τον host:

getent group union

Θέτουμε το guid στο nextcloud container:

groupmod -g 1011 www-data #Οπού 1011 βάζετε το δικό σας guid

Επανασάρωση αρχείων στο nextcloud:

Παίρνουμε /bin/bash στο container του nextcloud και δίνουμε:

 su -s /bin/sh -c "php occ files:scan --all" www-data
4 «Μου αρέσει»

Επιλογη datatbase

Το nextcloud default θα χρησιμοποιείσει την sqlite.

Για καλυτερο performance μπορούμε να επιλέξουμε mysql ή postgres στο initial setup.

Έχουμε προσθέσει το directive της mariadb που ειναι μια mysql database στο docker-compose.

Πρεπει να πούμε στο nextcloud να την χρησιμοποιήσει.

Απο το storage & database στο initial setup, επιλέγουμε mysql και συμπληρώνουμε τα:

MYSQL_PASSWORD
MYSQL_DATABASE
MYSQL_USER

Όπως τα συμπληρωσαμε και στο compose.

Στο database url πρεπει να βάλουμε το container name της database και την port που τρέχει εσωτερικά στο container, δεν χρηαζεται να κάνουμε expose την port της mariadb στο host.

Τις συγκεκριμένες πληροφορίες της βλέπουμε με:

docker ps

Στην περίπτωση μου ειναι:

440d29c62efc   mariadb                                       "docker-entrypoint.s…"   About an hour ago   Up About an hour        3306/tcp                                              nextcloud-nc-db-1

Αρα λοιπον στο database url field του initial setup του nextcloud θα βάλω:

nextcloud-nc-db-1:3306

Αν έχεις επιλέξει admin user και ολοκληρώσεις το setup χωρίς να προλάβεις να επιλέξεις database μπορείς να διαγραψεις τον φάκελο data και το αρχείο config/config.php και να προσθέσεις το αρχείο config/CAN_INSTALL και να ξανατρεξεις το compose ώστε να ξαναξεκινησεις το initial setup απο την αρχή.

Επίσης μπορείς να κανεις convert την db απο το nextcloud cli

4 «Μου αρέσει»