Το άρθρο αυτό αποτελεί μέρος της σειράς Raspberry Pi Server, υποστηριζόμενο από την επίσημη αντιπροσωπία του Raspberry Pi στην Ελλάδα, το nettop.gr το οποίο με προμήθευσε με το Raspberry Pi 5 ώστε να δημιουργήσω περισσότερο περιεχόμενο για τις δυνατότητες και τα Project που μπορούν να τρέξουν self-hosted πάνω στο Raspberry Pi στα Ελληνικά. Ευχαριστώ πάρα πολύ το nettop.gr για την υποστήριξη!!!
Jellyfin : Στήνουμε το δικό μας Selfhosted Media System για streaming βίντεο και φωτογραφιών μέσω Container
Disclaimer: Ο οδηγός αυτός αφοράει την ταξινόμηση και προσωπική χρήση οπτικοακουστικού υλικού που διαθέτουμε νόμιμα αγορασμένο. Δεν προτείνεται ούτε παροτρύνεται η χρήση του για παραβίαση πνευματικών δικαιωμάτων, κάτι που είναι παράνομο και κατακριτέο. Σεβόμαστε την εργασία των ανθρώπων που δούλεψαν σκληρά έτσι ώστε να απολαμβάνουμε το οπτικοακουστικό υλικό σε προσιτές τιμές, χωρίς να οδηγούμε ανθρώπους προς την αλλαγή καριέρας λόγω οικονομικών δυσκολιών.
Ο οδηγός αυτός λειτουργεί σε όλα τα συστήματα όπου υποστηρίζονται Containers, εκτός των Raspberry Pi;
Φυσικά, μιας και είναι σε μορφή Container, ο οδηγός αυτός μπορεί να εφαρμοστεί σε κάθε υπολογιστή οπού μπορεί να διαχειριστεί containers.
Σε ποια Container Engines ο οδηγός έχει δοκιμαστεί ως προς την συμβατότητά του;
Για όποιον θέλει να μάθει τι είναι το Docker, οπού αποτελεί την μεγάλη “ναυαρχίδα” των Containers, υπάρχει ήδη στο Linux-User.gr ένας πολύ αναλυτικός οδηγός: , οπού εμπεριέχει αναλυτικότερες πληροφορίες σχετικά με τις τεχνολογίες αυτές.
Επιπλέον, όποιος θέλει να μάθει περισσότερα για το Podman, ως έναν root-less διαχειριστή Container, μπορεί να κάνει κλικ εδώ:
Αφού σχολιάσαμε αυτά, πάμε πίσω στο Jellyfin:
Γιατί να selfhostάρουμε το Jellyfin;
- Για να μπορούμε να streamάρουμε σε όλες τις συσκευές μας τις ταινίες, σειρές ή μουσική, βιβλία και βίντεο όπου έχουμε αγοράσει νόμιμα σε αναλογική μορφή (κασέτες, CDs, DVDs κλπ…) με στόχο να μπορούμε να τις απολαύσουμε από όποια συσκευή επιθυμούμε.
- Για να μπορέσουμε να streamάρουμε προσωπικές μας φωτογραφίες και βίντεο σε όλες τις συσκευές του δικτύου,
- Για να οργανώσουμε όμορφα σε ένα όμορφο περιβάλλον όλο το ψηφιακό μας υλικό,
- Γιατί η Αυτονομία και η Αποκέντρωση είναι το μέλλον - κάτι που όπως έχετε καταλάβει μέσα από τις δράσεις μου τόσο στο Fediverse, όσο και Blockchain και Selfhosted Servers, το έχω θέσει ως φιλοσοφία ζωής.
Τι προτείνουμε;
- Να προμηθευτείτε έναν σκληρό δίσκο (ακόμα και εξωτερικό) αρκετών Terabytes έτσι ώστε να έχετε μεγάλη άνεση να αποθηκεύετε ό,τι αρχεία θέλετε. Σε αυτό το σημείο βέβαια θα πρέπει να επισημανθεί πως λόγω της σχεδίασης των volumes σε containers, θα μπορείτε ανά πάσα στιγμή πάρα πολύ εύκολα να κάνετε μεταφορά σε έναν μεγαλύτερο δίσκο , απλά μεταφέροντας το volume που θα δούμε παρακάτω στο compose, με rsync σε άλλο φάκελο/δίσκο και απλά αλλάζοντας στο compose την θέση του volume αυτού. Και έτσι εύκολα και απλά, προσθέτουμε περισσότερο χώρο στο Jellyfin για περισσότερα πολυμέσα.
Ας ξεκινήσουμε:
Η διαδικασία είναι εξαιρετικά πολύ απλή μιας και έχω ετοιμάσει docker-compose.yml αρχείο, όπως είχαμε δει και στο Access Point Docker Container.
Απλά δημιουργούμε έναν φάκελο, όπου μέσα σε αυτόν δημιουργούμε ένα αρχείο με όνομα docker-compose.yml
:
nano docker-compose.yml
Και κάνουμε copy-paste το παρακάτω:
version: '3.8'
services:
jellyfin:
image: jellyfin/jellyfin:latest #Χρησιμοποιούμε την τελευταία έκδοση του jellyfin
container_name: jellyfin #Ονομάζουμε το όνομα του container ως jellyfin
networks: #Προαιρετικό από εδώ και κάτω, μέχρι τον ορισμό της στατικής IP: Ορίζουμε το υποδίκτυο όπου θα τρέχει το jellyfin, χρήσιμο αν το έχουμε μαζί με reverse proxy.
caddy_tuxapps:
ipv4_address: 172.20.0.4
ports:
- "8096:8096" # H HTTP πόρτα όπου θα τρέχει το jellyfin
- "8920:8920" # H HTTPS πόρτα όπου θα τρέχει το jellyfin
volumes:
#Εδώ ορίζουμε τα volumes όπου θα βρίσκονται τα χρήσιμα αρχεία ρυθμίσεων του jellyfin καθώς και ο χώρος όπου είναι αποθηκευμένα τα αρχεία όπου θέλουμε να βλέπουμε από το Jellyfin
- "/media/test/services/vflix/config:/config" # Οι ρυθμίσεις του Jellyfin
- "/media/test/services/vflix/cache:/cache" # Η cache του Jellyfin
- "/media/test/services/vflix/media:/media" # Ο φάκελος όπου θα αποθηκεύονται τα πολυμέσα όπου θα θέλουμε να βλέπουμε στο jellyfin. Ίσως να χρειαζόμαστε εξωτερικό δίσκο εδώ. Σε περίπτωση migration σε μεγαλύτερο δίσκο, αλλάζουμε τον προορισμό των παραπάνω φακέλων και κάνουμε ξανά deploy το container.
restart: unless-stopped
#Προαιρετικό όπως και το πάνω
networks:
caddy_tuxapps:
external: true
Kαι δημιουργούμε το container δίνοντας από τερματικό: (ενώ βρισκόμαστε στον φάκελο όπου βρίσκεται το docker-compose.yml
):
docker-compose up -d
Αντίστοιχα, για Podman δίνουμε:
podman-compose up -d
Πρώτη Εκτέλεση του Jellyfin
Την πρώτη φορά που θα επισκεπτούμε το Jellyfin από την πόρτα 8096 (για http) ή 8920 (για https) θα τρέξει αυτόματα ο οδηγός εγκατάστασης.
Επιλέγουμε γλώσσα εγκατάστασης:
Έπειτα δημιουργούμε λογαριασμό διαχειριστή:
Έπειτα δημιουργούμε τις βιβλιοθήκες, με ταξινομημένο το υλικό όπου θέλουμε:
Ένας ιδανικός τρόπος είναι να έχουμε κατηγοριοποιήσει από πριν τα αρχεία μας σε υποφακέλους όπως:
- Ταινίες,
- Σειρές ,
- Φωτογραφίες,
- Βιβλία,
- Audiobooks,
- Virtual Reality/3D Περιεχόμενο,
- Ο,τι άλλο επιθυμούμε.
Αξίζει να επισημανθεί ότι το Jellyfin τροφοδοτείται από μεταδομένα όπως τίτλους, περιγραφές, κριτικές, εξώφυλλα κλπ. απευθείας από διάσημες βάσεις δεδομένων όπως το TheMovieDb. Όταν δημιουργείται μία νέα βιβλιοθήκη, το Jellyfin θα μας ρωτήσει αυτόματα από πιες από αυτές τις βάσεις δεδομένων θέλουμε να τροφοδοτεί δεδομένα (αν θέλουμε):
Και έπειτα μπορούμε να πλοηγηθούμε έτσι ώστε να αντιστοιχήσουμε τον φάκελο που θέλουμε με την εκάστοτε βιβλιοθήκη.
Βλέπουμε ενδεικτικά την βιβλιοθήκη Movies όπου δημιούργησα:
Και έπειτα επιλέγουμε την γλώσσα των μεταδεδομένων που θέλουμε καθώς και την χώρα προέλευσης μας.
Τέλος, μπορούμε να ενεργοποιήσουμε το Remote Access έτσι ώστε να μπορούν να συνδεθούν στο Jellyfin μας άλλες συσκευές του δικτύου.
Αυτό ήταν!!!
Είμαστε έτοιμοι! Η εγκατάσταση του Jellyfin, ιδιαίτερα ως compose container, όπως είδαμε είναι εξαιρετικά απλή. Όλη η δουλειά έχει γίνει από πριν από εμάς για εσάς.
Αξίζει να επισημανθεί πως σε αυτά τα screenshots, στήσαμε το Jellyfin μέσω Podman
Παραμετροποιώντας το Jellyfin
Επιλέγοντας το κουμπί με τις τρεις γραμμές, μας εμφανίζει μία κάθετη κορδέλα με πολλαπλές επιλογές. Επιλέγουμε Settings.
Και εδώ βρισκόμαστε στις ρυθμίσεις του Jellyfin.
Διαχείριση Χρηστών
Αρχικά, στην κατηγορία Users, μπορούμε να δημιουργήσουμε νέους χρήστες (π.χ. τα μέλη της οικογένειας μας όπου θα έχουν πρόσβαση στο Jellyfin).
Ορίζοντας reverse proxy
Στην κατηγορία networking, μπορούμε να ορίσουμε έναν reverse proxy (π.χ., όπως βλέπετε, έχω κάνει να λειτουργεί στο movies.v.flix - εσωτερικό dns domain) καθώς μπορούμε και να ενεργοποιήσουμε/απενεργοποιήσουμε το https.
Reverse Proxy με Caddy:
Αν έχουμε τρέξει το compose αρχείο, όπως αναγράφεται παραπάνω, μπορούμε πολύ εύκολα να στήσουμε έναν reverse proxy από Caddy δίνοντας:
movies.v.flix {
tls internal
reverse_proxy 172.20.0.4:8096
}
Plugins
Αξίζει επίσης να αναφερθεί ότι το Jellyfin υποστηρίζει διάφορα πρόσθετα, συμπεριλαμβανομένου του KODI αλλά και την αυτόματ λήψη και εισαγωγή υπότιτλων, όπως μπορούμε να δούμε στο screenshot αυτό:
Ας πλοηγηθούμε τώρα στο Jellyfin
Αφού εντάξουμε τις βιβλιοθήκες μας και κατέβουν τα διάφορα μεταδεδομένα, η αρχική μας οθόνη θα μοιάζει περίπου κάπως έτσι: (η φωτογραφία προέρχεται από το επίσημο site του jellyfin, δεν πρόκειται για δικιά μου).
Όταν επιλέγουμε κάποια ταινία/σειρά όπου έχουν κατέβει τα μεταδεδομένα, θα εμφανίζονται πληροφορίες όπως αυτές σε αυτό το screenshot: (με την γνωστή και αγαπημένη Ελληνική Σειρά).
Τέλος, άλλο ένα use case όπου μου έχει διευκολύνει την καθημερινότητα, είναι να χρησιμοποιώ το Jellyfin ως φωτογραφικό άλμπουμ για εμένα και τους παππούδες/γιαγιάδες.
Πιο συγκεκριμένα, έχω προσθέσει ταξινομημένα ανά χρονιά σε φακέλους της κάθε χρονιάς τις φωτογραφίες και αντίστοιχα τις κασέτες σε αντίστοιχη βιβλιοθήκη, και πάρα πολύ εύκολα οι παππούδες/γιαγιάδες μπορούν από το τηλεκοντρόλ τους μέσω Android TV, να πλοηγηθούν και να δουν φωτογραφίες από τα εγγόνια τους (π.χ. εγώ 2 χρόνια πριν ανακαλύψω τον κόσμο του GNU/Linux στο τότε περιοδικό Ελληνικό Linux Format με τον κύριο Τετραγωνοπαντελονή:).
Επιπλέον, έχω ψηφιοποιήσει τις παλιές κασέτες και μέσω Jellyfin, μπορούν τόσο οι παππούδες όσο κι εμείς για λόγους αρχειοθέτησης, να έχουμε πρόσβαση όλοι και να streamάρουμε μέσω των Browser/Android/AndroidTV μας.
Τέλος, αξίζει να επισημανθεί πως το Jellyfin έχει δοκιμαστεί για να streamάρει VR/3D περιεχόμενο στο Oculus Quest 2 μου με απόλυτη επιτυχία, ακόμα και μέσω Raspberry Pi 4 χωρίς κανένα θέμα σε αναλύσεις 4Κ.
Jellyfin Clients για κινητά και τηλεοράσεις:
- Για Android: Jellyfin - your media in your hands! | F-Droid - Free and Open Source Android App Repository
- Για Android TV: https://play.google.com/store/apps/details?id=org.jellyfin.androidtv
- Για iOS: Jellyfin Mobile on the App Store
- Για Apple TV: Infuse • Video Player on the App Store
- Για LG τηλεοράσεις με WEB OS: LG CONTENT STORE
- Για FireTV: https://www.amazon.com/gp/aw/d/B07TX7Z725
Πρόσβαση στο Jellyfin εκτός σπιτιού;
Παρόλο που θα μπορούσαμε πολύ εύκολα να το κάνουμε διαθέσιμο στον έξω κόσμο, απλά ενεργοποιώντας το Port Forward στον router μας και αγοράζοντας ένα domain, ενδεχομένως θα ήταν πιο εύκολο και secure απλά να δημιουργήσουμε ένα VPN με wireguard, και να συνδεθούμε απευθείας στο δίκτυο μας με ασφάλεια, χωρίς να είναι απευθείας εκτεθειμένο στο διαδίκτυο.
Στον επόμενο οδηγό της σειράς Raspberry Pi Server, θα δούμε πώς μπορούμε να δημιουργήσουμε ως docker-container το δικό μας wireguard.