Self Hosted Cloud Server | Μέρος 5

Συνεχίζουμε με το πέμπτο μέρος της σειράς Self Hosted Cloud Server, στο οποίο θα ρυθμίσουμε την πρόσβαση στον Server μας να επιτρέπει την πρόσβαση από έξω και στην συνέχεια θα εγκαταστήσουμε τo Nextcloud για αντικατάσταση του Google Drive και το Immich για αντικατάσταση του Google Photos.

Την σειρά οδηγών Self Hosted Cloud Server γράφει ο φίλος Μητσaker. Θα τα βρείτε όλα στο link : Cosmos Server.
Αν θέλετε και εσείς να συνεισφέρετε μπορείτε να δείτε τους τρόπους : Συνεισφορά στο Cerebrux

Σε αυτή την φάση, υποθέτουμε ότι έχετε τελειώσει την εγκατάσταση και ρύθμιση του Ubuntu Server και όπως είπαμε στο τέταρτο μέρος:

  • εγκατάσταση του Cosmos Server
  • πρώτες ρυθμίσεις
  • εξοικείωση με το περιβάλλον χρήσης του

Cloudflare DDNS

Στην παλιότερη σειρά Home Server που είχαμε δημοσιεύσει, είδαμε πως μπορούμε να έχουμε πρόσβαση από οπουδήποτε στον προσωπικό server που τρέχουμε στο σπίτι ή το γραφείο μας χρησιμοποιώντας το DuckDNS.

Στην περίπτωσή μας, με τον Cosmos Server θα χρησιμοποιήσουμε την υπηρεσία Cloudflare DDNS και συγκεκριμένα το λογαριασμό που είχαμε φτιάξει στο πρώτο μέρος της σειράς «Self Hosted Cloud Server»

Πάμε λοιπόν στον Cloudflare λογαριασμό μας για να παράξουμε ένα κλειδάριθμο. Αυτό το Token το λαμβάνουμε μέσα από την Cloudflare, κάνοντας κλικ στο MyProfile->API Token->Create token χρησιμοποιώντας το template ‘Edit Zone DNS’ και στα Zone sources, επιλέγουμε το domain μας.

Έπειτα πάμε μέσα από το ‘Cosmos->Market->import compose file’ και προσθέτουμε το παρακάτω:

version: "3"
services:
  cloudflare-ddns:
    image: favonia/cloudflare-ddns:latest
    network_mode: bridge
    restart: always
    cap_add:
      - SETUID
      - SETGID
    cap_drop:
      - all
    read_only: true
    security_opt:
      - no-new-privileges:true
    environment:
      - PUID=1000
      - PGID=1000
      - CF_API_TOKEN=to-token-moy
      - DOMAINS=*.123.xyz, 123.xyz
      - PROXIED=false
      - IP6_PROVIDER=none

όπου στην γραμμή 18 εκεί που λέει to-token-moy το αντικαθιστούμε με το δικό μας.

Διαφημίσεις

Εγκατάσταση Nextcloud στο Cosmos Server

Πάμε στο Cosmos Market και ψάχνουμε το Nextcloud. Βάζουμε το σωστό Hostname με αυτό του subdomain που δημιουργήσαμε στην Cloudflare πχ nextcloud.123.xyz. Υπενθυμίζουμε πως εάν πάμε με τη μέθοδο του ενός ‘A’ record της μορφης ‘*.123.xyz’ , δε χρειάζεται να ασχοληθούμε ξανά με την Cloudflare οπότε αν έχετε βάλει ένα catchall στο cloudflare, δεν χρειάζεται να το δηλώσετε και εκεί αλλά μόνο στο Cosmos Server.

υπάρχει η πιθανότητα να μη σου επιτραπεί, από την Cloudflare, η χρήση της διεύθυνσης nextcloud.123.xyz γιατί πρόκειται για δημοφιλή εφαρμογή και θα γίνει εύκολος στόχος κακόβουλων ενεργειών. Αντί αυτού, επέλεξε π.χ το myNC.123.xyz

