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

2 Likes