Passo-a-Passo para instalar o servidor de mídia Jellyfin no Ubuntu 24.04

Passo-a-Passo para instalar o servidor de mídia Jellyfin no Ubuntu 24.04

Neste guia, vou mostrar como instalar o servidor de mídia Jellyfin no Ubuntu 24.04 LTS, seja em um servidor ou desktop. O Jellyfin é uma aplicação gratuita e de código aberto que permite organizar seus filmes, programas de TV, músicas e fotos em uma interface atraente e transmitir esses arquivos de mídia no seu PC, tablet, telefone, TV, Roku, etc., na rede ou pela Internet. O Jellyfin pode ser instalado no Linux, MacOS e Windows.

Recursos do Jellyfin

O Jellyfin é um fork do servidor de mídia Emby. Ele possui muitos dos mesmos recursos que o Plex e o Emby.

Diferentemente do Plex ou do Emby, o Jellyfin é 100% gratuito e de código aberto. Sem anúncios. Sem limite de reprodução em aplicativos móveis. (Embora o aplicativo iOS não possa reproduzir vídeos em segundo plano.) Assista TV ao vivo e configure gravações automáticas para expandir sua biblioteca. Busca automática de arte, metadados do TheTVDB, TheMovieDB, The OpenMovie Database e Rotten Tomatoes. Suporta DLNA. Plugins opcionais podem ser instalados para fornecer recursos adicionais. Suporta aceleração de hardware de codificação/decodificação de vídeo usando FFMpeg. E muito mais.

Instalando o servidor de mídia Jellyfin no Ubuntu 24.04

O Jellyfin não está incluído no repositório padrão do Ubuntu, mas tem seu próprio repositório. Execute o seguinte comando para adicionar o repositório Jellyfin ao seu sistema Ubuntu.

echo "deb [signed-by=/etc/apt/keyrings/jeyllyfin_team.gpg.key arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list

Em seguida, execute o seguinte comando para importar a chave GPG do Jeffyfin para o sistema Ubuntu, para que o APT possa verificar a integridade do pacote durante a instalação.

wget --quiet -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo tee /etc/apt/keyrings/jeyllyfin_team.gpg.key

E porque este repositório usa conexão HTTPS, também precisamos instalar o pacote apt-transport-https e ca-certificates.

sudo apt install apt-transport-https ca-certificates

Finalmente, atualize o índice de pacotes no seu sistema Ubuntu e instale o Jellyfin.

sudo apt update
sudo apt install jellyfin

Este comando também instalará outros 3 pacotes como dependências:

jellyfin-ffmpeg6: para transcodificação de vídeo. jellyfin-server: o servidor de back-end. jellyfin-web: a interface web de front-end. Agora que o servidor de mídia Jellyfin está instalado, podemos verificar seu status com:

systemctl status jellyfin

Como você pode ver, ele está rodando no meu sistema Ubuntu 24.04. (Pressione a tecla q para retomar o controle do terminal.)

jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/usr/lib/systemd/system/jellyfin.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             jellyfin.service.conf
     Active: active (running) since Fri 2024-05-17 15:01:56 HKT; 1min 16s ago
   Main PID: 14607 (jellyfin)
      Tasks: 16 (limit: 9444)
     Memory: 128.0M (peak: 131.8M)
        CPU: 8.665s
     CGroup: /system.slice/jellyfin.service
             14607 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg

Se o servidor de mídia Jellyfin não estiver rodando, você pode iniciá-lo com:

sudo systemctl start jellyfin

Configuração inicial do servidor de Mídia Jellyfin

A interface de gerenciamento baseada na web está disponível na porta 8096. Você pode acessar a interface web do Jellyfin através do seguinte URL.

http://127.0.0.1:8096 ou http://127.0.0.1:8096/web Se você instalou o Jellyfin em um servidor Ubuntu remoto, precisa configurar um proxy reverso com Nginx ou Apache para acessar a interface web, o que é explicado mais adiante neste tutorial.

O primeiro passo é escolher o seu idioma preferido.

Observe que o usuário jellyfin precisa ter permissão de leitura e execução nos seus diretórios de mídia. Por exemplo, meu disco rígido externo de 2T está montado em /media/linuxbabe/ , que é de propriedade do root. Usuários que não estão no grupo root não podem acessá-lo, então eu executo o seguinte comando para dar ao usuário jellyfin permissão de leitura e execução. (Eu não recomendo mudar a propriedade com o comando chown ou chgrp. Usar o comando setfacl será suficiente.)