Στην περίπτωση που ενεργοποιήσουμε το Authentication Required μέσα από Cosmos->URLs->Nextcloud->Security, δε θα έχουμε πρόσβαση από την εφαρμογή του κινητού. Αυτό προσθέτει ένα έξτρα σημείο αυθεντικοποίησης το οποίο δεν χρειάζεται όταν δουλεύουμε mobile εφαρμογές. Έτσι, τουλάχιστον γιαυτό το container, το απενεργοποιούμε.

Στο Home του Cosmos, εμφανίζονται οι εγκατεστημένες εφαρμογές μόνο εάν τους έχουμε δώσει URL για πρόσβαση από το internet. Παρατηρούμε πως στο παρακάτω screenshot δεν εμφανίζεται το ‘cloudflare-ddns’ επειδή δεν απαιτείται να του δώσουμε URL

cosmos server home screen εφαρμογές

Επιλέγοντας το εικονίδιο του Nextcloud, ανοίγει η αρχική του σελίδα και δημιουργούμε το Admin Account. Προαιρετικά, μπορούμε να εγκαταστήσουμε και τις προτεινόμενες εφαρμογές του.

Μπορούμε να αυξήσουμε (ανάλογα πάντα με το hardware του server) το μέγιστο ποσό μνήμης που μπορεί να χρησιμοποιήσει η PHP για την εκτέλεση ενός σεναρίου καθώς και το μέγιστο μέγεθος αρχείου που μπορεί να μεταφορτωθεί στο Nextcloud μέσω του browser μας:

ServApps->View Nextcloud Stack->View Nextcloud Details->Docker και ενδεικτικά, παραμετροποιούμε τα PHP_MEMORY_LIMIT σε 2G και PHP_UPLOAD_LIMIT σε 16G

php memory php upload limit

Έπειτα στο Nextcloud μας, πάμε στο Settings του για να δούμε την κατάσταση του Nextcloud. Εάν έχουμε μήνυμα στο Administration settings->Overview:
“Server has no maintenance window start time configured. This means resource intensive daily background jobs will also be executed during your main usage time. We recommend to set it to a time of low usage, so users are less impacted by the load caused from these heavy tasks” τότε, δίνουμε ως root το (μέσω SSH από το PC):

docker exec -it -u 33 Nextcloud /var/www/html/occ config:system:set maintenance_window_start --type=integer --value=1

Εάν έχουμε μήνυμα πως απουσιάζει το Phone Region από την εγκατάστασή μας, τότε δίνουμε το:

docker exec --user www-data -it Nextcloud php occ config:system:set default_phone_region --value=“GR”

Επίσης, μια σημαντική ρύθμιση είναι να ορίσουμε μια τακτική εκτέλεση των αυτόματων διεργασιών cron που θέλει το Nextcloud. Πάμε Administration settings->Basic settings->Background jobs, επιλογή cron και δημιουργία ενός sudo crontab -e και προσθέτουμε το παρακάτω:

*/5 * * * * docker exec -u www-data Nextcloud php -f /var/www/html/cron.php

που σημαίνει πως η παραπάνω εργασία θα εκτελείται ως εργασία διαχειριστή, κάθε 5 λεπτά, κάθε ώρα, κάθε ημέρα του μήνα, κάθε μήνα και κάθε ημέρα της εβδομάδας.

Εάν μετά από μια αναβάθμιση του Nextcloud container, δούμε την παρακάτω εικόνα

είναι πιθανόν να έχει προκληθεί από κάποια εγκατεστημένη επιπρόσθετη εφαρμογή και χρειάζεται να δώσουμε:

docker exec --user www-data -it Nextcloud php occ upgrade

Έπειτα και από το τελευταίο βήμα του παραπάνω ‘fault finding’, θα πρέπει να δούμε την εξής σελίδα μέσα στο Administration settings->Overview

Administration settings Overview Nextcloud

