Filestash no Ubuntu e Debian: instalação por binário e comparação com o File Browser

Mascote LinuxPro conectando cabos coloridos a um monitor com o Filestash, ligado a servidor, NAS, balde de objetos, nuvem e HD externo, com o cachorro caramelo cyborg deitado ao lado

O fim do File Browser deixou muita gente procurando um gerenciador de arquivos web para colocar no servidor. O FileBrowser Quantum é o substituto direto, mas não é a única opção. O Filestash parte de outra ideia: em vez de mostrar uma pasta do disco, ele é um cliente web para quase qualquer armazenamento, de SFTP e FTP a S3, SMB, WebDAV, NFS e Git. Neste guia, você vai compilar o Filestash a partir do código, instalar o binário no Debian ou no Ubuntu com systemd e Nginx, e comparar as três opções para saber qual faz sentido no seu caso.

O que é o Filestash

O Filestash é mantido por Mickael Kerjean desde 2017, escrito em Go, com a interface web em JavaScript puro, e tem cerca de 14,7 mil estrelas no GitHub. A licença é a AGPL-3.0: você pode usar e modificar à vontade, mas se oferecer uma versão modificada como serviço na rede, precisa publicar o código dessas modificações.

A arquitetura gira em torno de plugins. O próprio README resume a filosofia: tudo o que não é uma “verdade fundamental do universo” vive num plugin. Na prática, isso se traduz em três tipos de peça:

  • Armazenamento (backends): disco local, SFTP, FTP, S3 e compatíveis, SMB, NFS, WebDAV, Git, Dropbox, Google Drive, Backblaze, Storj, Artifactory e outros.
  • Autenticação: só o administrador, arquivo htpasswd no estilo Apache, usuários locais com MFA, LDAP/Active Directory, passthrough (o login é repassado ao próprio armazenamento) e até usuários de um WordPress.
  • Aplicativos de visualização: editor de código, imagens RAW, PDF, vídeo com transcodificação sob demanda, documentos de escritório via Collabora/WOPI e, como plugins extras, visualizadores para formatos de áreas como GIS, CAD e dados.

Vale saber desde já onde fica a linha entre o que é aberto e o que é pago. A documentação oficial marca como recursos da edição comercial o login por OpenID Connect e SAML, as regras de autorização por papel (RBAC) e o HTTPS nativo com certificado próprio ou ACME. Na build AGPL que você compila, esses plugins não vêm incluídos; LDAP, htpasswd e usuários locais vêm.

Como funciona

O Filestash não guarda os seus arquivos: ele se conecta aos armazenamentos que você habilitar e mostra todos na mesma interface. A configuração, o banco de metadados, o índice de busca e o cache ficam num diretório de estado. No nosso guia, o binário roda com systemd, escuta na porta 8334 e fica atrás do Nginx com TLS.

Diagrama: o navegador acessa o Nginx com TLS, que repassa para o Filestash na porta 8334; o Filestash guarda o estado em /var/lib/filestash e se conecta a disco local, SFTP, FTP, S3, SMB, NFS, WebDAV, Git, Dropbox e Google Drive

Por que compilar

O Filestash não publica binário pronto. A instalação oficial é o docker-compose.yml da documentação, com a imagem machines/filestash:latest, e a última tag numerada no GitHub é a v0.4, de 2019: o projeto é distribuído como rolling release, a partir do ramo principal. Para rodar sem Docker, o caminho é compilar, exatamente como o Dockerfile oficial faz: Go para o servidor, bibliotecas C para miniaturas de imagem e FFmpeg para vídeo.

Testamos o procedimento abaixo em contêineres limpos de Debian 13 e Ubuntu 24.04, com o código de 21 de setembro de 2026. Há uma diferença importante entre os dois:

  • No Debian 13, a mesma base do Dockerfile oficial, a compilação sai completa.
  • No Ubuntu 24.04, o plugin de transcodificação de vídeo não compila: ele usa funções do FFmpeg 7.1, e o 24.04 traz o FFmpeg 6.1. A solução é tirar esse plugin da build, com uma linha de sed. O resto da aplicação compila e funciona normalmente; só a conversão de vídeo sob demanda fica de fora.

Dependências de compilação

Instale as ferramentas e as bibliotecas de desenvolvimento, as mesmas que o Dockerfile oficial usa:

sudo apt update
sudo apt install -y git curl make gcc g++ pkg-config ca-certificates apache2-utils \
  libjpeg-dev libtiff-dev libpng-dev libwebp-dev libraw-dev libheif-dev libgif-dev libvips-dev \
  libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev \
  libswresample-dev libswscale-dev libavutil-dev ffmpeg poppler-utils

O go.mod do projeto exige Go 1.26, mais novo do que o dos repositórios do Debian e do Ubuntu. Instale a versão oficial em /usr/local/go:

GO_VERSION=1.26.8
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" | sudo tar -C /usr/local -xz
export PATH=/usr/local/go/bin:$PATH
go version

