1 - Introdução: Por Que Auto-Hospedar um Gerenciador de Senhas? #
Em tempos em que proteger nossos dados é mais importante do que nunca, lidar com senhas virou um desafio diário. Reaproveitar a mesma senha em vários lugares ou confiar em serviços de terceiros pode até parecer mais prático, mas também abre portas para riscos e violações de privacidade. É aí que entra a ideia de hospedar o seu próprio gerenciador de senhas: além de garantir mais segurança, você ainda tem controle total sobre tudo.
Este artigo detalha o processo de construção de um servidor de senhas robusto e seguro utilizando o Vaultwarden em um Raspberry Pi 3B+, gerenciado com Docker e Portainer, e com acesso remoto seguro via Cloudflare Tunnel. Mesmo com as especificações modestas do Raspberry Pi 3B+ (1GB RAM, CPU Quad-core 1.2GHz), esta solução demonstra ser altamente eficiente e confiável para uso pessoal.
Neste artigo, você aprenderá a:
- Realizar o deploy do Vaultwarden como um contêiner Docker.
- Configurar o Cloudflare Tunnel e Access para acesso seguro sem abertura de portas.
2 - A Base: Raspberry Pi OS Lite em Modo Headless 💻 #
Para começar, o Raspberry Pi 3B+ é um hardware muito modesto porém capaz para essa tarefa, com apenas(1GB RAM, Quad-core 1.2GHz). Escolhi o Raspberry Pi OS Lite porque, por não ter interface gráfica, ele é super leve e otimiza os poucos recursos do Pi para o que realmente importa: rodar os serviços.
2.1 - Preparação do Cartão MicroSD e Primeiro Acesso #
Usei o Raspberry Pi Imager para gravar o Raspberry Pi OS Lite no cartão MicroSD. A grande vantagem aqui foi usar o modo headless, configurando usuário, senha e SSH diretamente no Imager.E como o meu Raspberry esta com a saida da video HDMI queimadas, foi o suficiente.
- Ferramenta utilizada: Raspberry Pi Imager
- Detalhes da configuração que utilizei:
Raspberry Pi OS Lite (32-bit)
- Habilitei SSH com autenticação por senha.
- Defini um usuário e senha.
- Configurei o fuso horário para a minha localização.
Após gravar, o processo foi padrão: inserir o cartão no Pi, conectar o cabo de rede e a energia.
2.2 - Encontrando o IP e Primeiro Login via SSH #
Como estava em modo headless, precisei descobrir o IP que o Raspberry Pi pegou na minha rede. Para isso, usei o Nmap, uma ferramenta excelente para varredura de rede, que me mostrou todos os dispositivos conectados à minha rede e seus respectivos IPs.
Rodei o comando:
sudo nmap -sn -vv --resolve-all 192.168.1.0/24
# Substitua pela sua faixa de IP da rede (ex: 192.168.0.0/24)
O Resutado se parecera com isso:
Nmap scan report for 192.168.1.23 [host down,received no-response]
Nmap scan report for 192.168.1.24
Host is up, received arp-response (0.00038s latency).
MAC Address: B8:56:EB:5E:91:C5 (Raspberry Pi Foundation)
Nmap scan report for 192.168.1.25
Host is up, received arp-response (0.00043s latency).
MAC Address: B8:56:EB:5E:91:C5 (Raspberry Pi Foundation)
Nmap scan report for 192.168.1.26 [host down,received no-response]
Nmap scan report for 192.168.1.27 [host down,received no-response]
Usando o nmap, identifiquei os IPs do meu Raspberry Pi na rede: 192.168.1.24 para a conexão wireless e 192.168.1.25 para a cabeada, confirmando-os pelos seus respectivos nomes de MAC.
Com o IP em mãos, fiz o acesso remoto via SSH:
ssh meu_usuario@IP_DO_MEU_PI
# Toque pelo nome e pelo IP do seu RASPBERRY
3 - Orquestrando Serviços: Docker e Portainer 🐳 #