sudo setfacl -m u:jellyfin:rx /media/linuxbabe/

Você também pode precisar atribuir permissão em diretórios de mídia individuais como abaixo.

sudo setfacl -m u:jellyfin:rx /media/linuxbabe/directory-name

Pode ser tentador adicionar a flag recursiva (-R), que dá ao jellyfin permissão de leitura e execução em todos os arquivos e subdiretórios do drive.

sudo setfacl -R -m u:jellyfin:rx /media/linuxbabe/

Se o seu disco rígido externo é usado apenas para armazenar arquivos de mídia, então você pode fazer isso, mas se você tem arquivos sensíveis no disco rígido externo, não faça isso.

  • Depois de terminar de adicionar suas pastas de mídia, você pode configurar as configurações da biblioteca. Escolha seu idioma, país, etc.
  • Clique em Ok e no botão Próximo. Você sempre pode adicionar mais bibliotecas depois. O próximo passo permite que você escolha se o acesso remoto será habilitado. Eu não recomendo habilitar o método nativo de acesso remoto, porque ele não fornece criptografia HTTPS, então desmarque ambas as caixas de seleção. Se você precisar de acesso remoto, leia como configurar o proxy reverso mais adiante neste artigo.
  • Clique em Próximo e no botão Finalizar. Finalmente, faça login na sua conta Jellyfin.

Refazendo a configuração inicial

Se você cometeu um erro na configuração inicial, pode começar de novo. Primeiro, edite o arquivo de configuração do Jellyfin.

sudo nano /etc/jellyfin/system.xml

Você verá algo como:

<IsStartupWizardCompleted>true</IsStartupWizardCompleted>

Mude para para:

<IsStartupWizardCompleted>false</IsStartupWizardCompleted>

Salve e feche o arquivo. Em seguida, reinicie o Jellyfin.

sudo systemctl restart jellyfin

Agora visite localhost:8096/web e você verá o assistente de configuração novamente.

Onde baixar filmes e programas de TV

Use um cliente de torrent como o Deluge. Aprenda como baixar do Usenet. Vantagens do Usenet Ele oferece melhor privacidade porque os outros não podem ver o que você está baixando. Velocidade de download super rápida. Os arquivos no Usenet geralmente são mantidos por muito mais tempo do que os arquivos torrent.

Por exemplo, o Newsdemon armazena arquivos por 4430 dias (mais de 12 anos), então você pode baixar conteúdo antigo a uma velocidade muito rápida. Configurando o Proxy Reverso Como ele escuta em 127.0.0.1:8096, a interface web do Jellyfin só está disponível para conexões do mesmo computador. Para poder acessar a interface web do Jellyfin de um computador remoto, podemos configurar um proxy reverso para o Jellyfin com o Nginx ou Apache.

Configurando o proxy reverso

Como ele escuta em 127.0.0.1:8096, a interface web do Jellyfin só está disponível para conexões do mesmo computador. Para poder acessar a interface web do Jellyfin de um computador remoto, podemos configurar um proxy reverso para o Jellyfin com o Nginx ou Apache.

Nginx

O Nginx é um servidor web e proxy reverso muito popular. Se você preferir usar o Nginx, execute o seguinte comando para instalá-lo.

sudo apt install nginx

Em seguida, crie um arquivo de bloco de servidor para o Jellyfin.

sudo nano /etc/nginx/conf.d/jellyfin.conf

Adicione o seguinte conteúdo a este arquivo. Substitua jellyfin.example.com pelo seu próprio nome de domínio. Você também deve criar um registro DNS A para este subdomínio. Se você não tem um domínio real, eu recomendo ir ao NameCheap para comprar um. O preço é baixo e eles dão proteção de privacidade whois gratuita para a vida.