Em servidor ARM, troque amd64 por arm64.

Compilando o binário

git clone --depth 1 https://github.com/mickael-kerjean/filestash ~/filestash-src
cd ~/filestash-src

# Somente no Ubuntu 24.04 (FFmpeg 6.1): remove o plugin de transcodificação
sed -i '/plg_video_transcoder/d' server/plugin/index.go

make init
make build
ls -lh dist/

make init baixa os módulos Go e gera o código embutido; make build produz dist/filestash com a interface web dentro do binário. Avisos do compilador C durante o build são normais; o que importa é o arquivo existir no final.

O binário é dinâmico: ele depende das bibliotecas de imagem e vídeo instaladas no passo anterior. Por isso, o jeito mais simples é compilar no próprio servidor. Se for compilar em outra máquina, use a mesma versão da distribuição e instale no servidor as bibliotecas de execução correspondentes (as listadas por ldd dist/filestash).

Instalando com systemd

Crie um usuário de sistema, copie o conteúdo de dist/ para /opt/filestash e reserve /var/lib/filestash para o estado. A variável FILESTASH_PATH diz ao Filestash onde gravar configuração, banco, índice de busca e cache; sem ela, ele usa data/ relativo ao diretório de trabalho.

sudo useradd --system --home-dir /var/lib/filestash --shell /usr/sbin/nologin filestash
sudo install -d -o root -g root -m 0755 /opt/filestash
sudo cp -a ~/filestash-src/dist/. /opt/filestash/
sudo install -d -o filestash -g filestash -m 0750 /var/lib/filestash
sudo install -d -o root -g filestash -m 0750 /etc/filestash

Senha do administrador antes de subir

Este é o cuidado mais importante do guia. Enquanto não existe senha de administrador, o Filestash redireciona tudo para /admin/setup, e qualquer pessoa que chegar primeiro vira administradora. Conferimos no código: sem senha definida, a verificação de sessão do painel devolve “autenticado” para qualquer um. E o servidor HTTP escuta em todas as interfaces, não só em 127.0.0.1.

Por isso, defina a senha antes da primeira execução, pela variável ADMIN_PASSWORD. Ela não recebe a senha em texto: recebe o hash bcrypt, que o htpasswd gera:

read -rsp 'Senha do admin: ' SENHA; echo
HASH=$(htpasswd -bnBC 10 "" "$SENHA" | tr -d ':\n')
unset SENHA
printf 'FILESTASH_PATH=/var/lib/filestash/\nADMIN_PASSWORD=%s\n' "$HASH" | sudo tee /etc/filestash/filestash.env >/dev/null
sudo chown root:filestash /etc/filestash/filestash.env
sudo chmod 0640 /etc/filestash/filestash.env

Na inicialização, o Filestash grava esse hash na própria configuração. Mantenha a variável no arquivo: se um dia você trocar a senha pelo painel, lembre que a variável volta a valer no próximo restart.

A unit

Crie /etc/systemd/system/filestash.service:

[Unit]
Description=Filestash
After=network-online.target
Wants=network-online.target

[Service]
User=filestash
Group=filestash
WorkingDirectory=/var/lib/filestash
EnvironmentFile=/etc/filestash/filestash.env
ExecStart=/opt/filestash/filestash
Restart=on-failure

NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/filestash

[Install]
WantedBy=multi-user.target

Com ProtectSystem=strict, o serviço só grava em /var/lib/filestash. Se você for usar o armazenamento local para servir uma pasta do servidor, acrescente essa pasta em ReadWritePaths e dê permissão ao usuário filestash; para SFTP, S3 e os demais, nada muda.

sudo systemctl daemon-reload
sudo systemctl enable --now filestash
curl -s http://127.0.0.1:8334/healthz; echo
journalctl -u filestash -f

O /healthz responde com um JSON de status, útil para monitorar. Para o básico de units e logs, veja o guia de comandos essenciais do systemd.

Feche a porta 8334

Como o Filestash escuta em todas as interfaces, bloqueie a porta 8334 no firewall e deixe o acesso externo só pelo Nginx:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw deny 8334/tcp
sudo ufw enable
sudo ufw status

Nginx com HTTPS

A configuração segue a que o autor publica para a demo oficial: sem buffer, com timeout longo para uploads e transferências grandes.

server {
    listen 80;
    server_name arquivos.exemplo.com.br;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name arquivos.exemplo.com.br;

    ssl_certificate     /etc/letsencrypt/live/arquivos.exemplo.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/arquivos.exemplo.com.br/privkey.pem;

    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:8334;
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 86400;
        proxy_set_header Host $host:$server_port;
        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;
    }
}

Emita o certificado com sudo certbot --nginx -d arquivos.exemplo.com.br e recarregue o Nginx. client_max_body_size 0 tira o limite de tamanho de upload no proxy; se preferir um teto, use algo como 10G.

Primeira configuração