Queria algo simples e facil, e para isso, Docker e Portainer são a combinação perfeita. Eles permitem isolar e gerenciar aplicações de forma eficiente no meu Raspberry Pi.
3.1 - Docker: O Motor dos Contêineres #
O Docker permite empacotar apps como o Vaultwarden com tudo que precisam pra funcionar. Isso garante que rodem de forma isolada, em qualquer lugar. No meu caso, foi a solução ideal pra ter o Vaultwarden rodando bem no Raspberry Pi, sem conflitos e usando bem os recursos.
A instalação do Docker no Raspberry Pi (que possui arquitetura ARM) é um processo bem documentado. É só seguir o guia oficial do Docker para a instalação, que oferece um convenience script para uma instalação rápida e automatizada.
Para instalar o Docker no seu Raspberry Pi, consulte o guia oficial:
3.2 - Portainer: A Interface de Gerenciamento Visual #
Para gerenciar contêineres de forma mais visual e simplificada, o Portainer é uma ferramenta muito boa.
-
Com o Portainer, posso facilmente:
- Visualizar o status de todos os meus contêineres.
- Criar e gerenciar volumes persistentes para os dados das minhas aplicações.
- Implantar novas aplicações usando “Stacks” (baseadas em Docker Compose).
- Monitorar logs e recursos dos contêineres.
A instalação do Portainer CE (Community Edition) também é feita via Docker.
Para instalar e configurar o Portainer CE, consulte o guia oficial:
Com o Docker e o Portainer instalados e funcionando, agora vamos preparar o Vaultwarden.
3.3 - Implantando o Vaultwarden via Portainer 💾 #
Com o Docker e Portainer em funcionamento, o próximo passo foi implantar o Vaultwarden.
Primeiro, acessei o Portainer pelo navegador, usando o IP do meu Raspberry Pi e a porta 9443:
https://SEU_IP_DO_PI:9443
Na primeira vez, precisei criar um usuário e senha (com um mínimo de 12 caracteres para segurança) para o Portainer. Depois de fazer login, fui para “GET STARTED” e selecionei “Local” dentro de “Environments”.
3.4 - Criando um “Custom Template” para o Vaultwarden #
Para facilitar futuros deployments ou configurações, decidi criar um “Custom Template” no Portainer. Isso armazena o docker-compose.yml
do Vaultwarden diretamente na interface, tornando a implantação mais rápida e padronizada.
- Naveguei para a aba “Templates” e selecionei “Custom”.
- Cliquei em “Add Custom Template”.
- Preenchi o “Title” (ex: “Vaultwarden Server”) e uma “Description” (ex: “Servidor de senhas leve e seguro”).
- No editor de código, colei a configuração Docker Compose para o Vaultwarden. Baseei-me na documentação oficial do Vaultwarden, ajustando alguns pontos para o meu ambiente:
Porem a parte que nos interessa agora é o Docker Compose:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "[https://vw.domain.tld](https://vw.domain.tld)" # Este será ajustado depois pelo Cloudflare Tunnel
volumes:
- ./vw-data/:/data/ # Onde os dados do Vaultwarden serão armazenados persistentemente
ports:
- 8800:80 # Mudei a porta local para 8800 para evitar conflitos com outras aplicações na porta 8000
(Nota: A variável `DOMAIN` aqui é apenas um placeholder inicial; ela será efetivamente gerenciada pelo Cloudflare Tunnel mais tarde. A porta `8800` foi uma escolha minha para evitar conflitos, já que a porta 8000 é comum para outros serviços.)
- Rolei para baixo e cliquei em “Create custom template”.
3.5 - Deploying a Stack: Ativando o Vaultwarden #
Com o template personalizado criado, o deploy da aplicação se tornou muito simples.
- Naveguei para a aba “Stacks”.
- Cliquei em “Add stack”.
- Dei um “Name” para a minha stack (ex:
vaultwarden-stack
). - Em “Build method”, selecionei “Custom Template” e escolhi o template “Vaultwarden Server” que acabei de criar.
- Rolei para baixo e cliquei em “Deploy the stack”.
O Portainer iniciou o processo de baixar a imagem Docker do Vaultwarden e criar o contêiner. Fui para a aba “Containers” para monitorar o status. Esperei até que o estado do contêiner (vaultwarden
) mudasse para “Healthy” (indicado pela cor verde), o que confirmou que o servidor Vaultwarden estava funcionando corretamente.
Com o Vaultwarden rodando, o próximo passo foi configurar o acesso seguro via Cloudflare Tunnel.
4 - Criando o Túnel com Cloudflare Tunnel para Acesso Remoto 🌐 #

