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 you@example.com -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 you@example.com -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 <team@jellyfin.org>
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.
- 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.
- 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á.
- 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.