Μετά από ανέβασμα, ακόμα και μικρών αρχείων που κάνουν όμως πολλαπλά request για το χρήστη μας (δηλαδή την public IP μας), υπάρχει βεβαιότητα πως θα ενεργοποιηθεί το Smart Shield του Cosmos και θα αποκλειστούμε από τις αρχικές μας σελίδες, με το μήνυμα ‘Too many requests’ μέσα σε μαύρη οθόνη. εάν αποκλειστούμε και από την αρχική σελίδα του Cosmos, μπορούμε να δώσουμε ένα :

docker restart cosmos-server

αντί να κάνουμε ενέργειες για την ανανέωση (π.χ restart στο router, χρήση VPN, κλπ) της public IP μας. Αυτό μπορεί να συμβεί ακόμα και όταν κάνουμε import τις επαφές μας από ένα αρχείο vcf!

Τότε, πηγαίνουμε στο Cosmos->URLs->Nextcloud->Security και απενεργοποιούμε ή παραμετροποιούμε το Smart Shield, δίνοντας μεγαλύτερα περιθώρια στα user requests. Για παράδειγμα, θέτουμε τα Policy Strictness σε Lenient , το Per User Request Limit σε 12000 (6000 το default για το 0) και Per User Simultaneous Connections Limit σε 50 (24 το default για το 0). Έπειτα, κάνουμε restart το stack του Nextcloud και ξαναδοκιμάζουμε.

Per User Simultaneous Connections Limit

Εάν απαιτηθεί η εκ νέου εγκατάσταση του Nextcloud και δε θέλουμε να χάσουμε τα αρχεία μας (ουσιαστικά να κάνουμε restore):
Μια εύκολη λύση είναι, μέσω SFTP να μετονομάζουμε το φάκελο του χρήστη του Nextcloud, από xrhsths σε xrhsths1, να δημιουργήσουμε ένα νέο χρήστη Admin με όνομα xrhsths (ίδιο με πρίν) από την αρχική σελίδα του Nextcloud και με τα ίδια credentials που είχαμε πριν, για ευκολία, να διαγράψουμε το φάκελο xrhsths, να μετονομάσουμε το φάκελο xrhsths1 (που περιέχει όλα τα αρχεία μας) σε xrhsths και να δώσουμε την εντολή για την ανανέωση της βάσης δεδομένων: (μέσω SSH από το PC)

docker exec -it -u 33 Nextcloud /var/www/html/occ files:scan --all

 ή μπορούμε να μεταφέρουμε όλα τα αρχεία μας από το xrhsths1 στο xrhsths και να διαγράψουμε το φάκελο xrhsths1:
(μέσω SSH από το PC)
rsync -a --progress /mnt/data/nextcloud-data/xrhsths1/ /mnt/data/nextcloud-data/xrhsths/Το flag -a είναι για να μη χαθούν τα δικαιώματά των αρχείων και φακέλων που μεταφέρουμε.
Και σε αυτή την περίπτωση, δεν ξεχνάμε να δώσουμε την εντολή (εν αντιθέσει με το Immich που θα δούμε παρακάτω):
docker exec -it -u 33 Nextcloud /var/www/html/occ files:scan --all για να ανανεωθεί η db του Nextcloud .

Με rsync μπορούμε να μεταφέρουμε αρχεία και φακέλους μέσα στη διαδρομή των data του Nextcloud μέσω του τοπικού δικτύου, χωρίς την ανάγκη του upload τους μέσα από το UI και τη σύνδεση του internet, παράδειγμα μεταφοράς φακέλου ‘immich docker’ από το PC στο Server:
rsync -av immich\ docker root@192.168.1.xxx:/mnt/data/nextcloud-data/xrhsths/files/
Για να ανανεωθεί η db, δίνουμε ως root:
(μέσω SSH από το PC)
docker exec -it -u 33 Nextcloud /var/www/html/occ files:scan --all

Διαφημίσεις

Εγκατάσταση Immich στο Cosmos Server

Το Nextcloud, αποτελεί μία ολοκληρωμένη λύση cloud server. Παρόλα αυτά και επειδή θέλουμε το κάτι παραπάνω, θα χρησιμοποιήσουμε το Immich για τη διαχείριση των φωτογραφιών-βίντεο.

