Como Hospedar seu Próprio Servidor Vaultwarden Localmente
Ter o controle total sobre suas credenciais é o primeiro passo para uma soberania digital real. Neste guia, vou detalhar como implementei meu próprio servidor de senhas utilizando o Vaultwarden (uma implementação leve em Rust da API do Bitwarden).
O objetivo é centralizar senhas e TOTP (autenticação de dois fatores) sem custos de assinatura, garantindo que as informações confidenciais não fiquem em mãos de terceiros.
A Tecnologia Escolhida
Para este projeto, escolhi três ferramentas principais que se complementam perfeitamente:
- Vaultwarden: Diferente do Bitwarden oficial (que exige gigabytes de RAM), o Vaultwarden roda com menos de 200MB, sendo ideal para Raspberry Pi, Mini PCs ou servidores caseiros enxutos.
- Tailscale: Cria uma rede Mesh VPN segura. O servidor não precisa de IP público ou portas abertas no roteador; ele só “existe” para os seus dispositivos autorizados.
- Docker: Simplifica o deploy, garante portabilidade entre ambientes e facilita rotinas de atualização.
Vaultwarden vs Bitwarden
| Feature | Vaultwarden (Self-Hosted) | Bitwarden (Official Self-Hosted) | Bitwarden Cloud |
|---|---|---|---|
| Hosting | Your hardware only | Your hardware only | Bitwarden’s servers |
| Cost | Free (infrastructure only) | Free community edition | Free (limited) / $10/year personal |
| Docker containers required | 1 | 11+ | N/A |
| RAM usage | ~50 MB idle | ~2+ GB | N/A |
| Runs on Raspberry Pi | Yes (Pi 3/4/5) | Not practically | N/A |
| Client compatibility | All official Bitwarden clients | All official Bitwarden clients | All official Bitwarden clients |
| Premium features (TOTP, sharing, collections) | All included, free | Requires paid license for some | $10/year for premium |
| Official support | Community only | Yes | Yes |
| Data privacy | 100% on your hardware | 100% on your hardware | Bitwarden’s US servers |
| Encryption model | Client-side AES-256. Server never sees plaintext. | Same | Same |
Fonte dos dados: Localtonet
Por que Tailscale em vez de Cloudflare Tunnel?
Embora o Cloudflare Tunnel seja uma alternativa popular para expor serviços locais, ele apresenta dois problemas críticos para este cenário:
- Compatibilidade: Políticas rigorosas de segurança (como mTLS) costumam quebrar a autenticação e sincronização do aplicativo mobile do Bitwarden.
- Superfície de Ataque: Deixar o cofre exposto diretamente na internet pública, mesmo atrás de um proxy, abre margem para varreduras automatizadas e possíveis vulnerabilidades de dia zero (0-day) na tela de login.
Com o Tailscale, o servidor sequer possui um registro DNS público. Ele reside estritamente em uma camada de rede criptografada ponto a ponto, acessível apenas por dispositivos autenticados na sua conta.
Pré-requisitos
Antes de começar, certifique-se de ter os seguintes componentes instalados no host:
1. Preparação do Ambiente
Comece clonando o repositório do projeto e gerando o seu arquivo de variáveis de ambiente inicial:
git clone https://github.com/ofcoliva/vaultwarden.git
cd vaultwarden
cp .env-example .env2. Configuração do Tailscale
O Tailscale cuidará da conectividade segura e da geração automática de certificados SSL válidos.
- Acesse o painel de administração do Tailscale e, na aba DNS, habilite o Magic DNS e os HTTPS Certificates.
- Vá em Settings > Keys e gere uma nova Auth Key.
- No seu arquivo
.env, insira a chave gerada na respectiva variável:TS_AUTHKEY=tskey-auth-xxxx....
3. Gerando o Token de Administrador
O Vaultwarden exige um hash seguro utilizando o algoritmo Argon2 para proteger o acesso ao painel administrativo web.
Você pode gerar esse token escolhendo uma das duas abordagens abaixo:
Opção 1: Criando um container temporário isolado
docker run --rm -it vaultwarden/server /vaultwarden hashOpção 2: Executando direto pelo terminal (caso já tenha o binário local)
/vaultwarden hashDigite uma senha mestra forte quando solicitado. O comando retornará uma string longa iniciando com $argon2id$. Copie essa linha integralmente para o seu arquivo .env:
ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$xxxxxxxx...'4. Configuração de E-mail (SMTP)
O envio de e-mails é essencial para disparar convites a novos membros da família e receber alertas de segurança. Utilizaremos o Gmail por meio de Senhas de App.
Configurando o Gmail:
- Acesse sua Conta Google e vá na aba Segurança.
- Ative a Verificação em duas etapas.
- No campo de busca superior, procure por “Senhas de app”.
- Crie uma nova credencial chamada
Vaultwarden Locale copie o código gerado de 16 dígitos.
Atualizando o .env:
Preencha os parâmetros de SMTP substituindo as credenciais correspondentes:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURITY=starttls
SMTP_USERNAME=seu-email@gmail.com
SMTP_PASSWORD=aquela-senha-de-16-digitos
SMTP_FROM=seu-email@gmail.comSubindo o Servidor
Com todas as variáveis devidamente preenchidas no .env, inicialize a stack em modo de segundo plano (detached):
docker compose up -dPara descobrir a URL de acesso exclusiva gerada pelo ecossistema do Tailscale, inspecione os logs do container da VPN:
docker logs tailscale_containerProcure por uma saída similar a: https://seu-servidor.palavra-palavra.ts.net/.
Nota importante: O certificado SSL é provisionado de forma totalmente automatizada. Para estabelecer a conexão com a URL, o dispositivo de origem (PC ou smartphone) deve estar ativamente conectado à sua malha do Tailscale.
Estratégia de Backup (Obrigatório)
Administrar serviços próprios (self-hosting) sem uma política rígida de backup é aceitar a perda iminente de dados. O Vaultwarden concentra todo o seu estado dentro do volume vaultwarden-data.
- O que proteger: O arquivo de banco de dados
db.sqlite3, o diretório de mídiasattachmentse o arquivo de definições estruturaisconfig.json. - Abordagem recomendada: Mantenha rotinas frequentes para compactar e descentralizar esses volumes para além do host físico original.
Em breve criarei um post ensinando a fazer o backup em cloud automatizado usando Rclone como um complemento da stack atual.
Atualização [07 de Junho de 2026]: Uma solução de backup automatizado e criptografado na nuvem foi desenvolvida e adicionada no fim desta postagem.
Ajustes de Pós-Instalação e Mobile
Fechando as portas para novos registros
Logo após criar a sua conta administrativa principal, é uma boa prática fechar o servidor para novas inscrições externas. No seu arquivo .env, altere o seguinte parâmetro e reinicie o container:
SIGNUPS_ALLOWED=falseConfiguração no Smartphone
Para integrar os aplicativos nativos do Bitwarden ao seu servidor privado:
- Certifique-se de que o aplicativo do Tailscale esteja ativo e conectado no celular.
- Na tela de login do app do Bitwarden, localize a opção de seleção de região/servidor (geralmente exibido como “Entrando em: bitwarden.com”).
- Altere a configuração para Auto-hospedado.
- No campo “URL do Servidor”, informe o seu endereço completo:
https://seu-servidor.nome-usuario.ts.net.
Acesso e Gestão
- Interface do Usuário: Acesse a URL raiz gerada para interagir com o seu cofre diariamente.
- Painel de Admin: Gerencie configurações globais e usuários navegando diretamente até o endpoint
/admin(ex:https://seu-servidor.ts.net/admin).
⚠️ Aviso importante O Vaultwarden é um projeto alternativo de código aberto e não possui vínculo oficial com a marca Bitwarden Inc. Não acione os canais de suporte oficiais corporativos para tratar de problemas desta instância. Relate bugs e busque auxílio técnico diretamente na comunidade:
Atenção: Os dados são criptografados rigidamente no lado do cliente (client-side encryption). O servidor armazena apenas blocos ilegíveis. Se você esquecer a sua senha mestra, não há mecanismo de recuperação e os dados estarão permanentemente perdidos.
FAQ de Emergência
“E se o meu servidor local cair e eu estiver na rua?” Não entre em pânico. Os clientes oficiais do Bitwarden (tanto extensões de navegador quanto aplicativos móveis) trabalham com uma cópia em cache local fortemente criptografada. Você conseguirá consultar e usar suas credenciais normalmente mesmo que o servidor esteja completamente offline. A comunicação ativa com o host só se faz necessária no momento de sincronizar modificações, exclusões ou novos cadastros.
Se você já possuir uma VPS ativa rodando outros serviços pequenos, ela pode ser usada como host para mitigar esse tipo de indisponibilidade, contanto que possua os requisitos mínimos livres de hardware.
Dica de Manutenção
Após a primeira inicialização bem-sucedida, o ecossistema do Vaultwarden passa a priorizar as configurações gravadas no arquivo interno config.json localizado no volume de dados. Caso precise realizar ajustes futuros nas definições de e-mail (SMTP) ou permissões, dê preferência a fazer as modificações diretamente através do Painel de Administração Web, garantindo que as alterações persistam corretamente entre reinicializações.
Atualização: 07 de Junho de 2026
Conforme prometido, finalizei a arquitetura da solução de backup automatizado. Se o seu deploy foi realizado antes dessa data, pequenas adequações na estrutura de diretórios do seu Docker Compose atual são necessárias para compatibilidade total.
Caso esteja iniciando o projeto do zero agora, desconsidere os passos abaixo, pois o repositório principal já se encontra atualizado com estas correções estruturais.
1. Adequando o Compose antigo
É necessário migrar o mapeamento do Vaultwarden de bind mount (diretório mapeado diretamente no host) para um volume nomeado gerenciado pelo Docker Engine. Altere a estrutura do seu compose.yml:
volumes:
vaultwarden-data:
name: vaultwarden-data
services:
# ... resto das definições do serviço
vaultwarden:
volumes:
- vaultwarden-data:/data(O mesmo ajuste pode ser aplicado ao mapeamento do Tailscale se desejar padronizar, conforme instruído no guia oficial de Containers do Tailscale).
2. Reiniciando a Stack
Aplique as novas definições recriando os containers:
docker compose up -d3. Migrando os dados legados para o novo Volume
Copie a árvore de arquivos do seu antigo diretório local do host diretamente para dentro do novo volume do container ativo:
docker cp .\vw-data\. vaultwarden_container:/data/(Nota: A orientação das barras invertidas ou normais do caminho do diretório pode variar a depender do sistema operacional do seu host).
Próximo Passo: Backup Avançado
Com os dados organizados em volumes nativos, podemos ativar a rotina de proteção resiliente com deduplicação de dados.
Saiba como implementei a estratégia completa de backup com Borgmatic e Rclone clicando aqui.