<strong>server</strong> {
      listen 80;
      listen [::]:80;
      server_name jellyfin.example.com;

      access_log /var/log/nginx/jellyfin.access;
      error_log /var/log/nginx/jellyfin.error;

      set $jellyfin 127.0.0.1;

      <strong>location</strong> / {
          proxy_pass http://127.0.0.1:8096;
          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 X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;

          # Disable buffering when the nginx proxy gets very resource heavy upon streaming
          proxy_buffering off;
      }

      # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
      <strong>location</strong> ~ ^/web/$ {
          # Proxy main Jellyfin traffic
          proxy_pass http://$jellyfin:8096/web/index.html;
          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 X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;
      }

      <strong>location</strong> /socket {
          # Proxy Jellyfin Websockets traffic
          proxy_pass http://$127.0.0.1:8096;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          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 X-Forwarded-Protocol $scheme;
          proxy_set_header X-Forwarded-Host $http_host;
      }

        # Security / XSS Mitigation Headers
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";

}

Salve e feche este arquivo. Em seguida, teste a configuração do Nginx.

sudo nginx -t

Se o teste for bem-sucedido, recarregue o Nginx para que a alteração entre em vigor.

sudo systemctl reload nginx

Agora você pode acessar o servidor de mídia Jellyfin via jellyfin.example.com, ou jellyfin.example.com/web/index.html para o assistente de configuração inicial.

Apache

Se você preferir o Apache em vez do Nginx, então instale o servidor web Apache usando o seguinte comando.

sudo apt install apache2

Para usar o Apache como um proxy reverso, precisamos habilitar os módulos de proxy e o módulo de cabeçalho.

sudo a2enmod proxy proxy_http headers proxy_wstunnel

Em seguida, crie um arquivo de host virtual para o Jellyfin.

sudo nano /etc/apache2/sites-available/jellyfin.conf

Coloque as seguintes configurações no arquivo. Substitua jellyfin.example.com pelo seu nome de domínio real. Não se esqueça de criar um registro DNS A para este subdomínio. Se você não tem um nome de domínio real, eu recomendo ir ao NameCheap para comprar um. O preço é baixo e eles dão proteção de privacidade whois gratuita para a vida.

<VirtualHost *:80>
   ServerName jellyfin.example.com
   ErrorDocument 404 /404.html

   #HTTP proxy
   ProxyPass / http://localhost:8096/
   ProxyPassReverse / http://localhost:8096/

   #Websocket proxy
   SSLProxyEngine on
   <Location /:/websockets/notifications>
        ProxyPass wss://localhost:8096/:/websockets/notifications
        ProxyPassReverse wss://localhost:8096/:/websockets/notifications
   </Location>

   Header always unset X-Frame-Options
</VirtualHost>

Salve e feche o arquivo. Em seguida, habilite este host virtual.

sudo a2ensite jellyfin.conf

Reinicie o Apache

sudo systemctl restart apache2

Agora você pode acessar o servidor de mídia Jellyfin usando o nome de domínio jellyfin.example.com, ou jellyfin.example.com/web/index.html para o assistente de configuração inicial.

Como habilitar o HTTPS

Para criptografar o tráfego HTTP quando você visita o servidor Jellyfin de fora, podemos habilitar o HTTPS instalando um certificado TLS gratuito emitido pelo Let’s Encrypt. Execute o seguinte comando para instalar o cliente Let’s Encrypt (certbot) no Ubuntu 24.04.

sudo apt install certbot

Se você usa o Nginx, então também precisa instalar o plugin Certbot Nginx.

sudo apt install python3-certbot-nginx

Em seguida, execute o seguinte comando para obter e instalar o certificado TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com

Se você usa o Apache, então precisa instalar o plugin Certbot Apache.

sudo apt install python3-certbot-apache

Em seguida, execute o seguinte comando para obter e instalar o certificado TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com

Onde:

  • nginx: Use o plugin nginx.
  • apache: Use o plugin Apache.
  • agree-tos: Concorda com os termos de serviço.
  • redirect: Força o HTTPS por redirecionamento 301.
  • hsts: Adiciona o cabeçalho Strict-Transport-Security a cada resposta HTTP. Forçando o navegador a sempre usar TLS para o domínio. Defende contra o Stripping SSL/TLS.
  • staple-ocsp: Habilita o OCSP Stapling. Uma resposta OCSP válida é grampeada ao certificado que o servidor oferece durante o TLS. O certificado agora deve ser obtido e instalado automaticamente.
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/jellyfin.linuxbabe.com/fullchain.pem

E você pode acessar a interface web do Jellyfin via HTTPS: https://jellyfin.example.com.

Como atualizar o Jellyfin no Ubuntu 24.04