O objetivo principal desta etapa é tornar o Vaultwarden acessível de qualquer lugar do mundo, mas de forma segura e sem expor minha rede doméstica. Para isso, o Cloudflare Tunnel foi a escolha perfeita.
Pré-requisito crucial: Para seguir este passo, é fundamental que você já tenha uma conta ativa na Cloudflare e um domínio (ou subdomínio) adicionado e configurado para usar os nameservers da Cloudflare.
4.1 - Configurando o Túnel no Cloudflare Zero Trust Dashboard #
Todo o processo de criação do túnel começa no painel de controle da Cloudflare.
- Acesse sua conta Cloudflare.
- No menu lateral esquerdo, selecione “Zero Trust”. Isso irá redirecionar para o dashboard do Cloudflare Zero Trust.
- Vá para “Network” e depois “Tunnels”.
- Clique em “Create a tunnel”.
- Na tela de tipo de túnel, selecione “Cloudflared”.
Cloudflared vs. WARP #
Escolhi cloudflared porque ele é o método ideal para criar túneis diretos para servidores (como meu Raspberry Pi) para a rede Cloudflare.
WARP é mais voltado para conectar dispositivos de usuários (laptops, celulares) à sua rede ou serviços, agindo como uma VPN.
Para auto-hospedagem, cloudflared é a opção correta.
- Em “Name your tunnel”, escolha um nome fácil de identificar (ex:
tunnelRaspberry
). - Clique em “Save tunnel”.
4.2 - Conectando o Raspberry Pi ao Túnel (O Conector) #
Após criar o túnel, a Cloudflare apresenta as opções de “Connectors”.
O que são Conectores?
Conectores são instâncias do software cloudflared que rodam em seus servidores (no meu caso, o Raspberry Pi). Eles são a ponte que estabelece uma conexão segura e persistente de saída entre seu servidor e a Cloudflare.
A Cloudflare oferece comandos para diversos sistemas (Windows, macOS, Linux e Docker).
Por que Docker? #
Decidi usar Docker para rodar o cloudflared
como um contêiner no Raspberry Pi. Isso mantém o sistema base mais limpo e aproveita a infraestrutura Docker que já estava configurada com o Portainer.
Comando gerado pela Cloudflare:
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <SEU_TOKEN_GERADO_AQUI>
Acessando o Raspberry Pi via SSH No terminal do meu computador, usei:
ssh meu_usuario@IP_DO_MEU_PI
Colei o comando docker run no terminal e pressionei Enter. O contêiner foi baixado e iniciado, conectando automaticamente à Cloudflare.
Após alguns segundos, o status do conector mudou para “CONNECTED” (verde) no painel da Cloudflare. Cliquei em “Next” para prosseguir.
4.3 - Configurando as Rotas (Public Hostnames) #
Agora vamos informar à Cloudflare qual subdomínio apontará para qual serviço no Raspberry Pi.
Na seção “Public Hostnames”, clique em “Add a public hostname”.
Configurações para o Vaultwarden: #
- Subdomain:
cofre
- Domain:
meudominio.com
(ou outro configurado na Cloudflare) - Path: (em branco)
- Service:
- Type:
HTTP
- URL:
192.168.1.24:8800
- Type:
💡 Lembre-se: Mudei a porta do Vaultwarden para
8800
no meudocker-compose.yml
.
Clique em “Save hostname”.
A Cloudflare leva alguns minutos para propagar o DNS e ativar o túnel globalmente. Com isso, o túnel principal do Vaultwarden estava ativo e funcionando! via rede Cloudflare. O próximo passo é a configuração inicial do próprio Vaultwarden.
5 - Configurando o Vaultwarden e o Primeiro Acesso 🔐 #