Από το Nextcloud, κρατάμε το cloud storage όπως και το ημερολόγιο και τις επαφές όπου μπορούμε να τα διαχειριστούμε και μέσω DavX5 σε android συσκευές.

Δημιουργούμε μια διαδρομή της αρεσκείας μας στο Server (πχ /home/immich-docker) και μπαίνουμε μέσα στον φάκελο. Κατεβάζουμε την τελευταία έκδοση του docker-compose αρχείου

wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

στην συνέχεια δημιουργούμε το κρυφό αρχείο .env:

# Περιεχόμενα αρχείου .env
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/data/immich-library

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
DB_PASSWORD=isxyro_password

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=xrhsths
DB_DATABASE_NAME=xrhsths

REDIS_HOSTNAME=immich_redis

Όπως θα παρατηρήσετε αυτά τα δύο αρχεία έχουν κάποια πεδία που πρέπει να αλλάξουμε όπως Passwords κλπ. οπότε προσαρμόστε τα στις ανάγκες σας. Έπειτα και ενώ είμαστε μέσα στο φάκελο που δημιουργήσαμε:

docker compose up -d

Για πρόσβαση του ‘Immich’ από το internet, δίνουμε URL στο container ‘immich-server’ μέσα από το Cosmos->ServApps->Containers->immich(View Stack)

Εάν έχουμε φωτογραφίες και βίντεο στο Google photos, τότε μπορούμε να χρησιμοποιήσουμε το εργαλείο immich-go στο PC, και το google takeout ώστε να κατεβάσουμε μαζικά τα άλμπουμ μας σε μορφή ‘.zip’,των 2GB έκαστος. Τα ‘.zip’ το βάζουμε στο φάκελο που αποσυμπιέσαμε το ‘immich-go_Linux_x86_64.tar.gz’.

Mε την εντολή:

immich-go -server=http://SERVER_IP:PORT -key=XXXXAPIKEYGOESHEREXXXXXXXX upload -dry-run -create-albums -google-photos takeout-*.zip

βλέπουμε εάν όλα δουλεύουν σωστά καθώς και λοιπές πληροφορίες για σφάλματα που ενδέχεται να προκύψουν, πληροφορίες για φωτογραφίες και βίντεο που είναι ήδη στο Server κλπ οπότε αν όλα είναι όπως τα θέλουμε, τρέχουμε την ίδια εντολή χωρίς όμως την παράμετρο -dry-run

Το -key, το παίρνουμε από το web UI του Immich, Profile->Account Settings->API keys->New API Key. Η εντολή: immich-go μπορεί να επιστρέψει: zsh: command not found: immich-go, τότε θα πρέπει να την προσθέσουμε στο αρχείο ρυθμίσεων του κελύφους μας με:

export PATH=$PATH:/diadromh/toy/aposympiesmenoy/arxeioy

Backup & Restore Immich

Αφού έχουμε δημιουργήσει το νέο χρήστη admin και έχουν ολοκληρωθεί τα uploads,
(μέσω SSH από το PC )

docker exec -t immich_postgres pg_dumpall -c -U xrhsths | gzip > "/mnt/data/immich-library-backup/dump.sql.gz

Το βήμα του backup είναι απαραίτητο και πρέπει να εκτελείται σε τακτά διαστήματα.

Σε αντίθεση με τη φιλοσοφία του Nextcloud, οπού εκεί υπάρχει το σπουδαίο εργαλείο ‘occ’ που αναπαράγει, πλην των άλλων λειτουργιών, τη βάση δεδομένων ακόμα και μετά από ένα απλό drag & drop αρχείων μέσω SFTP, εδώ, η βάση δεδομένων τροποποιείται κάθε φορά που κάνουμε μια μεταφόρτωση και δεν υπάρχει τρόπος-εργαλείο να αναπαραχθεί από τα υπάρχοντα αρχεία, παρά μόνο με restore του backup της.

