Português
Começar

← Todos os templates · Mídia

Faça deploy de Jellyfin em um clique

Um servidor de mídia que faz streaming dos seus filmes, séries e músicas para qualquer dispositivo

Uma alternativa auto-hospedada para Plex e Emby.

O que é Jellyfin?

O Jellyfin é um servidor de mídia gratuito e de código aberto que as pessoas rodam no lugar do Plex ou do Emby. Ele organiza os filmes, as séries e as músicas que você tem em bibliotecas, com pôsteres, sinopses e elenco tirados de metadados online, e faz streaming deles para o navegador, celulares, tablets e TVs. Há apps oficiais para Android, iOS, Android TV e Fire TV, Roku, TVs LG e Samsung, Xbox e Kodi, e o Jellyfin Media Player roda no computador. Cada pessoa tem sua própria conta, que guarda até onde ela assistiu e tem o próprio controle parental.

As pessoas auto-hospedam o Jellyfin para assistir à própria mídia de qualquer lugar, sem conta em empresa nenhuma e sem assinatura: ele não tem plano premium, rastreamento nem servidores centrais. Este template já o configura com o administrador que você informa nos campos e com três bibliotecas, Movies, Shows e Music, sobre as pastas de um volume de mídia. O porém é a transcodificação. Quando um dispositivo não consegue reproduzir um arquivo como ele está, o Jellyfin o converte na hora, aqui na CPU, o que pesa; por isso, os arquivos que seus dispositivos reproduzem direto, como vídeo H.264 em MP4, são os leves.

Hospedagem de Jellyfin no Pethost

  1. Você entra no Pethost com uma passkey, GitHub ou Google. Ainda não tem máquina? Você escolhe um plano, e o link espera até ela ficar pronta.
  2. Novo projeto abre em Jellyfin. Você preenche o que ele pede e clica em Criar projeto: Usuário, Senha do administrador.
  3. Em um ou dois minutos Jellyfin está no ar no próprio endereço com HTTPS. Os segredos são gerados ao acaso, e os dados vão para o backup noturno.
  4. É um projeto como qualquer outro: você ou seu agente podem alterá-lo, fazer rollback ou restaurá-lo.

Perguntas sobre Jellyfin

O Jellyfin é mesmo gratuito?

Sim. O Jellyfin é software livre sob a GNU GPL, e o servidor e os apps oficiais dele não custam nada, sem plano premium nem recursos pagos. Ele é feito por voluntários.

Jellyfin ou Plex: qual é a diferença?

Os dois fazem streaming da sua própria mídia para os seus dispositivos. O servidor do Plex tem código fechado, as contas dele passam pelo plex.tv e, desde abril de 2025, assistir à sua mídia fora de casa exige um Plex Pass ou um Remote Watch Pass. O Jellyfin é de código aberto, não precisa de conta externa e não cobra por nada.

Em quais dispositivos dá para usar o Jellyfin?

Em qualquer navegador moderno e nos apps oficiais para Android, iOS, Android TV e Fire TV, Roku, LG webOS, Samsung Tizen e Xbox. O Jellyfin Media Player roda no Windows, no macOS e no Linux, e o add-on JellyCon leva o Jellyfin para o Kodi.

Como nomear filmes e séries para o Jellyfin?

Dê a cada filme uma pasta com o título e o ano, como Big Buck Bunny (2008), e, dentro dela, o vídeo com o mesmo nome. Cada série ganha uma pasta própria com Season 01, Season 02 e assim por diante dentro, e episódios com nomes como Show Name S01E01.mkv. Assim o Jellyfin encontra os pôsteres e as sinopses certos.

O Jellyfin precisa de GPU?

Não. A GPU só acelera a transcodificação, a conversão de que um dispositivo precisa quando não consegue reproduzir um arquivo como ele está; sem GPU, o Jellyfin transcodifica na CPU. O caso difícil é o vídeo HDR: a documentação do Jellyfin diz que nenhuma CPU doméstica atual faz o tone mapping dele em tempo real. Arquivos que seus dispositivos reproduzem como estão não precisam de transcodificação nenhuma.

