Tutoriais de VPS
Montar o Jellyfin em uma VPS (2026): Docker, transcodificação por hardware, HTTPS, bibliotecas de mídia e reprodução remota
Implante o Jellyfin em uma VPS com Docker Compose, configure bibliotecas de mídia, HTTPS com domínio, legendas, reprodução remota e transcodificação por hardware Intel/NVIDIA, e entenda os custos de largura de banda, o armazenamento, o backup, as atualizações e as falhas comuns.

Montar o Jellyfin em uma VPS (2026): Docker, transcodificação por hardware, HTTPS, bibliotecas de mídia e reprodução remota
Se você quer organizar seus próprios filmes, séries, músicas e vídeos caseiros em uma interface parecida com a da Netflix, sem entregar sua biblioteca de mídia a uma plataforma de terceiros, o Jellyfin é uma das opções de código aberto mais comuns. Ele oferece clientes web, de TV, celular e desktop, e oferece suporte a raspagem de metadados, legendas, vários usuários, retomada de reprodução, transcodificação por hardware e reprodução remota.
Porém, antes de montar o Jellyfin em uma VPS, é preciso calcular primeiro três coisas: onde ficam os arquivos de mídia, se a reprodução exige transcodificação e se o tráfego de saída é suficiente. O Jellyfin em si é gratuito, mas isso não significa que o servidor, o armazenamento, a largura de banda e a transcodificação também sejam. Este artigo trata apenas da gestão e da reprodução de arquivos de mídia sobre os quais você ou sua equipe têm direito legal de uso.
O Jellyfin é adequado para implantação em uma VPS quando:
- Os arquivos de mídia já estão na VPS, em um disco montado localmente ou em armazenamento de objetos;
- Você usa principalmente Direct Play e não precisa de transcodificação de vídeo frequente;
- Os membros da família estão em regiões diferentes e precisam de acesso remoto;
- A largura de banda e o tráfego mensal da VPS são suficientes;
- Você aceita manter por conta própria o domínio, o HTTPS, os backups e a compatibilidade dos clientes.
Os casos a seguir se encaixam melhor em um servidor doméstico, um NAS ou um servidor dedicado com GPU:
- Toda a mídia está em discos de casa;
- Você reproduz com frequência 4K HDR, HEVC, AV1 ou remux de alto bitrate;
- Vários usuários vão reproduzir ao mesmo tempo;
- O suporte de formatos dos clientes é ruim e é preciso transcodificar em tempo real;
- A VPS tem apenas CPU compartilhada, pouco tráfego e um disco pequeno.
Se for só para assistir sozinho, priorize o Direct Play no cliente. A transcodificação é a parte do Jellyfin que mais consome recursos e onde uma VPS comum costuma travar.
| Modo de reprodução | Carga do servidor | Qualidade de imagem | Condições de uso |
|---|---|---|---|
| Direct Play | Mínima | Qualidade original | O cliente suporta os formatos de vídeo, áudio e legendas |
| Direct Stream | Baixa | Normalmente não recodifica o vídeo | Só é preciso trocar o contêiner |
| Transcode | Máxima | Depende das configurações | O cliente não suporta o codec, o bitrate é alto demais ou é preciso embutir as legendas |
Por exemplo, quando o cliente suporta H.264, AAC e MP4, o servidor geralmente consegue fazer Direct Play. Se o vídeo for HEVC e o áudio for TrueHD, e a TV ou o navegador não suportarem, a transcodificação pode ser acionada. Legendas SRT externas costumam ser leves, mas legendas com estilo ASS, legendas de imagem ou a embutição de legendas podem fazer o servidor recodificar o vídeo inteiro.
Antes de comprar uma VPS, não olhe apenas o número de núcleos da CPU. Verifique primeiro quais codecs seus clientes habituais suportam e depois decida se precisa de GPU.
| Caso de uso | Configuração recomendada | Observações |
|---|---|---|
| Direct Play 1080p para uma pessoa | 2 núcleos, 2 GB, SSD de 40 GB | Serve quando a mídia está em armazenamento externo |
| Direct Play para 2–3 pessoas | 4 núcleos, 4 GB, NVMe de 80 GB | Foque na largura de banda e no tráfego mensal |
| Transcodificação por software 1080p ocasional | 4–8 núcleos de CPU de alta frequência, 8 GB | VPS com CPU compartilhada não é necessariamente estável |
| 4K, HDR ou vários fluxos de transcodificação | GPU dedicada, 16 GB+ de RAM | Prefira um servidor dedicado ou uma instância com GPU |
| Biblioteca de mídia local grande | 4 núcleos, 8 GB, disco conforme a capacidade | Cache e metadados em SSD |
O banco de dados do Jellyfin, os pôsteres, as legendas, as miniaturas e o cache de transcodificação devem ficar em NVMe. Os arquivos de mídia podem ficar em HDDs de grande capacidade, armazenamento em bloco, um NAS ou armazenamento de objetos, mas a latência e os custos de saída do armazenamento remoto afetam diretamente a reprodução.
Se você ainda não sabe o que uma VPS de 2 núcleos e 4 GB consegue rodar, consulte primeiro Como escolher a configuração de uma VPS. Quando a biblioteca de mídia for muito grande, consulte também Uma VPS precisa de armazenamento de objetos?.
A largura de banda de reprodução equivale aproximadamente ao bitrate médio do vídeo. Um vídeo de 10 Mbps reproduzido continuamente por 1 hora consome aproximadamente:
10 Mbps × 3600 秒 ÷ 8 ≈ 4.5 GB
Reproduzindo 3 horas por dia, ao mês dá cerca de:
4.5 GB × 3 × 30 ≈ 405 GB
Isso ainda não conta o áudio, as legendas, os pôsteres, os avanços repetidos e outros usuários. Se duas pessoas reproduzirem ao mesmo tempo, tanto a largura de banda instantânea quanto o tráfego mensal se somam. Um vídeo 4K de alto bitrate pode chegar a 40–80 Mbps, e uma VPS com 100 Mbps nominais logo chega perto do limite.
O «tráfego ilimitado» também pode ter cláusulas de uso justo, largura de banda compartilhada ou limitação de velocidade. Leia com atenção a política do provedor antes de colocar no ar e configure monitoramento de tráfego e alertas de excesso na VPS.
Recomenda-se usar Ubuntu 22.04/24.04 LTS ou Debian 12. Primeiro confirme que o Docker está disponível:
docker version
docker compose version
Crie os diretórios do Jellyfin:
sudo mkdir -p /opt/jellyfin/config
sudo mkdir -p /opt/jellyfin/cache
sudo mkdir -p /srv/media/movies
sudo mkdir -p /srv/media/tv
sudo chown -R "$USER":"$USER" /opt/jellyfin
sudo chmod -R 750 /opt/jellyfin
O diretório de mídia pode ser fornecido por uma ferramenta de upload, SFTP, rclone ou uma montagem de armazenamento separada. Não monte o diretório raiz inteiro, a configuração de SSH ou os diretórios pessoais de outros usuários dentro do Jellyfin.
O exemplo oficial do contêiner usa jellyfin/jellyfin e mapeia /config, /cache e o diretório de mídia. Este artigo fixa a versão estável atual 10.11.11 e faz a porta web escutar apenas no localhost:
services:
jellyfin:
image: jellyfin/jellyfin:10.11.11
container_name: jellyfin
restart: unless-stopped
environment:
TZ: Asia/Shanghai
JELLYFIN_PublishedServerUrl: https://media.example.com
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /srv/media/movies:/media/movies:ro
- /srv/media/tv:/media/tv:ro
ports:
- "127.0.0.1:8096:8096/tcp"
Salve como /opt/jellyfin/compose.yaml e inicie:
cd /opt/jellyfin
docker compose up -d
docker compose ps
docker compose logs --tail=100 jellyfin
Teste o serviço local:
curl -I http://127.0.0.1:8096
O exemplo oficial também inclui a UDP 7359 para descoberta automática na rede local. Uma VPS pública normalmente não precisa abrir essa porta; é mais claro que os clientes se conectem diretamente pelo domínio HTTPS.
O diretório de mídia é montado como somente leitura com :ro, o que evita que o Jellyfin ou os plugins apaguem os arquivos originais por engano. Só considere uma montagem de leitura e escrita quando precisar apagar arquivos pela interface de administração; em produção, é melhor manter a biblioteca de mídia por um processo de gestão de arquivos separado.
Prepare o domínio media.example.com e aponte o registro A para a VPS. Usando o Caddy como exemplo:
media.example.com {
reverse_proxy 127.0.0.1:8096
}
Recarregue e verifique:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
curl -I https://media.example.com
O Jellyfin transmite credenciais de login, registros de reprodução e conteúdo de mídia, então não deve ser acessado por HTTP em texto puro na internet pública. Para o processo completo de Caddy, DNS e certificados, consulte Guia completo de Caddy como proxy reverso em uma VPS.
Se colocar o Cloudflare na frente, atenção aos limites de upload único, ao cache, ao tráfego proxied e aos termos de serviço. Os fluxos de vídeo dinâmicos do Jellyfin normalmente não são adequados para cache como conteúdo estático de CDN. Não faça cache de mídia privada nem burle as regras da plataforma só para «esconder o IP».
Depois de acessar https://media.example.com, conclua o assistente de idioma, administrador, biblioteca de mídia e acesso remoto.
- Não use
admin, o domínio ou o prefixo do e-mail como nome de usuário; - Defina uma senha longa e aleatória;
- Use o administrador apenas para configuração e uma conta normal para a reprodução diária;
- Não reutilize senhas da VPS, do e-mail ou do provedor de nuvem;
- Não permita que contas de convidado acessem as configurações de administração.
Crie bibliotecas de mídia separadas para filmes e séries, escolhendo os caminhos respectivos:
/media/movies
/media/tv
Não coloque tudo em um único diretório, senão o scraper vai confundir facilmente filmes, episódios, extras e legendas.
Defina o idioma e o país/região preferidos para os metadados e ative as fontes de metadados necessárias. A raspagem de metadados baixa pôsteres, fundos e informações do elenco e, com muitos arquivos, consome bastante /config e o diretório de cache.
Uma nomenclatura consistente economiza mais tempo do que combinar manualmente várias vezes.
Exemplo de diretório de filmes:
/srv/media/movies/
└── Movie Name (2025)/
├── Movie Name (2025).mkv
├── Movie Name (2025).zh-CN.srt
└── poster.jpg
Exemplo de diretório de séries:
/srv/media/tv/
└── Series Name (2025)/
└── Season 01/
├── Series Name S01E01.mkv
├── Series Name S01E01.zh-CN.srt
└── Series Name S01E02.mkv
Escrever claramente o ano, a temporada e o episódio reduz erros de identificação de filmes com o mesmo nome e de especiais. Antes de renomear em lote, guarde uma lista dos arquivos originais para evitar que um erro de regra bagunce a biblioteca inteira.
O Jellyfin suporta legendas externas e embutidas. Para reduzir a transcodificação:
- Prefira SRT, que os clientes suportam bem;
- Nomeie o arquivo de legendas igual ao vídeo;
- Use marcações de idioma como
.zh-CN.srt,.en.srt; - Evite definir como padrão legendas ASS complexas que você não precisa;
- Legendas de imagem e a embutição de legendas aumentam muito a carga de transcodificação;
- Os arquivos de fonte devem ficar em um diretório somente leitura bem definido.
Se você tiver fontes personalizadas, pode adicionar uma montagem:
volumes:
- /srv/fonts:/usr/local/share/fonts/custom:ro
A origem das fontes precisa ser legal; a falta de fontes faz os estilos de legenda ASS renderizarem errado ou caírem para o padrão.
O Jellyfin suporta oficialmente Intel QSV, NVIDIA NVENC/NVDEC, AMD VA-API/AMF, Apple VideoToolbox e Rockchip RKMPP. A imagem oficial do Docker inclui o jellyfin-ffmpeg; prefira o FFmpeg da imagem oficial e não o substitua sem critério por outras compilações.
A placa de vídeo virtual exibida em muitos painéis de VPS só serve para a tela do console e não pode ser usada para transcodificação de vídeo. Verifique primeiro:
lspci -nn | grep -Ei "3d|display|vga"
ls -l /dev/dri
Sem /dev/dri, dispositivos NVIDIA ou passthrough de GPU explícito, não dá para supor que a transcodificação por hardware esteja disponível.
Um servidor dedicado com iGPU Intel pode mapear /dev/dri para dentro do contêiner:
devices:
- /dev/dri:/dev/dri
As permissões do usuário do host, do usuário do contêiner e dos grupos render/video precisam coincidir. Após um mapeamento bem-sucedido, selecione QSV ou VA-API no painel de administração do Jellyfin e teste os logs de reprodução reais.
A NVIDIA exige o driver correto no host e o NVIDIA Container Toolkit. Ative o NVENC só depois que nvidia-smi funcionar normalmente e o contêiner enxergar a GPU. Drivers, runtime do contêiner e limites de sessões de GPU afetam a disponibilidade.
Reproduza um arquivo de teste que com certeza exija transcodificação, veja no Dashboard do Jellyfin o modo de reprodução e o motivo da transcodificação e observe ao mesmo tempo:
docker stats jellyfin
nvidia-smi
Intel/AMD podem usar as ferramentas de monitoramento de GPU correspondentes. Uso alto de CPU não significa necessariamente falha total, porque a embutição de legendas, a conversão de áudio e alguns filtros ainda podem cair na CPU.
As práticas a seguir são mais eficazes do que atualizar a VPS:
- Usar clientes que suportem HEVC, AV1, HDR e formatos de áudio comuns;
- Preparar versões compatíveis com H.264/AAC para o navegador;
- Desativar a embutição de legendas que você não precisa;
- Definir a qualidade de reprodução como original;
- Transcodificar antecipadamente o conteúdo assistido com frequência;
- Evitar rodar várias transcodificações por software ao mesmo tempo em uma VPS com CPU compartilhada;
- Colocar o cache de transcodificação em SSD.
O Direct Play reduz ao mesmo tempo CPU, latência e perda de qualidade, e é o alvo mais vantajoso de otimizar primeiro no Jellyfin remoto.
Crie uma conta separada para cada membro da família e autorize por biblioteca de mídia. Não compartilhe a conta de administrador.
Configurações recomendadas:
- Proibir usuários normais de apagar mídia;
- Restringir quais bibliotecas de mídia podem ser acessadas;
- Definir classificações de conteúdo para contas infantis;
- Limitar o bitrate da reprodução remota;
- Desativar permissões de download que não são usadas;
- Limpar periodicamente dispositivos e sessões sem uso há muito tempo;
- Configurar limitação de taxa no proxy reverso ou uma VPN para logins na internet pública.
Se só você usa, pode acessar após entrar em uma rede privada via WireGuard, Tailscale ou Headscale. Já existe um tutorial de como montar o Headscale em uma VPS, adequado para gerenciar vários dispositivos de forma unificada.
A vantagem são caminhos simples e baixa latência. A desvantagem é que SSDs de grande capacidade são caros e, se a máquina inteira falhar, a mídia e o serviço podem se perder juntos. Adequado para uma biblioteca pequena e selecionada, não para crescimento ilimitado.
O armazenamento em bloco é usado como um disco local, mas normalmente é cobrado por capacidade. Confirme IOPS, throughput, snapshots e capacidade de recuperação entre regiões. Se o disco de rede desconectar, o Jellyfin pode escanear um diretório vazio; não configure a exclusão automática dos arquivos originais.
O armazenamento de objetos não é um sistema de arquivos padrão. Montá-lo diretamente pode trazer problemas de leitura aleatória, cache e custos de requisições. Avanços frequentes geram requisições de intervalo, e a experiência de reprodução depende da camada de montagem e da rede.
O OpenList pode agregar discos na nuvem, mas fazer o Jellyfin ler depois via WebDAV adiciona mais uma camada de rede e pontos de falha. Pode ser usado para testes pessoais; para uma biblioteca de mídia de longo prazo, prefira montagens locais estáveis, um NAS, cache do rclone ou uma solução de armazenamento com suporte direto. Você também pode consultar o tutorial de como montar o OpenList em uma VPS.
Os arquivos de mídia costumam ser muito grandes, enquanto os dados de configuração do Jellyfin não são. Faça backup pelo menos de:
/opt/jellyfin/config;compose.yaml;- Configuração do Caddy/Nginx;
- Usuários, registros de reprodução e configuração de plugins;
- Pôsteres, legendas e NFO personalizados;
- Lista de arquivos de mídia;
- Uma estratégia de backup separada para os próprios arquivos de mídia.
O diretório de cache pode ser reconstruído e normalmente não precisa de backup de longo prazo. Os arquivos de mídia não devem ficar só na mesma VPS; mantenha pelo menos uma segunda cópia ou uma fonte de onde possam ser obtidos novamente.
Antes de atualizar, registre a imagem atual e faça backup da configuração:
cd /opt/jellyfin
docker inspect jellyfin --format '{{.Config.Image}}'
docker compose config > compose.before-upgrade.yaml
sudo tar -czf jellyfin-config-$(date +%F).tar.gz config
Copie o backup para outra máquina ou para o armazenamento de objetos, depois altere a versão da imagem e reconstrua:
docker compose pull
docker compose up -d
docker compose logs --tail=100 jellyfin
Após atualizar, verifique o login, as bibliotecas de mídia, os plugins, as legendas, as conexões dos clientes e uma reprodução real. Se o banco de dados já foi migrado, apenas voltar a imagem para a versão antiga pode não reverter; também é preciso restaurar o backup da configuração anterior à atualização.
Primeiro confirme a porta local do Jellyfin:
docker compose ps
curl -I http://127.0.0.1:8096
Se a porta local funciona mas o HTTPS retorna 502, normalmente é endereço upstream, porta ou rede Docker errados no proxy reverso.
Verifique o caminho de montagem e o diretório dentro do contêiner:
docker exec jellyfin ls -la /media/movies
docker exec jellyfin ls -la /media/tv
Se o host tem os arquivos mas o contêiner está vazio, normalmente é problema de caminho no Compose, de momento da montagem ou de permissões.
No Dashboard, veja se é Direct Play ou Transcode e depois verifique CPU, GPU, disco, armazenamento upstream e largura de banda pública. Não julgue apenas pelo gráfico de CPU da página inicial.
Troque para legendas SRT ou desative as legendas para testar. Se ao desativar passar a Direct Play, o formato original da legenda ou a compatibilidade do cliente acionou a embutição.
Verifique se o cliente suporta HDR, se a TV está no modo correto e se o vídeo aciona tone mapping. A conversão de HDR para SDR exige muito da GPU, do driver e do FFmpeg, e não convém ativá-la às cegas em uma VPS comum sem verificação.
Verifique /opt/jellyfin/cache, confirme se as sessões de reprodução foram interrompidas de forma anormal e configure um alerta de disco para o diretório de cache. Não apague diretamente segmentos de transcodificação em uso.
- Gerencie e reproduza apenas mídia sobre a qual você tem direito legal de uso;
- Exponha o Jellyfin apenas via HTTPS ou VPN;
- Separe as contas de administrador e de reprodução normal;
- Monte os diretórios de mídia como somente leitura por padrão;
- Não compartilhe publicamente a biblioteca de mídia inteira;
- Não instale plugins de origem desconhecida;
- Atualize periodicamente o Jellyfin, o Docker e o host;
- Configure limitação de taxa de login, alertas de tráfego e alertas de disco;
- Faça backup da configuração, do proxy reverso e da lista de mídia;
- Fixe a versão e crie um ponto de restauração antes de atualizar;
- Não use o servidor para burlar restrições regionais, de direitos autorais ou de acesso a plataformas;
- Leia as políticas do provedor de VPS sobre tráfego elevado, reclamações de direitos autorais e abuso.
Para a primeira implantação, você pode começar com uma VPS de 2 núcleos, 4 GB, NVMe de 80 GB e mais de 2 TB de tráfego mensal, testando apenas uma biblioteca de mídia 1080p e um cliente. Garanta que o status de reprodução mostre Direct Play e depois acrescente aos poucos usuários, legendas e armazenamento externo.
Se você transcodifica com frequência, pare de empilhar CPU compartilhada. Priorize melhorar a compatibilidade dos clientes ou troque para um servidor dedicado com iGPU Intel ou GPU NVIDIA. Para 4K HDR e uso multiusuário, um servidor doméstico ou um servidor dedicado com GPU costuma ser mais estável do que uma VPS comum.
A melhor experiência com o Jellyfin não é «uma capacidade de transcodificação do servidor infinitamente poderosa», mas sim o máximo de compatibilidade entre formatos de mídia, clientes, armazenamento e rede. Primeiro faça o Direct Play funcionar e depois fale de compartilhamento remoto e bibliotecas de mídia grandes.