Abra https://arquivos.exemplo.com.br/admin e entre com a senha definida no hash. O painel tem três áreas principais:

  • Storage: marque os armazenamentos que os usuários podem usar (por exemplo, só SFTP e S3). Cada um vira uma opção na tela de login.
  • Authentication: escolha quem entra. Sem plugin de autenticação, o usuário digita os dados do próprio armazenamento (host, porta, usuário), como num cliente FTP. Com passthrough, você fixa host e porta e o usuário só digita login e senha do SFTP. Com htpasswd, local ou LDAP, o Filestash autentica e depois conecta ao armazenamento com credenciais definidas por você, inclusive com caminho diferente por usuário.
  • Settings: nome do site, host público (usado em links), porta e recursos opcionais. O console web (/admin/tty/) vem desligado por padrão; deixe assim.

Um exemplo comum para servidor Linux: habilitar só o SFTP, usar passthrough com hostname fixo em 127.0.0.1, e cada pessoa entra com o próprio usuário do sistema. As permissões são as do Linux, e o Filestash vira uma interface web para o SSH que você já administra.

Atualizando

Sem versões numeradas, atualizar significa recompilar a partir do ramo principal. Guarde uma cópia do binário anterior e do diretório de estado antes:

sudo tar czf /root/filestash-estado-$(date +%F).tar.gz -C /var/lib filestash
sudo cp -a /opt/filestash /opt/filestash.anterior

cd ~/filestash-src
git pull
sed -i '/plg_video_transcoder/d' server/plugin/index.go   # só no Ubuntu 24.04
make init && make build
sudo systemctl stop filestash
sudo cp -a dist/. /opt/filestash/
sudo systemctl start filestash
curl -s http://127.0.0.1:8334/healthz; echo

No Ubuntu, o git pull pode reclamar da alteração local em server/plugin/index.go; rode git checkout server/plugin/index.go antes do pull e aplique o sed de novo depois.

File Browser, FileBrowser Quantum e Filestash lado a lado

Os três são gerenciadores de arquivos web em Go, mas resolvem problemas diferentes:

File Browser FileBrowser Quantum Filestash
Situação Arquivado em 1º/9/2026, sem correções Ativo: stable v1.5.x, beta v2.0 Ativo, rolling release
Licença Apache 2.0 Apache 2.0 AGPL-3.0
Binário oficial Sim Sim (amd64, arm64, armv6, armv7) Não; Docker ou compilação
O que ele acessa Uma pasta do disco Várias pastas do disco Disco, SFTP, FTP, S3, SMB, NFS, WebDAV, Git, nuvens
Login Usuário e senha, proxy, hook Senha + 2FA, OIDC, LDAP, JWT, proxy htpasswd, local + MFA, LDAP, passthrough; OIDC e SAML só na edição paga
Busca Simples Indexada, em tempo real Por varredura na build padrão; índice full-text é plugin à parte
Compartilhamento Links com validade e senha Links com validade, senha e permissões Links com validade, senha, usuários e permissões de leitura, escrita e upload
Execução de comandos Existe, com falhas que não serão corrigidas Removida Console web opcional, desligado por padrão
Configuração Flags e banco config.yaml Painel /admin (grava config.json)

Os dados de login, busca e compartilhamento vêm da documentação e do código de cada projeto; recursos da edição comercial do Filestash estão marcados na documentação de instalação.

Qual escolher

  • File Browser original: nenhum projeto novo deve começar com ele. Se ainda roda, trate como software sem manutenção e planeje a saída. Os motivos estão no post sobre o fim do File Browser e o FileBrowser Quantum.
  • FileBrowser Quantum: a escolha natural quando os arquivos estão no disco do servidor e você quer uma experiência “Google Drive” com usuários, compartilhamentos, busca e SSO por OIDC sem pagar nada. É também a migração mais curta para quem vem do File Browser.
  • Filestash: a escolha quando os arquivos não estão todos num disco local. Um bucket S3, um servidor SFTP legado, um compartilhamento SMB e um repositório Git na mesma tela, com login repassado ao próprio armazenamento. O preço é a instalação mais trabalhosa sem Docker e a licença AGPL, que pede atenção se você for modificar e oferecer o serviço a terceiros.

Se o seu armazenamento de objetos é um MinIO, o post sobre o OpenObserve com S3 e MinIO mostra como preparar o bucket e as credenciais que o Filestash vai usar. E para acompanhar a disponibilidade de qualquer uma das três opções, o Go Uptime pode checar o endpoint de saúde e avisar quando o serviço cair.

Conclusão

O Filestash não compete com o FileBrowser Quantum no mesmo terreno: ele é um cliente web universal de armazenamento, não um explorador de uma pasta. Compilado no Debian ou no Ubuntu, vira um único binário gerenciado pelo systemd, sem Docker. Os dois cuidados que não podem faltar são a senha de administrador definida antes da primeira execução e a porta 8334 fechada no firewall. Documentação e plugins estão em filestash.app.