Como rodar um app de torrent com Django na prática
O django livre torrent é um projeto open source que usa o framework Django para gerenciar downloads e streams de arquivos via protocolo BitTorrent. A ideia básica é ter uma interface web controlando um serviço de torrent, sem depender de clientes gráficos como qBittorrent ou Transmission. Funciona bem se você quer algo leve para rodar num servidor ou num Raspberry Pi, mas tem suas pegadinhas.
Instalando o django livre torrent do zero
Você precisa de Python 3.9 ou superior, pip instalado e um ambiente virtual ativado. O comando de instalação mais direto costuma ser: pip install django-livre-torrent
Depois disso, rode python manage.py migrate para criar as tabelas no banco de dados SQLite padrão. Se quiser usar PostgreSQL, configure as variáveis de ambiente DB_HOST, DB_USER e DB_PASSWORD antes de rodar o migrate. O projeto não pede muito, mas esquecer essa parte já vi gente perder meia hora tentando entender por que o migrate falhava com erros de conexão estranhos.
Configurando o downloader por trás da interface
Aqui é onde a coisa fica interessante. O django livre torrent por padrão usa libtorrent nas versões mais recentes. Mas libtorrent 1.2.x tem um problema conhecido com trackers HTTPS que usam certificados autoassinados. Eu Passei duas horas numa sexta-feira à noite debugando isso porque um tracker específico que eu usava caía com erro de SSL a cada três downloads. A solução foi atualizar para libtorrent 2.0.x e adicionar um parâmetro extra no settings do projeto: LT_ENABLE_SSL = True. Não está na documentação principal, aparece num issue do GitHub aberto em outubro de 2024. Para configurar o caminho dos downloads, edite o settings.py e ajuste DOWNLOAD_DIR para um diretório que o usuário do serviço Django consiga escrever. No meu caso, coloquei /srv/torrent/downloads e dei permissão com chown -R www-data:www-data. Se deixar como absoluto vazio, ele tenta salvar em /tmp e enche o disco rápido demais.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Rodando em produção
Não use o servidor de desenvolvimento do Django para isso. Ele não aguenta conexões persistentes de peers. O ideal é colocar Gunicorn atrás do Nginx com um arquivo de configuração que aumente o timeout de upload e download, porque torrents grandes podem levar horas e o timeout padrão do Gunicorn é de 30 segundos. Um exemplo de config básica do Gunicorn para esse projeto:
gunicorn --workers 2 --timeout 3600 --bind 127.0.0.1:8000 core.wsgi:application Dois workers bastam porque o django livre torrent já opera de forma single-threaded por worker, e mais threads só aumentam o uso de memória sem ganho real de performance. O timeout de 3600 segundos evita que o Nginx feche a conexão enquanto um arquivo grande ainda está sendo buscado dos peers.
O problema que ninguém conta sobre seeds
O django livre torrent rastreia downloads, mas não gerencia seeds automaticamente. Isso significa que depois que um arquivo baixa completo, ele some da sua lista de ativos e você precisa reiniciar o download manualmente se quiser continuar semeando. Já vi gente montar scripts cron com curl para forçar o re-download periódico de torrents importantes, mas uma solução mais limpa é editar o modelo Torrent e ajustar o campo auto_seed para True nas versões mais novas do projeto. Outro ponto prático: se você for acessar de fora da sua rede, configure um certificado TLS válido. O projeto suporta HTTPS, mas muitos trackers modernos bloqueiam conexões anônimas sem criptografia, então seu throughput pode cair pela metade se rolar tudo via HTTP puro.
Links e download
O repositório oficial do django livre torrent fica no GitHub. A pasta de releases tem os pacotes .whl prontos, mas eu recomendo sempre instalar da source pelo menos uma vez pra garantir que as dependências do sistema estejam todas resolvevidas na sua versão exata de Linux. Em servidores Ubuntu 22.04, o pacote libtorrent-rasterbar2.0 costuma faltar e quebrar a instalação silenciosamente, gerando um ImportError só quando você tenta adicionar o primeiro torrent. Se o seu uso é exclusivamente local, sem necessidade de interface web, considere apenas usar o libtorrent puro via linha de comando. O django livre torrent adiciona uma camada que é útil para controle remoto, mas traz overhead de memória que pode chegar a 150MB só com o processo Django rodando ocioso. Para 50 torrents simultâneos, espere cerca de 400MB a 600MB de RAM consumidos no total, dependendo da versão do sistema.