Quando uma nova versão do servidor de mídia Jellyfin for lançada, você poderá atualizá-la executando os seguintes comandos.

sudo apt update
sudo apt upgrade

Em seguida, reinicie o Jellyfin.

sudo systemctl restart jellyfin

Dicas de solução de problemas

Erro ao enviar mensagem de socket

Se o seu servidor Ubuntu rodar o VPN WireGuard, você pode ver o seguinte erro no log do Jellyfin (sudo journalctl -eu jellyfin).

[ERR] Error sending socket message from 10.0.0.102 to 239.255.255.250:1900
System.Net.Sockets.SocketException (0xFFFFFFFF): Bad value for ai_flags

Este erro significa que a mensagem não pode ser enviada da sua interface WireGuard para 239.255.255.250, que é o endereço multicast do SSDP (Simple Service Discovery Protocol). Isso ocorre porque a sua interface WireGuard não tem permissão para alcançar o endereço IP.

Para resolver este problema, edite o arquivo de configuração da sua interface WireGuard.

sudo nano /etc/wireguard/your-interface.conf

Encontre o parâmetro AllowedIPs. O meu é assim.

AllowedIPs = 10.0.0.0/8

Como você pode ver, o cliente VPN tem permissão para se conectar apenas à rede 10.0.0.0/8. Agora adicione o endereço 239.255.255.250.

AllowedIPs = 10.0.0.0/8, 239.255.255.250

Salve e feche o arquivo. Reinicie o WireGuard.

sudo systemctl restart wg-quick@your-interface

Reinicie o Jellyfin.

sudo systemctl restart jellyfin

Verifique o log do Jellyfin (sudo journalctl -eu jellyfin) novamente. O erro acima deve ter desaparecido.

Assinatura inválida

Se você ver o seguinte erro ao executar o comando sudo apt update,

The following signatures were invalid: EXPKEYSIG 49023CD01DE21A7B Jellyfin Team <[email protected]g>

você precisa reimportar a chave pública do Jellyfin com o seguinte comando.

wget --quiet -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo tee /etc/apt/keyrings/jeyllyfin_team.gpg.key

Como configurar a transcodificação de vídeo?

A transcodificação de vídeo no Jellyfin é uma parte importante para garantir a compatibilidade do conteúdo de mídia em vários dispositivos. Alguns dos métodos suportados incluem VAAPI e NVENC.

  1. Aceleração de Hardware: Se o seu hardware suportar, você pode habilitar a aceleração de hardware para uma transcodificação muito mais rápida. Alguns dos métodos suportados incluem VAAPI e NVENC.
  2. Contagem de Threads: Esta opção permite definir manualmente o número de threads a serem usadas durante a transcodificação. Se você não estiver usando o servidor para mais nada, é melhor deixar essa opção como está.
  3. Tipos de Transcodificação: Existem quatro tipos de reprodução, três dos quais envolvem transcodificação:
    • Direct Play: Entrega o arquivo sem transcodificação. Não há modificação no arquivo e quase nenhuma carga adicional no servidor.
    • Remux: Muda o contêiner, mas deixa os fluxos de áudio e vídeo intactos.
    • Direct Stream: Transcodifica o áudio, mas deixa o vídeo original intacto.
    • Transcode: Transcodifica o fluxo de vídeo.

Se a mídia for incompatível por qualquer motivo, o Jellyfin usará o FFmpeg para converter a mídia para um formato que o cliente possa processar. O Direct Stream ocorrerá se o áudio, o contêiner ou as legendas não forem suportados. Se o codec de vídeo não for suportado, isso resultará em transcodificação de vídeo.

Lembre-se, a transcodificação de vídeo pode ser intensiva para a CPU, portanto, é importante garantir que seu servidor tenha recursos suficientes para lidar com a demanda.

Além disso, a escolha do hardware adequado também é crucial para a transcodificação. De acordo com uma discussão no Reddit, um GPU dedicado pode melhorar significativamente o desempenho da transcodificação. Por exemplo, um GPU Nvidia P400 usado foi capaz de lidar com a transcodificação sem sobrecarregar a CPU.

Lembre-se, a transcodificação de vídeo pode ser intensiva para a CPU, portanto, é importante garantir que seu servidor tenha recursos suficientes para lidar com a demanda.importante garantir que seu servidor tenha recursos suficientes para lidar com a demanda.