Com o Cloudflare Tunnel ativo e direcionando o tráfego para o meu Raspberry Pi, o Vaultwarden estava acessível via internet. O próximo passo foi a configuração inicial do servidor e a criação da minha conta de usuário.
5.1 - Primeiro Acesso e Criação da Conta Mestra #
Acesse o domínio que você configurou no Cloudflare Tunnel (no meu caso, cofre.meudominio.com.br
):
Ao carregar a página pela primeira vez, você será apresentado à tela de criação de conta. Clique em “Create Account”.
- E-mail e Nome: Insira seu endereço de e-mail e um nome de usuário. Estes serão suas credenciais de acesso ao Vaultwarden.
- Clique em “Continue”.
5.2 - Definindo sua Senha Mestra (MUITO IMPORTANTE!) #
Este é o momento mais crítico da configuração. Você será solicitado a criar sua Senha Mestra.
- O que é a Senha Mestra? É a única senha que você vai precisar lembrar — ela dá acesso ao seu cofre inteiro. Na prática, é como a chave-mestra de um cofre real: se você perder, não tem volta. Ninguém (nem mesmo você) poderá recuperar os dados salvos no Vaultwarden. Por isso, criar uma senha forte e não esquecê-la de jeito nenhum é fundamental.
- Minha Recomendação: Crie uma senha longa e segura, misturando letras maiúsculas e minúsculas, números e símbolos. Uma boa ideia é usar uma frase única que faça sentido só pra você, algo fácil de lembrar mas difícil de adivinhar.
- Dica de Senha (Hint): Esse campo pode te salvar se a memória falhar. Escreva uma dica que só você entenda — algo que te faça lembrar da senha, sem entregá-la de bandeja.
Após definir sua senha mestra e, se desejar, uma dica, clique em “Create Account”.
Com sua conta criada e a senha mestra definida, você está dentro do seu cofre Vaultwarden! Agora você tem controle total sobre suas senhas.
6 - Finalizando o Setup: Protegendo com Cloudflare Access 🔑 #

Mesmo com o túnel ativo, eu queria uma camada extra de segurança para controlar quem pode tentar acessar meu cofre. É aqui que entra o Cloudflare Access.
- O que é Cloudflare Access? É um serviço da Cloudflare que adiciona uma camada de autenticação antes mesmo que o usuário chegue à sua aplicação. Em vez de expor o login do Vaultwarden diretamente à internet, o Cloudflare Access age como um “porteiro digital”. Ele verifica a identidade do usuário (por e-mail, provedores de identidade, etc.) e só libera o acesso à sua aplicação se a autenticação for bem-sucedida, tudo isso sem a necessidade de um VPN tradicional.
Voltamos ao painel da Cloudflare para configurar esta política.
6.1 - Adicionando a Aplicação ao Cloudflare Access #
- No painel da Cloudflare Zero Trust, navegue até a aba lateral esquerda e clique em “Access”.
- Em seguida, selecione “Applications” e clique em “Add an Application”.
- Escolha a opção “Self-hosted”, já que estamos protegendo um serviço rodando em sua própria infraestrutura (seu Raspberry Pi).
6.2 - Configurando as Políticas de Segurança #
Aqui, vamos definir como o Cloudflare Access irá proteger seu Vaultwarden.
-
Basic Information:
- Em “Application Name”, eu coloquei
Cofre
. Este é um nome de exibição para sua aplicação no painel do Cloudflare Access. - Em “Session Duration”, eu defini 24 horas.
- Minha escolha para Session Duration: Esta é a duração de tempo que um usuário autenticado pode acessar a aplicação sem precisar se reautenticar. Eu escolhi 24 horas para um bom equilíbrio entre segurança e conveniência, evitando ter que digitar o código a cada poucas horas. É uma escolha pessoal baseada na sua tolerância a reautenticações.
- Em “Application Name”, eu coloquei
-
Public Hostname:
- “Input Method”: Deixe como Default.
- “Subdomain”: Coloque o mesmo subdomínio que você usou na configuração do túnel, no meu caso,
cofre
. - “Domain”: Selecione o seu domínio principal (ex:
meudominio.com.br
). - “Path”: Deixe vazio.
-
Access Policies: Agora, vamos criar a regra que define quem pode acessar. Clique em “CREATE NEW POLICY”. Uma nova janela ou seção se abrirá.
-
Basic Information da Política:
- Dê um “Policy name” (ex:
LoginEmail
). - Em “Action”, deixe como
Allow
(permitir). - Em “Session duration”, você pode escolher uma duração para a sessão da política. Eu escolhi 24 horas, assim como na aplicação.
- Dê um “Policy name” (ex:
-
Configurando as Regras (Rules):
- Na seção “Add rules”, vamos definir quem é permitido.
- Em “Selector”, escolhi
Emails
. Isso significa que a autenticação será baseada no endereço de e-mail. - Em “Value”, inseri os endereços de e-mail que eu desejo permitir o acesso à aplicação. Você pode adicionar múltiplos e-mails aqui.
-
Role para baixo e clique em “Save”.
-
-
Voltando à Configuração da Aplicação: Após salvar a política, você retornará à página de configuração da aplicação do Access.
- Em “Access Policies”, selecione a opção “SELECT EXISTING POLICIES”.
- Selecione a sua política recém-criada. No meu caso, ela se chamava
LoginEmail
.
-
Finalizando a Configuração:
- Role para o final da página e clique em “Next”.
- Clique em “Next” novamente, pois não faremos uma “Custom page” aqui (a página de login padrão da Cloudflare já é suficiente).
- Clique em “Save”.
Em poucos segundos, a configuração do Cloudflare Access estará pronta e ativa!
6.3 - Testando o Acesso Seguro #
Para testar, acesse novamente o domínio da sua aplicação:
https://cofre.meudominio.com.br
Agora, você será redirecionado para a página de login do Cloudflare Access. Insira o e-mail que você permitiu na política de acesso. A Cloudflare enviará um código de acesso único para este e-mail. Digite o código na página, e você poderá acessar o Vaultwarden de forma segura, sem a necessidade de abrir portas no roteador ou configurar um proxy reverso manual complexo!
Com essa camada extra de segurança, meu cofre digital estava verdadeiramente protegido e acessível de forma prática e controlada.
Conclusão #
Implementar o Vaultwarden no Raspberry Pi, acessível via Cloudflare Tunnel e protegido pelo Cloudflare Access, cria uma arquitetura poderosa para o gerenciamento de credenciais. Isso elimina nossa dependência de serviços de terceiros para dados tão críticos.
Rotina de Backup: É importante que você estabeleça e mantenha uma rotina de backups regulares para o diretório de dados do Vaultwarden. O próprio Vaultwarden oferece recursos para exportar o cofre. Use-os e armazene essas cópias de forma segura, preferencialmente em vários locais,isso garante um controle de danos em caso de falhas.
Compatibilidade Total com Clientes Bitwarden: O Vaultwarden tem compatibilidade com os clientes oficiais do Bitwarden. Isso significa que seu servidor auto-hospedado funcionará perfeitamente com os aplicativos para Android e iOS, extensões de navegador (Chrome, Firefox, Edge, etc.) e clientes de desktop. Alem de que o Valtwardem é escrito em Rust oque torna ele ainda mais performatico que o Bitwarden.
Flexibilidade de Hardware: Usei um Raspberry Pi 3B+, um hardware mais antigo e de specs baixas, e ele se mostrou eficiente para a tarefa.