SSD Nodes Learn
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-07-25

Jellyfin kwenye VPS: jifungulie maktaba yako ya media

Endesha Jellyfin kwenye VPS kwa Docker: block storage, ruhusa za faili, tofauti ya direct play na CPU transcoding, na jinsi ya kufikia maktaba yako kwa usalama kutoka mbali.

Unachojenga

Seva ya media ya Jellyfin kwenye VPS: kontena moja, volumu tatu, na diski ya hifadhi ya block inayoshikilia filamu na vipindi vyako, inayopatikana kutoka kwa kivinjari chochote au programu ya Jellyfin. Usakinishaji ni faili ya compose yenye mistari kumi na tano. Kila kitu kinachokwenda kinyume baadaye kinatoka katika sehemu mbili — ruhusa za faili ambazo kontena haziwezi kusoma, na kudai VPS isiyo na GPU kubadilisha muundo wa video ambayo haifai kubadilisha. Mwongozo huu hutumia sehemu kubwa ya urefu wake kwenye hizi mbili, kwa sababu ndipo maswala ya usaidizi yanapotokea.

Jellyfin ni ya bure na chanzo wazi kabisa, hakuna akaunti, hakuna vipengele vilivyofungwa malipo, na hakuna telemetri — sababu inayoonekana katika kila orodha ya mambo ya kujihudumia mwenyewe mwaka 2026. Inacheza media unayomiliki. Haizalishi maudhui yoyote, na mwongozo huu si kuhusu kupata lolote.

Ukweli wa ubadilishaji msimbo, kabla ya kukodisha chochote

Soma haya kwanza, kwa sababu yanabadilisha unachonunua. Seva ya midia inafanya moja ya vitu viwili unapobonyeza kucheza. Kucheza moja kwa moja hufurusha faili kama ilivyo: VPS husoma baiti kutoka diski na kuzisukuma kwenye waya, na haitumii CPU karibu kabisa. Ubadilishaji msimbo hubadilisha msimbo wa video wakati wa kucheza — azimio jipya, kidekodi kipya, au manukuu yaliyochomwa ndani — na hiyo ni kazi tupu ya CPU.

VPS ya kawaida haina GPU. Kwa hiyo kila ubadilishaji msimbo unafanywa kwenye CPU kwa kutumia libx264/libx265, na ubadilishaji msimbo wa programu ni ghali. Ubadilishaji msimbo mmoja wa 1080p H.264 unaweza kushinda vCPU kadhaa zinazoshirikiwa; ubadilishaji msimbo wa 4K au HEVC kwa kawaida hauwezi kufikia kasi ya wakati halisi, hivyo kucheza kunasimama na kufunga kwa muda mrefu. Ubadilishaji msimbo wa maunzi — kitu kinachofanya hiki kiwe cha bei nafuu kwenye kompyuta ya nyumbani yenye Intel iGPU au kadi ya Nvidia — haipatikani kwako isipokuwa mtoa huduma wako anakodisha mfano wa GPU.

Mkakati mzima kwenye VPS kwa hiyo ni: epuka ubadilishaji msimbo. Weka maktaba yako katika vikodeki ambavyo wateja wako hucheza moja kwa moja — video ya H.264, sauti ya AAC au AC3, ndani ya chombo cha MP4 au MKV — na chagua programu za wateja zinazochesha moja kwa moja: programu asili za Jellyfin kwa Android TV, iOS na Roku, pamoja na Infuse, Kodi, na Jellyfin Media Player ya kompyuta. Fanya hivi na VPS haitagusa ffmpeg kamwe, na kompyuta ndogo ya vCPU 2 inafurushia watu kadhaa kwa wakati mmoja. Ukipanga kubadilisha msimbo unahitaji kompyuta kubwa zaidi na ya gharama kubwa zaidi, na hata hivyo 4K ni chaguo mbaya.