De quanta memória e disco Jellyfin precisa?

Jellyfin ocupa cerca de 250 MB de memória quando está ocioso, e o disco é a sua biblioteca; transcodificar um vídeo roda na CPU e pesa. No Pethost, o plano Starter basta, com espaço para outros apps ao lado.

Arquivo Docker Compose de Jellyfin

O template é este compose.yaml e as variáveis gravadas no .env do projeto quando ele é criado. O Pethost roda o arquivo exatamente como está escrito.

Containers: jellyfin (jellyfin/jellyfin:12).

Volumes, no backup noturno: config, cache, media.

services:
  jellyfin:
    image: jellyfin/jellyfin:12
    restart: unless-stopped
    environment:
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # A new server's startup wizard is open to whoever comes first. So until the wizard is done,
    # Jellyfin runs on port 8097, which nobody reaches: there it is given the administrator from
    # the fields and a library for each folder of /media, and only then answers on 8096.
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        set -e
        config=/config/config
        if ! grep -qs '<IsStartupWizardCompleted>true<' "$$config/system.xml"; then
          mkdir -p "$$config" /media/movies /media/shows /media/music
          if [ -f "$$config/network.xml" ]; then
            sed -i 's|<InternalHttpPort>[0-9]*<|<InternalHttpPort>8097<|' "$$config/network.xml"
          else
            printf '<?xml version="1.0" encoding="utf-8"?>\n<NetworkConfiguration>\n  <InternalHttpPort>8097</InternalHttpPort>\n</NetworkConfiguration>\n' > "$$config/network.xml"
          fi
          /jellyfin/jellyfin &
          setup=$$!
          api() { curl -fsS -H 'Content-Type: application/json' "$$@"; }
          # 401: an administrator with a password exists already, from a first start cut short,
          # and Jellyfin has marked its wizard done by itself.
          until wizard=$$(curl -sS -o /dev/null -w '%{http_code}' http://127.0.0.1:8097/Startup/Configuration) &&
            { [ "$$wizard" = 200 ] || [ "$$wizard" = 401 ]; }; do sleep 2; done
          if [ "$$wizard" = 200 ]; then
            api -d '{"ServerName":"Jellyfin","UICulture":"en-US","MetadataCountryCode":"US","PreferredMetadataLanguage":"en"}' http://127.0.0.1:8097/Startup/Configuration
            library() {
              api http://127.0.0.1:8097/Library/VirtualFolders | grep -q "\"Name\":\"$$1\"" ||
                api -d '{"LibraryOptions":{"EnableRealtimeMonitor":true}}' "http://127.0.0.1:8097/Library/VirtualFolders?name=$$1&collectionType=$$2&paths=/media/$$3"
            }
            library Movies movies movies
            library Shows tvshows shows
            library Music music music
            api -o /dev/null http://127.0.0.1:8097/Startup/User
            json() { printf '%s' "$$1" | sed 's/\\/\\\\/g; s/"/\\"/g'; }
            api -d "{\"Name\":\"$$(json "$$ADMIN_USERNAME")\",\"Password\":\"$$(json "$$ADMIN_PASSWORD")\"}" http://127.0.0.1:8097/Startup/User
            api -d '{"EnableRemoteAccess":true,"EnableAutomaticPortMapping":false}' http://127.0.0.1:8097/Startup/RemoteAccess
            api -X POST http://127.0.0.1:8097/Startup/Complete
          fi
          kill $$setup
          wait $$setup || true
          sed -i 's|<InternalHttpPort>8097<|<InternalHttpPort>8096<|' "$$config/network.xml"
        fi
        exec /jellyfin/jellyfin
    volumes:
      - config:/config
      - cache:/cache
      # Writable, so that films, shows and music can be copied in over SFTP.
      - media:/media

volumes:
  config:
  cache:
  media:

Mais em Mídia