Vaultwarden self-hosted na VPS

    Vaultwarden é uma implementação leve e open-source do servidor Bitwarden — compatível com todos os clientes oficiais (extensão de browser, app mobile, desktop). Self-hosteado na VPS, suas senhas ficam exclusivamente na sua infraestrutura, com criptografia end-to-end que nem você consegue quebrar sem a master password.

    Instalar Vaultwarden com Docker Compose

    Configuração mínima segura para produção:

    yaml
    # docker-compose.yml
    services:
      vaultwarden:
        image: vaultwarden/server:latest
        restart: always
        ports:
          - "127.0.0.1:8080:80"
        environment:
          DOMAIN: "https://vault.seudominio.com.br"
          SIGNUPS_ALLOWED: "false"        # desabilitar cadastros públicos
          INVITATIONS_ALLOWED: "true"     # permitir convites por email
          ADMIN_TOKEN: "${ADMIN_TOKEN}"  # token para /admin (gerar com: openssl rand -hex 32)
          WEBSOCKET_ENABLED: "true"       # notificações em tempo real
          LOG_LEVEL: "warn"
          # Configuração de email (necessário para verificação):
          SMTP_HOST: "smtp.gmail.com"
          SMTP_PORT: "587"
          SMTP_FROM: "vault@seudominio.com.br"
          SMTP_USERNAME: "${SMTP_USER}"
          SMTP_PASSWORD: "${SMTP_PASS}"
        volumes:
          - vaultwarden_data:/data
    
    volumes:
      vaultwarden_data:
    Dica
    SIGNUPS_ALLOWED: false é essencial — com o Vaultwarden acessível publicamente, qualquer pessoa poderia criar uma conta no seu servidor sem essa configuração. Use convites ou crie contas manualmente via /admin.

    Configurar Nginx com HTTPS

    Vaultwarden requer HTTPS — os clientes Bitwarden recusam conexão sem SSL:

    nginx
    # /etc/nginx/conf.d/vaultwarden.conf
    server {
        listen 80;
        server_name vault.seudominio.com.br;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name vault.seudominio.com.br;
    
        ssl_certificate     /etc/letsencrypt/live/vault.seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/vault.seudominio.com.br/privkey.pem;
    
        client_max_body_size 128M;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            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;
        }
    
        # WebSocket para notificações em tempo real
        location /notifications/hub {
            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }

    Criar usuários e configurar o admin

    Gerenciar usuários e acessar o painel administrativo:

    bash
    # Acessar painel admin:
    # https://vault.seudominio.com.br/admin
    # Login com o ADMIN_TOKEN configurado no .env
    
    # No painel admin você pode:
    # - Criar convites para novos usuários
    # - Ver todos os usuários cadastrados
    # - Desabilitar/habilitar contas
    # - Ver logs de acesso
    
    # Criar usuário via API (quando SIGNUPS_ALLOWED=false):
    # 1. Acessar /admin → Invite User → inserir email
    # 2. Usuário receberá email para criar conta
    
    # Configurar 2FA obrigatório para todos os usuários:
    # REQUIRE_DEVICE_EMAIL=true  (exige verificação por email em novos dispositivos)
    
    # Restringir por IP (acesso apenas da rede interna):
    # No nginx: allow 177.10.0.1; deny all;
    
    # Gerar token admin seguro:
    openssl rand -hex 32

    Backup automático do vault

    Backup crítico — perder o banco do Vaultwarden significa perder todas as senhas:

    bash
    #!/bin/bash
    # /opt/scripts/backup-vaultwarden.sh
    set -euo pipefail
    
    DATE=$(date +%Y%m%d_%H%M)
    BACKUP_DIR="/var/backups/vaultwarden"
    mkdir -p "$BACKUP_DIR"
    
    # O Vaultwarden usa SQLite por padrão
    # Backup do banco com SQLite CLI (para evitar corrupção):
    docker compose exec -T vaultwarden sqlite3 /data/db.sqlite3 \
      ".backup '/data/backup_${DATE}.sqlite3'"
    
    # Copiar o backup para fora do container
    docker compose cp vaultwarden:/data/backup_${DATE}.sqlite3 \
      "$BACKUP_DIR/vault_db_${DATE}.sqlite3"
    
    # Comprimir
    gzip "$BACKUP_DIR/vault_db_${DATE}.sqlite3"
    
    # Backup completo do volume (inclui attachments, config)
    docker run --rm \
      -v vaultwarden_data:/data \
      -v "$BACKUP_DIR":/backup \
      alpine tar czf "/backup/vault_volume_${DATE}.tar.gz" /data
    
    # Upload para S3/MinIO
    aws s3 cp "$BACKUP_DIR/" s3://meu-bucket/vaultwarden/ --recursive \
      --include "*${DATE}*"
    
    # Limpar backups locais com mais de 30 dias
    find "$BACKUP_DIR" -mtime +30 -delete
    
    echo "Backup Vaultwarden concluído: $DATE"
    Atenção
    Backups do Vaultwarden são criptografados no servidor, mas ainda contêm dados sensíveis (senhas criptografadas). Armazene backups com criptografia adicional (restic, GPG) antes de enviar para storage externo.

    Conectar clientes Bitwarden ao servidor self-hosted

    Configurar os clientes oficiais para usar o servidor Vaultwarden:

    bash
    # Extensão de browser (Chrome, Firefox, Edge):
    # 1. Clicar em "Criar conta" ou "Log in"
    # 2. Clicar no ícone de engrenagem (Self-hosted Environment)
    # 3. Server URL: https://vault.seudominio.com.br
    # 4. Criar conta ou fazer login
    
    # App mobile (iOS/Android):
    # Bitwarden → Settings → Self-hosted Environment
    # Server URL: https://vault.seudominio.com.br
    
    # App desktop (Windows/macOS/Linux):
    # Settings → Self-hosted Environment
    # Server URL: https://vault.seudominio.com.br
    
    # CLI do Bitwarden:
    npm install -g @bitwarden/cli
    bw config server https://vault.seudominio.com.br
    bw login usuario@email.com
    bw sync
    
    # Exportar vault inteiro como backup adicional:
    bw export --format json --output vault_backup.json

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes