Vaultwarden: Servidor Bitwarden compatible escrito en Rust
Implementación ligera y no oficial del API de Bitwarden para autohospedaje
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar Vaultwarden: Servidor Bitwarden compatible escrito en Rust en el canal GENBYTE:
¿Qué es Vaultwarden: Servidor Bitwarden compatible escrito en Rust?
Vaultwarden es una implementación alternativa del servidor de la API de cliente de Bitwarden, escrita en Rust. Es compatible con los clientes oficiales de Bitwarden (móvil, escritorio, navegador) y está diseñada para despliegues autohospedados donde ejecutar el servicio oficial, que consume muchos recursos, no sea ideal. El proyecto se conocía anteriormente como bitwarden_rs y fue renombrado para evitar confusiones con el servidor oficial de Bitwarden.
Características principales
Bóveda personal completa
Soporte para elementos, envíos (Send), adjuntos, iconos de sitios web y claves API personales.
Organizaciones y compartición
Incluye colecciones, uso compartido de contraseñas, roles de miembro, grupos, registros de eventos, restablecimiento de contraseña de administrador, conector de directorio y políticas.
Autenticación de dos factores
Compatible con autenticador, correo electrónico, FIDO2 WebAuthn, YubiKey y Duo.
Acceso de emergencia
Permite configurar contactos de confianza para acceso a la bóveda en caso de emergencia.
Panel de administración
Backend de administración de Vaultwarden para gestión de usuarios y configuración del servidor.
Cliente web integrado
Incluye una versión modificada del cliente web oficial (web-vault) empaquetada en los contenedores.
Requisitos del sistema
- HTTPS obligatorio para el cliente web (requiere contexto seguro para Web Crypto API)
- Proxy inverso recomendado (Nginx, Traefik, Caddy, etc.)
- Volumen persistente para almacenar datos (/data en el contenedor)
- Docker o Podman para ejecución en contenedor
- Dominio válido con certificado TLS para acceso externo
Instalación con Docker Compose
Docker Compose
Crea un archivo compose.yaml con la configuración del servicio. El ejemplo oficial monta un volumen local para persistencia, expone el puerto 8000 en localhost y define la variable DOMAIN con la URL pública HTTPS.
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vw.domain.tld"
volumes:
– ./vw-data/:/data/
ports:
– 127.0.0.1:8000:80
Acceder al proyecto
Interfaz web (Web Vault)
Accede a través del dominio configurado en la variable DOMAIN (ej. https://vw.domain.tld). El contenedor expone internamente el puerto 80; en el ejemplo Docker Compose se mapea al puerto 8000 en localhost. Para acceso externo seguro, configura un proxy inverso con terminación TLS.
Clientes oficiales Bitwarden
Configura la URL del servidor en los clientes oficiales (escritorio, móvil, extensión de navegador) apuntando a tu dominio HTTPS. Todos los clientes son compatibles al implementar la API de Bitwarden.
Casos de uso
- Autohospedaje de gestor de contraseñas para uso personal o familiar
- Pequeñas organizaciones que requieren compartición segura de credenciales
- Entornos con recursos limitados donde el servidor oficial de Bitwarden es demasiado pesado
- Despliegues en servidores propios, VPS, Raspberry Pi o NAS
- Alternativa privada y controlada a servicios en la nube de terceros
Configuración avanzada
Variables de entorno principales
La variable DOMAIN es obligatoria para generar enlaces correctos y habilitar funciones como WebAuthn. Otras variables permiten configurar base de datos (DATABASE_URL), correo (SMTP_*), registro (SIGNUPS_ALLOWED, INVITATIONS_ALLOWED), logs, iconos, entre otras. Consulta el archivo .env.template y la Wiki para la lista completa.
DOMAIN: "https://vw.domain.tld"
DATABASE_URL: "sqlite:///data/db.sqlite3"
SIGNUPS_ALLOWED: "true"
INVITATIONS_ALLOWED: "true"
SMTP_HOST: "smtp.example.com"
SMTP_FROM: "[email protected]"
SMTP_PORT: "587"
SMTP_SSL: "true"
SMTP_USERNAME: "user"
SMTP_PASSWORD: "pass"
Bases de datos soportadas
Vaultwarden soporta SQLite (por defecto), MySQL/MariaDB y PostgreSQL. Se selecciona mediante la variable DATABASE_URL o características de compilación. Para producción con alta concurrencia se recomienda PostgreSQL o MySQL.
DATABASE_URL: "sqlite:///data/db.sqlite3"
# PostgreSQL
DATABASE_URL: "postgresql://user:pass@host/dbname"
# MySQL/MariaDB
DATABASE_URL: "mysql://user:pass@host/dbname"
Panel de administración
El panel de administración se habilita mediante la variable ADMIN_TOKEN (hash Argon2 de una contraseña). Permite gestionar usuarios, organizaciones, ver logs y configurar ajustes globales. Genera el hash con `vaultwarden hash` y configúralo en el entorno.
ADMIN_TOKEN: "$argon2id$v=19$m=65536,t=3,p=4$…"
Gestión y mantenimiento
Actualización de versión
Actualiza la imagen y recrea el contenedor. Con Docker Compose: `docker compose pull && docker compose up -d`. Los datos persisten en el volumen montado. Revisa las notas de versión en GitHub Releases para cambios importantes o migraciones.
docker compose up -d
Copias de seguridad
Realiza copias periódicas del directorio de datos (/data en el contenedor, ./vw-data en el host). Incluye la base de datos (db.sqlite3 o dump SQL), adjuntos, iconos y configuración. La Wiki recomienda backups regulares y probar restauraciones.
cp -r ./vw-data ./vw-data-backup-$(date +%F)
Healthcheck integrado
El contenedor incluye un healthcheck que se ejecuta cada 60 segundos (script /healthcheck.sh). Verifica que el servicio responde correctamente. Docker reiniciará el contenedor si falla (política restart: unless-stopped).
docker inspect –format='{{.State.Health.Status}}' vaultwarden
Stack técnico
- Rust 1.99
- Rocket (framework web)
- Diesel (ORM)
- SQLite / MySQL / PostgreSQL
- Docker / Podman / OCI
- Web Vault (frontend TypeScript/React empaquetado)
- OpenSSL / Ring (criptografía)
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/dani-garcia/vaultwarden
- Wiki de Vaultwarden (documentación completa): https://github.com/dani-garcia/vaultwarden/wiki
- Imagen en Docker Hub: https://hub.docker.com/r/vaultwarden/server
- Imagen en GitHub Container Registry: https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden
- Comunidad en Matrix: https://matrix.to/#/#vaultwarden:matrix.org
- Foros en Discourse: https://vaultwarden.discourse.group/
- GitHub Discussions: https://github.com/dani-garcia/vaultwarden/discussions
- Licencia AGPL-3.0: https://github.com/dani-garcia/vaultwarden/blob/main/LICENSE.txt
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
