
- Published on
הגדרות שרת המדיה הביתי שלי
- Authors

- Name
- ברוך אודם
- @baruchiro
יש לי בבית, ליד הWiFi, מחשב קטן בלי מסך או מקלדת. אתם יודעים, כזה שאמורים לחבר לטלוויזיה או משהו. זה "השרת" הפרטי שלי, משמש לכל מיני דברים שאני רוצה שיפעלו תמיד, כמו בוט של טלגרם, לדוגמא.
זה מאוד קל להגדיר שרת כזה כשמשתמשים בDocker, ואני יכול פשוט לשתף את ההגדרות שלי עם העולם, אם גם אתם רוצים להגדיר שרת כזה.
אז הנה קצת הסברים על איך השרת שלי מוגדר:
Jellyfin
Jellyfin היא תוכנת קוד פתוח (כמובן) לשרת מדיה ביתי.
שרת מדיה ביתי זאת בעצם תוכנה שיודעת להציג את המדיה שלנו- סרטים, מוזיקה, תמונות ולפעמים עוד דברים, בצורה מאורגנת. אולי אתם מכירים את Kodi, רק שההבדל הוא שKodi לדעתי מתמקד במדיה, ולכן יש לו הרבה פיצ'רים של הורדת מדיה מהאינטרנט בצורה אוטומטית וכד'. תוכנת Jellyfin אמנם לא יודעת להוריד תוכן מהאינטרנט, אבל היכולת העיקרית שלה היא גישה מרחוק- התקנתי אותה על השרת, ועכשיו אני יכול לגשת למדיה שלי מכל המכשירים ברשת הביתית.
אז מאיפה מגיעה המדיה לJellyfin?
Jackett
קצת קשה לי להסביר על Jackett, גם אני לא יודע עד הסוף מה התהליך שקורה, אבל התפקיד של Jackett הוא באופן כללי, לתת קישורים לתוכן.
אנחנו נראה בהמשך ונבין איך כל תוכנה דואגת למשימה הקטנה שלה, אבל באופן כללי, נניח שאני רוצה להוריד קובץ כלשהו שיצא לרשת, אני יכול להשתמש בJackett שיודע לחפש את הקובץ בכל מיני אוספים. היתרון הוא שאני צריך לחפש רק פעם אחת, מול Jackett, וגם לא צריך להסתבך עם כל אוסף והפורמט\הפרוטוקול שלו.
Deluge
מאוד פשוט, Deluge הוא תוכנת הורדת torrents. כמובן שהיתרון שלו בהקשר הנוכחי הוא שאפשר להריץ אותו בDocker והוא חושף ממשק Web, כך אני יכול להתחבר אליו מרחוק.
Sonarr, Radarr, Bazarr
כל השמות נשמעים דומים כי כולם בני אותה משפחה, מה שמכונה *arr stack, אוסף כלים שהשמות שלהם נגמרים בarr.
כולם נראים ועושים פחות או יותר אותו דבר.
Sonarr אחראי על מעקב אחרי יציאה של פרקים בסדרות שאתה עוקב אחריהם. אני לא משתמש בכל הפיצ'רים שיש שם, כמו למשל לוח שנה שמציג מתי פרקים מתוכננים לצאת.
Radarr הוא כמו Sonarr, רק לסרטים. שניהם אחראים רק על מעקב אחרי יציאת תוכן חדש. כאשר תוכן חדש צריך להיות זמין, הם שואלים את Jackett האם הוא יודע לתת להם קישור להורדה, וברגע שיש להם קישור זמין להורדה, הם שולחים אותו לDeluge שיוריד אותו.
הקובץ יורד לתיקייה שJellyfin מסתכל עליה, ויודע להציג את התוכן ברגע שהוא זמין.
התפקיד של Bazzar הוא להסתכל גם כן על התיקייה של המדיה, ולחפש כתוביות לתוכן שירד.
Seerr (לשעבר Jellyseerr)
עד עכשיו, כשרציתי תוכן חדש, הייתי צריך להיכנס לSonarr או לRadarr, כל אחד בנפרד, לחפש שם ולבדוק אם יש טורנט זמין. קצת מעצבן לקפוץ בין הכלים.
Seerr (עד לא מזמן קראו לו Jellyseerr) מרכז את הכל למקום אחד: גם סרטים וגם סדרות, בממשק נוח אחד שנראה כמו נטפליקס. אני מחפש מה שבא לי, לוחץ "בקש לצפות", והבקשה עוברת מאחורי הקלעים לSonarr או לRadarr שמתחילים בתהליך שתיארתי למעלה. בסוף התוכן פשוט מופיע בJellyfin.
יש גם אפליקציות לטלפון שמשלבות את Jellyfin וSeerr לחוויה אחת, אבל האמת שאני נשארתי עם האפליקציה הרשמית של Jellyfin. הבעיה עם האפליקציות החדשות היא שבגלל הAI צצות יותר מדי כאלה, ואי אפשר לעקוב איזו מהן מתאימה לאיזו דרישה.
Cleanuparr
Cleanuparr אמור לעזור בניקוי אוטומטי של ההורדות. הוא יודע לנקות הורדות תקועות או כושלות מהתור, אבל גם למחוק טורנטים אחרי שעבר מספיק זמן שיתוף (seeding) או אחרי שהעליתי בחזרה מספיק תוכן, מה שרלוונטי למי שמוריד ממאגרים פרטיים שדורשים יחס שיתוף.
אבל בכנות, אני עדיין לא בטוח ב100% איך להשתמש בו ונראה לי שהוא לא באמת מועיל לי, כי הוא לא מוחק את הקבצים של Jellyfin וממילא, הדיסק לא מתנקה.
telegram-download-deamon
עדכון: כבר מזמן אני לא משתמש בכלי הזה, אז אני כבר לא יכול להמליץ עליו. השארתי את הקטע כאן בעיקר בשביל ההיסטוריה.
לפעמים יש מדיה שאני רוצה להוסיף לJellyfin, אבל התוכנות שהזכרתי למעלה לא מצליחות למצוא אותה. לצורך כך יש לי בוט בTelegram שרץ על שרת המדיה ומוריד את הקבצים שאני שולח אליו.
(טוב, לא בדיוק בוט, זה יותר Telegram Client, מהסיבה שבוט מוגבל יותר בהורדה של קבצים גדולים.)
הקוד של telegram-download-deamon מנוהל על ידי מישהו אחר, אבל חלקים גדולים מהקוד נכתבו על ידי, ואני עוד שוקל להשתמש בfork שלי, מכיוון שנראה שלי יש יותר צורך ועניין בכלי הזה מאשר לMaintainer.
Portainer
Portainer הוא כלי לניהול Docker מרחוק, מאוד נוח, אפשר לראות איזה images, volumes, containers וכו' יש על המכונה כרגע, מה המצב שלהם, לראות לוגים, להיכנס לתוך הcontainers ועוד.
הכל ביחד: docker-compose
אחרי כל ההסברים, הנה כל הstack של המדיה בקובץ compose אחד. ככה כל השירותים שלמעלה עולים יחד, חולקים רשת אחת (media_net) ותיקיית מדיה משותפת (/data), מה שגם מאפשר hardlinks בין תיקיית ההורדות לספרייה.
services:
jellyfin:
# Media Server
container_name: jellyfin
image: jellyfin/jellyfin
restart: unless-stopped
ports:
- "8096:8096"
volumes:
- jellyfin:/config
- jellyfin-cache:/cache
- data:/data
networks:
- media_net
seerr:
# media request and discovery manager for Jellyfin (successor to Jellyseerr)
image: ghcr.io/seerr-team/seerr:latest
container_name: seerr
init: true
ports:
- "5055:5055"
volumes:
# reuses the former jellyseerr config volume; Seerr auto-migrates on first start
- jellyseerr:/app/config
restart: unless-stopped
networks:
- media_net
depends_on:
- jellyfin
jackett:
# torrent trackers
image: ghcr.io/linuxserver/jackett
container_name: jackett
ports:
- "9117:9117"
environment:
- PUID=0
- PGID=0
- AUTO_UPDATE=true
volumes:
- jackett:/config
- data:/data
restart: unless-stopped
networks:
- media_net
deluge:
# Torrents Downloader
image: ghcr.io/linuxserver/deluge:2.1.1
container_name: deluge
ports:
- "8112:8112"
- "58846:58846"
restart: unless-stopped
volumes:
- deluge:/config
- data:/data
networks:
- media_net
sonarr:
# PVR for TV shows
image: ghcr.io/linuxserver/sonarr
container_name: sonarr
ports:
- "8989:8989"
depends_on:
- jackett
- deluge
environment:
- PUID=0
- PGID=0
volumes:
- sonarr:/config
- data:/data
restart: unless-stopped
networks:
- media_net
radarr:
# Movie organizer/manager
image: ghcr.io/linuxserver/radarr
container_name: radarr
ports:
- "7878:7878"
depends_on:
- jackett
- deluge
environment:
- PUID=0
- PGID=0
volumes:
- radarr:/config
- data:/data
restart: unless-stopped
networks:
- media_net
bazarr:
# subtitles companion for Sonarr and Radarr
image: ghcr.io/linuxserver/bazarr
container_name: bazarr
ports:
- "6767:6767"
environment:
- PUID=0
- PGID=0
volumes:
- bazarr:/config
- data:/data
restart: unless-stopped
networks:
- media_net
depends_on:
- sonarr
- radarr
cleanuparr:
# Automated cleanup of stalled/failed downloads in Sonarr/Radarr + Deluge.
# All rules (dry-run, strikes, seeding) are configured in the Web UI on :11011.
# Tip: keep Dry Run ON at first, and /data is mounted read-only so it never
# deletes files directly (removal happens through the Deluge API).
image: ghcr.io/cleanuparr/cleanuparr:latest
container_name: cleanuparr
restart: unless-stopped
ports:
- "11011:11011"
environment:
- PORT=11011
- PUID=1000
- PGID=1000
- UMASK=022
volumes:
- cleanuparr:/config
- data:/data:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11011/health"]
interval: 30s
timeout: 10s
start_period: 30s
retries: 3
networks:
- media_net
networks:
media_net:
name: media_network
driver: bridge
volumes:
data: # single shared root: /data/torrents + /data/media, enables hardlinks
external: true
name: media_data
jellyfin:
jellyfin-cache:
jackett:
deluge:
sonarr:
radarr:
bazarr:
jellyseerr: # Seerr config (name kept to preserve existing data)
cleanuparr:
כמה דברים שכדאי לדעת: תיקיית הdata מוגדרת כvolume חיצוני (external: true) כי יצרתי אותה ידנית והיא די גדולה, אז אני לא נותן לcompose ליצור או למחוק אותה.
מה הלאה?
אני תמיד באמצע לבדוק כל מיני כלים חדשים (כשיש לי זמן, לא תמיד אני מגיע לזה). למשל, הייתי באמצע לבדוק את home-assistant, יכולים לראות גם כאן.
מוזמנים להשתמש!