Fanya hesabu ya pia kasi ya mtandao pia, kwa sababu ndio jambo la kushangaza lingine. Kucheza moja kwa moja hutuma faili kwa kasi yake yenyewe. Faili iliyobanwa ya 1080p ina kasi ya 8-12 Mbps; remux ya 1080p Blu-ray 20-30 Mbps; 4K HDR 40-80 Mbps. Watu watatu wakicheza moja kwa moja faili za 10 Mbps ni 30 Mbps ya kupakia inayoendelea kutoka kwenye VPS yako. Angalia namba mbili kwenye mpango wako: kasi ya mlango (je, inaweza kusukuma 30 Mbps kuelekea juu?) na kikomo cha uhamishaji wa kila mwezi. Filamu moja ya masaa mawili ya 10 Mbps ni takriban GB 9 inayotoka nje, hivyo posho iliyopimwa ya 1 TB/mwezi ni zaidi kidogo ya filamu mia moja kwa mwezi — tatu au nne kwa siku — na kaya inayotazama 4K, kwa kasi ya mara nne hadi nane, inaipua haraka sana.

Masharti

  • VPS mpya ya Ubuntu 24.04 KVM ikiwa na ufikiaji wa root au sudo, na Docker pamoja na programu-jalizi ya Compose imewekwa.
  • Kiasi cha block-storage kwa ajili ya faili za midia, kilichopimwa kulingana na maktaba yako (angalia ukipimaji hapa chini). Diski ndogo ya msingi inayokuja na VPS sio mahali ambapo filamu zako zinawekwa.
  • Jina la kikoa kama unataka ufikiaji wa umma wa HTTPS, au VPN ya WireGuard katika VPS ile ile kama unapendelea kuiweka yote faragha.
  • Midia unayoruhusiwa kisheria kuitiririsha — nakala zako mwenyewe, marekodi yako mwenyewe, faili unazomiliki.

Panga kwanza hifadhi ya kuzuia

Unganisha kiasi kwenye paneli ya mtoa huduma wako, kisha kitafute na kikipange. Pata jina la kifaa kutoka lsblk — kitakuwa kama /dev/sdb au /dev/vdb, kamwe sio diski ya mzizi.

lsblk
sudo mkfs.ext4 /dev/sdb          # ONLY on a new, empty volume — this ERASES it
sudo mkdir -p /mnt/media
sudo blkid /dev/sdb              # copy the UUID shown for this device

Kipange kwa UUID, na si kwa /dev/sdb, kwa sababu herufi za kifaa hubadilisha mpangilio baada ya kuanzisha upya na unaweza kumalizia ukipanga au kuumbiza diski isiyo sahihi. Ongeza mstari mmoja kwenye /etc/fstab:

UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  /mnt/media  ext4  defaults,nofail  0  2
sudo mount -a
df -h /mnt/media

nofail ni muhimu: bila hilo, ikiwa kiasi cha kuzuia kitatenganishwa wakati wowote, kompyuta itakataa kuanzisha na itaingia kwenye ganda la dharura. Kosa kubwa zaidi hapa ni kuendesha mkfs.ext4 kwenye kiasi ambacho tayari kina data — hufuta data yote. Umbiza tu kiasi kipya; ikiwa diski tayari ina maktaba yako, nenda moja kwa moja kwenye mstari wa fstab.

Panga faili kwa muundo unaotarajiwa na Jellyfin

Jellyfin hulinganisha metadata kwa majina ya folda na faili. Ukipanga kimakosa, filamu zitajitokeza kama faili zisizo na juma bila picha, au kipindi kitalinganishwa na msiri mwingine. Kuna sheria tatu hasa: kila filamu iwe kwenye folda yake ya Name (Year) ikiwa na jina la faili linaloendana; folda za msimu zitiwe jina la Season 01, si S01; faili za vipindi zitumie S01E01; na vipindi maalum ziwekwe kwenye Season 00.

/mnt/media
├── Movies
│   ├── Blade Runner (1982)
│   │   └── Blade Runner (1982).mkv
│   └── Arrival (2016)
│       └── Arrival (2016).mkv
└── Shows
    └── Severance (2022)
        ├── Season 01
        │   ├── Severance - S01E01.mkv
        │   └── Severance - S01E02.mkv
        └── Season 00
            └── Severance - The Lexington Letter.mkv

(Year) kwenye filamu si mapambo — hutofautisha filamu zilizofanywa upya ili kifananishi kichague jina sahihi. Weka Movies na Shows kama folda tofauti za kiwango cha juu kwa sababu kila moja huwa maktaba ya Jellyfin ya aina maalum ya maudhui, na kuzichanganya huchanganya mtoa metadata.

Ruhusa: sababu kuu inayofanya maktaba zisionekane

Hapa kuna dhana potofu inayosababisha watu kupoteza muda wa jioni nzima. Imaji rasmi ya jellyfin/jellyfin haitii heshima mazingira ya PUID/PGID — hizo ni za imaji ya LinuxServer.io (lscr.io/linuxserver/jellyfin). Kwenye imaji rasmi, unadhibiti mtumiaji kwa kutumia ufunguo wa user: kwenye compose, na kukiukiwa, kontena inaendeshwa kama root. Iwe unatumia ipi, kanuni ni ile ile: uid/gid inayoendesha kontena lazima iweze kusoma na kupitia kila saraka ya media.

Tutatumia uid/gid 1000, mtumiaji wa kwanza asiye root kwenye kompyuta mpya ya Ubuntu. Hakikisha yako na uweke umiliki:

id                                  # confirm your user is uid=1000 gid=1000
sudo chown -R 1000:1000 /mnt/media
sudo find /mnt/media -type d -exec chmod 755 {} \;
sudo find /mnt/media -type f -exec chmod 644 {} \;
mkdir -p ~/jellyfin/config ~/jellyfin/cache
sudo chown -R 1000:1000 ~/jellyfin

Saraka zinahitaji biti ya execute (ile x katika 755), sio kusoma tu — bila hilo, kontena haiwezi kuingia kwenye folda hata kama inaweza kuorodhesha jina lake. Mtego unaofuta maktaba nzima ni saraka kuu: ikiwa uid ya kontena haiwezi kupitia mount yenyewe, haifiki kamwe kwenye /media/Movies au /media/Shows, na maktaba zote zinaonekana tupu mara moja ikiwa na Access to the path ... is denied kwenye logi. Folda yoyote ya media isiwezekanayo kusomwa inarekodiwa na kurukwa, hivyo faili zilizokopiwa kama root hufifia kimyakimya kutoka kwenye maktaba. Ndiyo maana tunafanya chown kwa njia ya recursive na kuweka biti ya execute kwenye kila saraka badala ya kurekebisha folda moja tu.

Faili la docker-compose

services:
  jellyfin:
    image: jellyfin/jellyfin:10
    container_name: jellyfin
    user: "1000:1000"
    restart: unless-stopped
    ports:
      - "127.0.0.1:8096:8096"
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media:/media:ro
    environment:
      - JELLYFIN_PublishedServerUrl=https://jellyfin.example.com

Mstari kwa mstari: user: "1000:1000" ndilo linaloweka ruhusa za faili, likiendana na umiliki uliotajwa hapo juu. /config linashikilia seva nzima — akaunti, maktaba, metadata, hali ya ufuatiliaji — kwa hivyo lazima liweze kuandikwa na ndilo unachopaswa kuhifadhi nakala. /cache ni nafasi ya kazi ya muda inayotupwa baada ya matumizi. Kupachikwa kwa media ni :ro (kwa kusoma tu) kusudi: Jellyfin huanza kuhifadhi picha na metadata chini ya /config, kwa hivyo halihitaji kamwe kuandika kwenye maktaba yako, na hali ya kusoma tu kulinda faili zako zisifutwe kwa bahati mbaya au kwa ajili ya programu-jalizi mbaya. Port imefungwa kwa 127.0.0.1 kusudi — kuingia kwa wavuti kwa Jellyfin ni HTTP ya kawaida, kwa hivyo hatutoi kamwe 8096 kwenye mtandao wa umma wa intaneti. JELLYFIN_PublishedServerUrl ni anwani ambayo seva itangaza kwa ugunduzi wa moja kwa moja wa ndani — hii ni matangazo ya UDP ya mtandao wa karibu (LAN), kwa hivyo wateja walioko nje ya intaneti hawaioni na wanatumia tu URL unayoingiza kwenye programu. Iweke kwenye anwani ambayo wateja wanapaswa kupewa, na kuwa tayari kuingiza hiyo URL kwa mkono kwenye vifaa vya mbali.

