Sobre o projeto

OpenPT é uma ferramenta de anúncio de tracker BitTorrent leve e orientada por configuração, voltada para cenários de seeding em trackers privados (PT). Ele funciona apenas a partir de arquivos .torrent: nenhum download de conteúdo real é necessário, e o programa simula um cliente reportando periodicamente o status de seeding, a quantidade uploadada, a porta e a identidade do cliente ao tracker. Como ele reporta números em vez de transferir dados, trata-se de um utilitário de simulação de seeding e não de um cliente BitTorrent; as regras do tracker e as políticas de uso aceitável permanecem sob responsabilidade do operador. As capacidades documentadas incluem a varredura automática do diretório de torrents e o carregamento de arquivos .torrent; um limite configurável de seeds simultâneos (0 significa ilimitado); arquivos de spoofing de cliente para qBittorrent, Transmission, Deluge e uTorrent; três estratégias de upload (none, conservative_rate, configured_rate) com jitter e intervalos de atualização; velocidade de upload alocada dinamicamente a partir dos peers retornados pelo tracker; um ratio de compartilhamento alvo que interrompe um torrent assim que atingido; retry com backoff exponencial após falhas de anúncio; suporte a trackers HTTP, HTTPS e UDP; info hashes BitTorrent v1, híbridos e apenas v2; arquivamento automático de arquivos torrent corrompidos ou não analisáveis; totais de upload e estado de conclusão persistidos para que possa retomar após o reinício; interrupção do anúncio quando um arquivo torrent é excluído; e métricas no formato Prometheus além de um endpoint de health check. Os caminhos de implantação são um binário compilado localmente iniciado como openpt --config config.toml, ou a imagem Docker publicada chenbin3625/openpt executada via Docker Compose com mapeamento PUID/PGID e um volume ./data contendo o diretório de torrents. A configuração é em TOML, copiada de examples/config.example.toml, e abrange simultaneous_seed, client, torrents_dir, clients_dir, archive_dir, state_file, intervalo de varredura, timeout de parada de shutdown, estratégia de upload e limites de taxa, ratio_target, porta/IP/IPv6 de anúncio, timeout do tracker, proxy (HTTP ou SOCKS5, usado apenas para trackers HTTP/HTTPS, com trackers UDP retornando um erro claro), limites de backoff, endereço e caminho de escuta de métricas e saída de log. A Web UI integrada é escrita com Vite, React e antd e incorporada ao binário através de go:embed; a saída do frontend compilado é commitada, portanto, um clone novo pode ser compilado ou testado diretamente com a toolchain Go. A UI mostra contagens de torrents ativos e anormais, velocidade de upload atual, total uploadado, próxima hora de anúncio, tamanho por torrent, upload, velocidade, peers e ratio de compartilhamento, última/próxima hora de anúncio e intervalo, host do tracker e índice de switch, além de status e detalhes de erro, com ordenação de colunas, filtragem de status e busca por nome ou tracker. O listener de métricas também serve /metrics e /healthz; /healthz permanece disponível mesmo quando metrics.enabled é falso. O envio de SIGHUP recarrega a quente um subconjunto de configurações (seeds simultâneos, estratégia e taxas de upload, ratio alvo, timeout de parada de shutdown, porta/IP/IPv6 de anúncio, timeout do tracker, proxy e backoff), enquanto arquivos de spoofing de cliente, diretórios, arquivo de estado, intervalo de varredura, arquivo de log e opções de métricas/Web UI exigem reinicialização. Por padrão, announce.port = 0 gera uma porta dinâmica aleatória na faixa 49152-65535 a cada inicialização, em vez de reutilizar padrões comuns como 6881. O projeto é lançado sob a Licença MIT.