Εάν δεν έχουμε κρατήσει τουλάχιστον ένα backup και συμβεί κάποια δυσλειτουργία στο container της Postgres (π.χ μετά από μία ανεπιτυχή αναβάθμιση), θα βρεθούμε στη δυσάρεστη θέση να μην έχουμε πρόσβαση στα αρχεία μας μέσω Web UI και εφαρμογής του Immich, παρόλο που εκείνα υπάρχουν στο tree που σχηματίστηκε μέσα στο ‘/mnt/data’.

Η μόνη λύση τότε, είναι η χειροκίνητη ανάκτηση φωτογραφιών & video μέσα από φακέλους και υποφακέλους, και η εκ νέου μεταφόρτωσή τους με τον προβλεπόμενο τρόπο. Εάν είχαμε 100 φωτογραφίες, αυτό θα ήτανε υπόθεση μίας ώρας. Όταν όμως έχουμε να κάνουμε με 15.000 φωτογραφίες και video, τότε η δημιουργία αντιγράφων ασφαλείας της βάσης δεδομένων, καθίσταται ανελαστική και αδιαπραγμάτευτη.

Για restore, τις εντολές όλες μαζί μέσα από τη διαδρομή (/home/immich-docker) που δημιουργήσαμε για τα αρχεία docker-compose.yml και ‘.env’.:

docker compose down -v # Διαγράφει containers+volumes+network  
docker compose pull # Κάνει pull τα images  
docker compose create # Δημιουργεί τα containers χωρίς να τα τρέξει  
docker start immich_postgres # Εκκινεί το postgres container  
sleep 10 # Περιμένει 10" μέχρι να ολοκληρωθεί η εκκίνηση  
gunzip < "/mnt/data/immich-library-backup/dump.sql.gz" | docker exec -i immich_postgres psql -U xrhsths -d xrhsths # Κάνει επαναφορά του αντιγράφου ασφαλείας  
docker compose up -d # Εκκινεί τα υπόλοιπα containers του stack

Εάν το backup γίνει μέσω του container ‘immich_db_dumper’ στο τέλος του docker-compose.yml, τότε η παραπάνω εντολή τροποποιείται στη γραμμή για την επαναφορά και γίνεται ως εξής (ώστε να υποδεικνύει τη διαδρομή του τελευταίου backup):

gunzip < mnt/data/immich-library-backup/last/xrhsths-latest.sql.gz | docker exec -i immich_postgres psql -U xrhsths -d xrhsths

Για την αναβάθμιση του Immich, θα έχουμε ειδοποίηση είτε στο web UI με pop-up παράθυρο, είτε μέσα από την εφαρμογή του κινητού με ένα πορτοκαλί θαυμαστικό στο avatar.

Ακολουθούμε τις οδηγίες του developer για να μην έχουμε πρόβλημα. Οι αναβαθμίσεις γίνονται, συνήθως, με περιήγηση στο φάκελο με τα αρχεία ‘docker-compose.yml’ και ‘.env’ μέσα στο Server και τις εντολές:  docker compose pull για μεταφόρτωση των νέων images και: docker compose up -d για τη δημιουργία και την εκκίνηση των containers, ενώ λιγότερο συχνά, θα χρειαστεί να τροποποιήσουμε το αρχείο ‘.yml’, κατά τις υποδείξεις και τις οδηγίες του.

Μέχρι το επόμενο μέρος, συνεχίστε τους πειραματισμούς σας με τις εφαρμογές του Cosmos Cloud

2 σκέψεις σχετικά με το “Self Hosted Cloud Server | Μέρος 5

  1. Μια διόρθωση στο compose για το cloudflare dns

    «όπου στην γραμμή 18 εκεί που λέει to-token-moy το«

    πρέπει να αναφερθεί ότι θα πρέπει να αλλαχθεί και το 123.xyz με το domain του χρήστη.

    1. Δεν χρειάζεται εφόσον έχει catchall στο cloudflare δεν χρειάζεται. Θα τα αναλάβει το reverse proxy με το URL που θα βάλουμε στην εφαρμογή μας

Σου άρεσε το άρθρο; Πες την άποψή σου... έστω και Ανώνυμα: