>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
TypeScript

Como unificar todos os storages em uma única área de trabalho web

Drivebase

Tenho quatro abas de storage abertas no meu computador de trabalho. Uma tem o Google Drive corporativo, a segunda tem o Dropbox pessoal, a terceira tem o console AWS S3 com backups, e a quarta tem o MinIO no meu servidor de casa. Transferir um arquivo da nuvem corporativa para um bucket S3 geralmente vira uma bagunça: baixar um gigabyte para o laptop, abrir outra aba, fazer upload de volta, e não esquecer de limpar a pasta de Downloads.

Recentemente encontrei um projeto open source novo chamado Drivebase. Os desenvolvedores resolveram essa rotina de uma forma bem original. Eles criaram um aplicativo web auto-hospedado que parece um sistema operacional com janelas completo direto no navegador, consegue conectar a diferentes provedores e mover arquivos entre eles.

Drivebase UI

Interface com janelas em vez de abas infinitas

O principal recurso que chama a atenção é a UI. Os criadores não fizeram um dashboard típico de página única. Em vez disso, eles construíram uma área de trabalho com uma barra de tarefas e janelas.

Você pode abrir duas janelas de arquivos lado a lado: na esquerda seu Google Drive, na direita um bucket S3 no Cloudflare R2 ou Backblaze. Arquivos são arrastados com o mouse ou copiados através de operações em lote. Janelas podem ser minimizadas, redimensionadas e sobrepostas umas às outras. Parece que você está sentado em um gerenciador de arquivos nativo como o Finder ou Total Commander, só que dentro de uma aba do navegador.

Atualmente, o projeto suporta várias fontes de dados:

  • Google Drive
  • AWS S3 e qualquer storage compatível com S3 (MinIO, Wasabi, Cloudflare R2, Backblaze B2)
  • Sistema de arquivos local do servidor
  • Dropbox e OneDrive

Os autores planejam adicionar Box, Azure Blob Storage e SFTP comum.

O que o motor por baixo dos panos pode fazer

A interface parece bonita, mas a engenharia por trás é bem mais interessante. Transferências de arquivos entre diferentes APIs geralmente estão cheias de armadilhas.

Upload direto para S3 sem carga no servidor

Se você está fazendo upload de um arquivo de vídeo de 10 GB para um bucket S3, rotear esse tráfego pelo servidor do Drivebase não faz sentido. O backend gera uma URL multipart pré-assinada, e o navegador envia as partes diretamente para o storage AWS ou MinIO. O servidor não se sufoca com memória e largura de banda de rede.

Uploads retomáveis

Uploads de arquivos grandes são divididos em chunks. Se o navegador fechar acidentalmente ou o Wi-Fi oscilar, o processo continuará de onde parou.

Análise de conflitos antes de copiar

Ao transferir pastas em lote, o sistema executa uma verificação preliminar. Se um arquivo com o mesmo nome já existir na pasta de destino, o Drivebase mostrará um aviso e oferecerá opções: sobrescrever, pular, renomear ou resolver conflitos manualmente.

Tempo real sem polling

Você não precisa monitorar o status de tarefas em segundo plano através de requisições AJAX constantes. A arquitetura usa Server-Sent Events (SSE) combinado com GraphQL. O progresso da transferência de arquivos é exibido no cliente instantaneamente à medida que os eventos chegam da fila.

Um olhar sobre o stack de tecnologias

O stack tecnológico aqui é moderno e livre de código legado.

O backend roda no runtime Bun. Em vez de REST clássico, os desenvolvedores construíram uma API GraphQL tipada baseada em GraphQL Yoga e no pacote graphql-sse. O banco de dados é PostgreSQL com Drizzle ORM, workers em segundo plano rodam através de BullMQ e Redis, e Better Auth cuida das sessões.

O frontend é construído com React 19 fresco, Vite, TanStack Router e Tailwind CSS 4.

A arquitetura de provedores é construída em torno da interface IStorageProvider. Se você tem seu próprio storage corporativo ou WebDAV específico, pode adicionar suporte para ele implementando uma interface com um conjunto básico de métodos de leitura, escrita e streaming.

Como fazer deploy para você mesmo

O jeito mais rápido de experimentar o Drivebase é rodar o script oficial de instalação, que prepara o arquivo de configuração e sobe o Docker Compose:

curl -fsSL https://drivebase.io/install | bash
cd drivebase
docker compose up -d

Após iniciar, a interface web estará disponível em http://localhost:4000.

Se você quiser rodar o projeto para desenvolvimento ou modificações locais usando Bun:

git clone https://github.com/drivebase/drivebase.git
cd drivebase
bun install

Copie a configuração de exemplo:

cp packages/config/config.example.toml config.toml

No arquivo config.toml, você precisa especificar os parâmetros de conexão do PostgreSQL e Redis, além de gerar uma chave mestra de criptografia e um segredo de autorização:

[server]
env = "prod"
port = 4000
host = "0.0.0.0"

[db]
url = "postgres://user:password@localhost:5432/drivebase"

[redis]
url = "redis://localhost:6379/0"

[crypto]
# Генерация ключа: openssl rand -base64 32
masterKeyBase64 = "ваш-ключ-32-байта"

[auth]
# Генерация секрета: openssl rand -hex 32
betterAuthSecret = "ваш-рандомный-секрет"
baseUrl = "http://localhost:4000"
trustedOrigins = ["http://localhost:3000"]

Aplique as migrations e inicie o servidor de desenvolvimento:

bun run db:migrate
bun run dev

O backend vai iniciar na porta 4000, e o cliente web na porta 3000.

Para quem isso é feito

O Drivebase será útil em dois cenários principais:

  1. Servidor de casa ou homelab. Quando você tem um NAS rodando, alguns terabytes em discos externos e tiers gratuitos de nuvem, o Drivebase te dá um ponto de entrada único sem precisar instalar uma dezena de utilitários de sincronização.
  2. Times pequenos e freelancers. É conveniente manter código fonte no S3, materiais de clientes no Google Drive, e transferir resultados de trabalho entre eles através do navegador.

O projeto atualmente tem cerca de 400 estrelas no GitHub, o repositório é bem recente, então você pode encontrar algumas arestas em casos extremos. Porém, a ideia de unificar APIs heterogêneas sob uma única interface desktop no Bun e React 19 parece promissora. O código é aberto sob licença MIT, então nada te impede de fazer um fork e escrever seu próprio adaptador de storage.

Projetos relacionados