Iinue kutoka kwenye saraka ya compose:

docker compose up -d
docker logs -f jellyfin

Uendeshaji wa kwanza: kielelezo cha usanidi na maktaba zako

Kwa sababu mlango umefungwa kwa localhost, fikia kielelezo kupitia handaki ya SSH kutoka kwenye kompyuta yako badala ya kufungua tundu kwenye ukuta wa moto:

ssh -L 8096:127.0.0.1:8096 you@your-vps-ip

Sasa nenda kwenye http://localhost:8096. Kielelezo kikuongoza kupitia lugha, kisha kuunda mtumiaji msimamizi mwenye nywila imara — akaunti hii ni seva yako, basi usitumie tena nywila ya matumizi ya muda mfupi. Ongeza maktaba yako ya kwanza: chagua aina ya yaliyomo Movies, elekeza kwenye /media/Movies (njia ndani ya kontena, sio njia ya mwenyeji), na rudia na Shows kwenye /media/Shows. Malizia, na Jellyfin huchanganua. Matokeo sahihi ni matini na pichani kujazwa ndani ya dakika moja au mbili kwa maktaba ndogo. Ongeza au hariri maktaba baadaye chini ya Dashboard → Libraries, na ulazimishe uchanganuzi upya na Scan All Libraries.

Kama unategemea ubadilishaji wa kipimo chochote, fungua Dashboard → Playback → Transcoding na uweke njia ya faili za muda za ubadilishaji kwenye /cache/transcodes ili mabadiliko ya mara kwa mara yaekee kwenye kiasi cha akiba badala ya kuvimba /config. Acha uharakishaji wa maunzi uwekwe kwenye None — hakuna GPU ya kuharakisha nayo.

Ufikiaji wa mbali: TLS reverse proxy, au uweke ndani ya VPN

Una njia mbili salama za kufikia Jellyfin kutoka nje, na njia moja isiyo salama unayopaswa kuepuka. Njia isiyo salama ni kuchapisha port 8096 moja kwa moja kwenye intaneti: taarifa za kuingia husafiri kwa maandishi wazi na port hiyo hupata mashambulizi ya nguvu ndani ya masaa machache.

Chaguo A — TLS reverse proxy. Weka Jellyfin kwenye subdomain nyuma ya Traefik na TLS otomatiki kwa programu zako za Docker, au nyuma ya nginx ukitumia cheti cha Let's Encrypt kilichotolewa na Certbot. Jellyfin hutumia WebSockets kwa masasisho ya wakati halisi, hivyo proxy lazima ipitishe majeda ya upgrade. Traefik hufanya hili otomatiki; nginx inahitaji kuyaorodhesha wazi, na inahitaji HTTP/1.1 kuelekea upstream au upgrade haitatokea kamwe:

location / {
    proxy_pass http://127.0.0.1:8096;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Weka JELLYFIN_PublishedServerUrl kwa anwani ya https:// ili kugundua otomatiki kwa ndani kutangaza URL sahihi — programu za mbali hutumia anwani unayowapa — na ongeza fail2ban kupunguza majaribio ya nguvu dhidi ya kuingia. Mara server ikawa ya umma, elekeza Uptime Kuma kwenye URL ili ujue kuhusu muda wa kutumika kabla ya watazamaji wako.

Chaguo B — weka faragha kwenye VPN. Usichapishe 8096 kabisa; fikia Jellyfin tu kupitia handaki ya WireGuard inayomalizika kwenye kompyuta hiyo hiyo. Kwa kaya hii ndiyo chaguo salama rahisi zaidi — hakuna cheti, hakuna mfidhuliwa wa umma, hakuna uso wa mashambulizi ya nguvu. Funga container kwenye anwani ya handaki au localhost na unganisha kupitia VPN. Tazama usanidi wa WireGuard VPN kwa VPS faragha kwa handaki yenyewe.

Ukubwa wa hifadhi na nakala rudufu

Panga bajeti kulingana na ubora, sio idadi ya faili. Filamu zilizobanwa za 1080p zinachukua 4-15 GB kila moja; remux ya 1080p 20-40 GB; msimu mmoja wa vipindi vya TV za 1080p 15-40 GB; kila kitu cha 4K ni 40-100 GB kwa kila filamu. Maktaba yenye filamu chache mia kadhaa pamoja na vipindi kadhaa inahitaji kiasi cha 2-4 TB, na ni nafuu zaidi kuongeza nafasi ya block volume mara moja kuliko kuhamisha baadaye.

/config ndio hali kamili ya seva, hivyo ndio kitu pekee unachopaswa kuhifadhi nakala rudufu. Chukua snapshot au simamisha na uifanye tar, kisha weke nakala hiyo nje ya seva:

docker compose down
sudo tar czf jellyfin-config-$(date +%F).tgz -C ~/jellyfin config
docker compose up -d

/cache na folda ya transcode hazihitaji kuhifadhiwa. Midia iliyoko /mnt/media unahifadhi nakala rudufu kando au ukubali kuwa unaweza kuiripya tena — watu wengi huchagua njia ya pili kutokana na ukubwa. Masasisho ni docker compose pull && docker compose up -d; lebo ya :10 hapo juu inabaki ndani ya toleo kuu la 10.x, hivyo kusogea kwenda toleo kuu linalofuata ni uhariri wa lebo uliokusudiwa — soma kwa ufupi noti za toleo la Jellyfin kabla ya kufanya hivyo, kwa sababu uhamishaji wa muundo wa maktaba hutokea katika matoleo makuu.

Aina za hitilafu, pamoja na mistari utakayoiona

Maktaba ni tupu baada ya uchunguzi. Kumbukumbu zinazopatikana kwenye Dashboard → Logs (au ~/jellyfin/config/log/log_*.log) zinaonyesha:

System.UnauthorizedAccessException: Access to the path '/media/Movies' is denied.

Uid ya kontena haiwezi kusoma njia hiyo. Sababu: faili za media zimemilikiwa na root au uid tofauti na thamani yako ya user:, saraka inakosa biti ya execute, au mount ya mzazi haipitiwi na uid hiyo. Suluhisho: chown -R 1000:1000 /mnt/media, saraka 755, faili 644, kisha fanya uchunguzi upya.

Kucheza kunamaliza CPU na buffer. docker stats jellyfin inaonyesha CPU karibia 100% kuzidisha idadi ya core, na Dashboard → Playback inaorodhesha kipindi kama Transcode kwa kasi chini ya 1.0x. Mteja hachezi moja kwa moja, hivyo VPS inafanya CPU-transcoding polepole kuliko muda halisi na inashindwa. Sababu: codec au kontena isiyotumika, kuchoma subtitles, au HDR tone-mapping. Suluhisho: badilisha kwa mteja anayecheza moja kwa moja, weka vyanzo katika H.264/AAC, tumia subtitles za matini (SRT) badala ya subtitles za picha (PGS/VOBSUB) zinazolazimisha kuchoma, na weka 4K HDR mbali na kompyuta inayotumia CPU tu.

"No compatible streams are available." Ujumbe kamili kwa kawaida ni "This client isn't compatible with the media and the server isn't sending a compatible media format." Mteja amekataa chanzo na transcode ya akiba pia imeshindwa kuanza. Sababu: amri ovu ya ffmpeg, faili isiyosomeka, au wasifu wa mtumiaji unazuia ubadilishaji wa video. Suluhisho: soma mstari wa ffmpeg kwenye Dashboard → Logs, thibitisha faili inacheza kabisa, angalia ruhusa za kucheza za mtumiaji ikiwa unategemea transcoding, na jaribu mteja wa pili kubainisha matatizo ya codec ya kivinjari.

Films hazina poster au zina poster isiyo sahihi. Metadata haikufanana. Sababu: filamu haija kuwa kwenye folda yake ya Name (Year), folda ya msimu imepewa jina la S01 badala ya Season 01, vipindi haviko katika umbo la S01E01, au mwaka unakosekana. Suluhisho: badilisha jina kwa mpangilio ulio juu, kisha Refresh metadata → Replace all, au tumia Identify kwenye kipengee kimoja kushikilia ingizo sahihi ya TMDB/TVDB.

FAQ

Je, VPS inaweza kubadilisha msimbo wa video (transcode) bila GPU?

Ndiyo, lakini kwenye CPU tu, na ni ghali. Kubadilisha msimbo wa 1080p moja kwa programu kinaweza kushinda vCPU kadhaa, na 4K au HEVC kwa kawaida haziwezi kufikia kasi ya wakati halisi, hivyo playback hukwama. Njia bora ni kuepuka kubadilisha msimbo: weka maktaba yako kwenye H.264/AAC na tumia programu za wateja zinazofanya direct-play, ili VPS irudishe bytes tu. Kodisha seva ya GPU tu ikiwa unahitaji kubadilisha msimbo kwa wakati halisi.

Kwa nini maktaba yangu ya Jellyfin ni tupu baada ya uchunguzi?

Karibu kila wakati ni suala la ruhusa. Picha rasmi ya jellyfin/jellyfin inaendeshwa kama user: uliyoweka (au root), na ikiwa faili hazisomeki na uid hiyo, kumbukumbu za uchunguzi zinaonyesha Access to the path ... is denied na kuziruka. Rekebisha umiliki kwa chown -R 1000:1000 /mnt/media, peana saraka kituo cha execute (755), kisha fanya uchunguzi upya — pia kagua saraka kuu, kwa sababu ikiwa uid ya chombo hakiwezi kupitia /mnt/media yenyewe, haitafikia kamwe saraka za maktaba na kila kitu kitaonekana tupu. Sababu ya pili kwa wingi ni mpangilio wa saraka ambao haolingani na unachotarajia Jellyfin.

Nifanyeje kufikia Jellyfin kutoka mbali kwa usalama?

Kuna chaguo mbili nzuri. Liweke nyuma ya TLS reverse proxy kwenye subdomain ili kuingia na mtiririko viwekwe kwa njia fiche, na ongeza fail2ban — usifunua bandari 8096 wazi, kwani inatuma nenosiri lako kwa maandishi wazi. Au ihifadhi entirely faraghani na uifikie tu kupitia VPN, chaguo salama rahisi zaidi kwa kaya. Peana programu anwani ya umma moja kwa moja — autodiscovery ni matangazo ya mtandao wa karibu, hivyo haifiki wateja wanaoingia kupitia intaneti.

VPS ya Jellyfin inahitaji kiasi gani cha diski na bandwidth?

Diski inategemea ubora: weka akiba ya GB 4-15 kwa kila filamu iliyobanwa ya 1080p, GB 20-40 kwa remux, na GB 40-100 kwa 4K, hivyo maktaba nyingi zinahitaji block volume ya TB 2-4. Bandwidth inaamuliwa na bitrate ya direct-play — Mbps 8-12 kwa kila mtiririko wa 1080p, na zaidi sana kwa 4K — hivyo thibitisha kasi ya bandari yako inaweza kushughulikia idadi ya watazamaji wa pamoja na fuatilia kikomo cha uhamishaji wa kila mwezi. Ongeza nafasi ya CPU ikiwa unapanga kubadilisha msimbo; pipa bandwidth zaidi kuliko cores ikiwa unapanga direct-play.

Je, ni halali kuendesha Jellyfin kwenye VPS?

Jellyfin yenyewe ni programu huria na bure, na kuendesha ni halali kabisa. Kinachojali ni yaliyomo: tiririsha tu midia unayomiliki au una leseni kuishikilia — nakala za diski zako, marekodi, au faili una haki kuzo. Jellyfin haikuja na midia yoyote na haitoi njia yoyote ya kupata; ni kicheza cha maktaba tayari unayomiliki.

#jellyfin#media-server#docker#self-hosting#transcoding