Alojar Vaultwarden en un VPS administrado significa guardar sus contraseñas y las de su equipo en una máquina propia, que nuestros equipos mantienen actualizada y supervisan día y noche. Vaultwarden es software libre con licencia AGPL-3.0. Esta guía sigue su documentación oficial: la instalación con Docker Compose, HTTPS, el cierre de los registros, el token de administración, lo que protege la caja fuerte, la base de datos, los correos electrónicos, las copias de seguridad y las actualizaciones.
Por Simon Vasconcelos Lee
Publicado el 8 de noviembre de 202615 minutos de lectura
DOMAIN.SIGNUPS_ALLOWED: por defecto, cualquier persona que llegue a la instancia puede registrarse. Una contraseña maestra sólida y la doble autenticación protegen después la caja fuerte.docker compose pull.Vaultwarden es un servidor de gestión de contraseñas escrito en Rust, pensado para el autoalojamiento. Su wiki lo destina a particulares, familias y organizaciones de tamaño humano. La caja fuerte web se entrega dentro de sus imágenes Docker.
Implementa una API compatible con los clientes oficiales de Bitwarden, en el navegador, el ordenador y el teléfono. El README precisa que el proyecto no está asociado a Bitwarden ni a Bitwarden, Inc., y pide comunicarle directamente cualquier problema, sea cual sea el cliente utilizado, en lugar de dirigirse a los canales de asistencia oficiales.
/admin para los ajustes, las cuentas y el diagnóstico.El wiki enumera también lo que falta respecto al servidor oficial, como el inicio de sesión con clave de acceso, los roles personalizados y algunas políticas de empresa. Precisa que las funciones útiles sobre todo para las grandes organizaciones no son una prioridad del proyecto: lea esa lista si las necesita.
Vaultwarden se publica bajo la GNU Affero General Public License, versión 3. El texto afirma un permiso ilimitado para ejecutar el programa sin modificar. Puede, por tanto, usar la imagen publicada por el proyecto para su empresa y su equipo, sin ninguna licencia que comprar.
El artículo 13 añade una condición propia de la AGPL: si modifica el programa, su versión debe ofrecer a todos los que la usan a distancia, por la red, el modo de obtener gratuitamente su código fuente.
El README recomienda las imágenes de contenedor. En un servidor con Docker instalado, cree una carpeta y coloque en ella este compose.yaml, tomado del README y del wiki:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.example.com"
SIGNUPS_ALLOWED: "true"
volumes:
- ./vw-data/:/data/
ports:
- 127.0.0.1:8000:80
docker compose up -d
127.0.0.1: como en el README, Vaultwarden solo es accesible a través del proxy inverso, colocado en el mismo servidor.DOMAIN: la dirección base de su instancia, en https. El wiki advierte de que sin ella se rompen funciones, entre ellas los archivos adjuntos y los enlaces de invitación.vw-data en un disco local: guarda todos los datos. El wiki señala los problemas de SQLite en un volumen CIFS o Samba, que no gestiona el bloqueo de archivos.latest sigue la última versión publicada, y el wiki la recomienda para la mayoría de los usos. Una etiqueta como 1.37.5 fija una versión, y latest-alpine ofrece lo mismo sobre una base Alpine.Su nombre de dominio apunta al servidor con registros A y AAAA, y los visitantes llegan por los puertos 80 y 443. Mientras el proxy inverso no esté en su sitio, la caja fuerte web sigue siendo inutilizable: pase directamente a la sección siguiente.
El proyecto no cifra ni la memoria ni el procesador; se presenta solo como una solución para los casos en que el servicio oficial, exigente en recursos, no conviene. El tamaño depende del número de cuentas y del volumen de los archivos adjuntos. En un VPS administrado, descríbanos su uso y le recomendamos el tamaño adecuado.
La caja fuerte web se apoya en la API Web Crypto, que los navegadores reservan a los contextos seguros: el README indica que solo funciona una vez activado HTTPS, y el wiki considera HTTPS «pretty much required», es decir, casi obligatorio. El proyecto recomienda un proxy inverso delante de Vaultwarden y desaconseja el TLS integrado en su framework Rocket.
Use un certificado reconocido, como los de Let’s Encrypt, que recomienda el wiki: con un certificado autofirmado, algunas plataformas rechazan la conexión. El certificado debe incluir su cadena completa, sin lo cual los dispositivos Android no se conectan.
Las notificaciones WebSocket, activas por defecto, avisan al navegador, a la aplicación de escritorio y a la extensión de que una entrada ha cambiado. Pasan por el puerto HTTP principal, y el proxy debe transmitir las cabeceras Upgrade y Connection. Las aplicaciones móviles usan las notificaciones nativas de su sistema, que se configuran aparte.
El wiki aconseja mirar primero Caddy si no tiene preferencia: activa HTTPS por sí mismo, obtiene el certificado de Let’s Encrypt y admite WebSocket. El ajuste del wiki transmite además a Vaultwarden la dirección real del visitante, para sus registros:
vault.example.com {
reverse_proxy 127.0.0.1:8000 {
header_up X-Real-IP {remote_host}
}
}
Este bloque recoge el ejemplo de Nginx del wiki, reducido al puerto 80 para dejar que Certbot instale HTTPS:
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 127.0.0.1:8000;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 80;
listen [::]:80;
server_name vault.example.com;
client_max_body_size 525M;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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;
location / {
proxy_pass http://vaultwarden-default;
}
}
Certbot instala después el certificado y se encarga de renovarlo:
sudo certbot --nginx
Abra las herramientas de desarrollo del navegador, pestaña de red, filtro WS, y vuelva a conectarse a la caja fuerte: una respuesta 101 en /notifications/hub confirma la conexión. Otra prueba del wiki: abra la caja fuerte en dos navegadores, cambie el nombre de una entrada en uno y el cambio aparece enseguida en el otro.
Por defecto, cualquier persona que llegue a su instancia puede crear en ella una cuenta. Es útil para su primera cuenta, y el wiki recomienda cerrar después los registros, para impedir que un atacante cree una.
SIGNUPS_ALLOWED a "false" en compose.yaml.docker compose up -d: una variable de entorno está ligada al contenedor, que debe recrearse para tenerla en cuenta.SIGNUPS_ALLOWED: "false"
INVITATIONS_ALLOWED en "false" retira esa posibilidad, y el wiki deja esa decisión según la confianza que tenga en sus usuarios.SIGNUPS_DOMAINS_WHITELIST limita el registro a ciertos dominios de correo, y SIGNUPS_VERIFY en true impone entonces verificar la dirección. Cuando se define esta lista, SIGNUPS_ALLOWED se ignora.En cuanto guarda la configuración desde la página de administración, nace un archivo config.json en la carpeta de datos y prevalece sobre las variables de entorno. Los ajustes afectados se cambian entonces desde esa página: modificar compose.yaml ya no basta.
La página /admin sirve para configurar Vaultwarden, ver y eliminar las cuentas y las organizaciones, retirar la doble autenticación de un usuario, invitar y leer el diagnóstico. Sin ADMIN_TOKEN, permanece desactivada: si no la necesita, déjela así.
El wiki recomienda encarecidamente activar HTTPS antes de usar esta página. El token hace de contraseña, y puede guardarse en forma de hash, en argon2id, en lugar de en claro en la configuración. Vaultwarden proporciona el comando: pide la contraseña dos veces y devuelve una cadena PHC.
docker run --rm -it vaultwarden/server /vaultwarden hash
Coloque esa cadena en un archivo .env, junto a compose.yaml, entre comillas simples, y llámela después desde el servicio:
VAULTWARDEN_ADMIN_TOKEN='$argon2id$...'
ADMIN_TOKEN: ${VAULTWARDEN_ADMIN_TOKEN}
Compruebe el resultado, reinicie y conéctese después a /admin con su contraseña, y no con la cadena PHC:
docker compose config
docker compose up -d
ADMIN_SESSION_LIFETIME. Una sesión abierta sigue siendo válida tras cambiar el token. Para cerrarlas todas, elimine rsa_key.pem de la carpeta de datos y reinicie, lo que desconecta también a los usuarios y anula las invitaciones pendientes./admin solo a ciertas direcciones, o añadirle una autenticación HTTP.DISABLE_ADMIN_TOKEN elimina todo control: está previsto para una capa de autenticación separada colocada delante, y el wiki lo reserva a quienes saben lo que hacen.La primera protección es la contraseña maestra. Los datos de la caja fuerte se cifran con claves personales o de organización: quien obtiene una copia de la base o fuerza una sesión debe aún descifrar esa contraseña para leerlos. Su solidez cuenta, por tanto, ante todo. Una sesión de administración permite por sí sola eliminar una cuenta o retirar una doble autenticación, sin dar acceso a los datos de la caja fuerte.
| Protección | Lo que aporta | Dónde se ajusta |
|---|---|---|
| Contraseña maestra | Mantiene los datos cifrados, aunque circule una copia de la base | Cada usuario la elige, larga y exclusiva de esta caja fuerte |
| Doble autenticación | Sin ella, el wiki recuerda que adivinar una contraseña por fuerza bruta sigue siendo posible en teoría | En cada cuenta; una política de organización puede exigirla |
| HTTPS | Cifra el trayecto entre el cliente y el servidor | El proxy inverso |
| Registros cerrados | Impide que un desconocido se cree una cuenta | SIGNUPS_ALLOWED |
| Pistas de contraseña | Mostradas en la página, ayudarían a adivinar una contraseña; la versión 1.37.5 las mantiene ocultas por defecto | Deje SHOW_PASSWORD_HINT en false; PASSWORD_HINTS_ALLOWED las elimina por completo |
| Límite de intentos | Frena los intentos desde una misma dirección, en el inicio de sesión y en /admin | LOGIN_RATELIMIT_SECONDS y ADMIN_RATELIMIT_SECONDS |
| Fail2ban | Bloquea las direcciones tras demasiados fallos, algo que el wiki considera especialmente importante para una instancia pública | En el servidor, a partir de un registro LOG_FILE |
Prepare el olvido de la contraseña maestra antes de que ocurra: active el acceso de emergencia de su cuenta y, en una organización, la recuperación de cuenta, que requiere el correo electrónico configurado.
root por defecto, y el wiki considera preferible darle los mínimos derechos. Añada user: 1000:1000 al servicio, con una carpeta vw-data que pertenezca a ese usuario.access_token. Si su proxy conserva sus registros o los envía a un servicio externo, el wiki recomienda ocultar ese valor./var/run/docker.sock.La misma imagen admite las tres bases de datos. El wiki describe SQLite como la más usada y la más probada, y la recomienda para la mayoría de los usos, salvo que necesite otra por una razón concreta.
| Base | Puesta en marcha | Copia de seguridad |
|---|---|---|
| SQLite | Ninguna: un archivo, vw-data/db.sqlite3 | El comando /vaultwarden backup, o la copia de la carpeta, con el servicio detenido |
| MariaDB o MySQL | Su servidor de base de datos, y DATABASE_URL en mysql:// | Una exportación de la base, además de la carpeta vw-data |
| PostgreSQL | Su servidor de base de datos, y DATABASE_URL en postgresql:// | Una exportación de la base, además de la carpeta vw-data |
DATABASE_URL: "postgresql://user_name:user_password@db_host:5432/vaultwarden"
Cree una base vacía y su usuario: al arrancar, Vaultwarden crea en ella su propio esquema. Una contraseña con caracteres especiales se escribe con codificación porcentual en esta dirección.
Tome esta decisión antes de llenar la caja fuerte. El wiki describe un paso de SQLite a PostgreSQL con pgloader, precisando que el proyecto no admite esa vía, que se hace bajo su responsabilidad y que empieza por una copia de seguridad.
Vaultwarden arranca sin correo electrónico, pero varias funciones dependen de él: las invitaciones, la verificación de las direcciones, el envío de las pistas de contraseña, la doble autenticación por correo y la recuperación de cuenta.
En un VPS de Simafri, el envío pasa por un relé SMTP autenticado, en el puerto 587: la dirección de una cuenta de correo que ya tenga, o Simafri Suite. La contraseña se coloca en el archivo .env, como el token de administración:
SMTP_HOST: "smtp.example.com"
SMTP_FROM: "vault@example.com"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "vault@example.com"
SMTP_PASSWORD: ${VAULTWARDEN_SMTP_PASSWORD}
DOMAIN y siguen siendo válidos 5 días.No compatible authentication mechanism was found.config.json.Si no sale nada, el wiki propone probar la conexión al relé desde el servidor. El comando devuelve 0 cuando el relé responde:
timeout 5 bash -c 'cat < /dev/null > /dev/tcp/smtp.example.com/587'; echo $?
El README recuerda que el proyecto no puede responsabilizarse de una pérdida de datos y recomienda encarecidamente copias de seguridad periódicas. El wiki las aconseja automáticas, con al menos una copia en otro lugar. Esto es lo que contiene la carpeta de datos con SQLite:
| Elemento | Lo que guarda | Qué copiar |
|---|---|---|
db.sqlite3 | Casi todos los datos: cuentas, organizaciones, cajas fuertes | Obligatorio |
attachments/ | Los archivos adjuntos, almacenados fuera de la base | Obligatorio |
config.json | La configuración de la página de administración, con datos sensibles en claro | Recomendado, cifrado |
rsa_key* | Las claves que firman las sesiones; perderlas desconecta a los usuarios | Recomendado, cifrado |
sends/ | Los archivos enviados con Send, efímeros por naturaleza | Opcional |
icon_cache/ | Los iconos de los sitios, que se descargan de nuevo cuando hace falta | Opcional |
Desde la versión 1.32.1, Vaultwarden sabe copiar él mismo su base SQLite, sin detener el servicio:
docker exec -it vaultwarden /vaultwarden backup
El comando escribe un archivo db_AAAAMMJJ_HHMMSS.sqlite3 junto a la base, en vw-data. La imagen no contiene ni sqlite3 ni cron: el wiki aconseja programar la tarea en el servidor, al menos una vez al día. Quite entonces -it, porque una tarea programada no tiene terminal, y haga limpieza entre esos archivos, que se acumulan.
Cuando la base no se está usando, basta una simple copia de todos sus archivos. Es el método con el servicio detenido que el wiki da como ejemplo para Docker, y se lleva también los archivos adjuntos:
docker compose down
tar -czf vaultwarden-$(date +%F).tar.gz vw-data
docker compose up -d
El wiki considera útil una capa de cifrado, sobre todo cuando la copia contiene el token de administración y los accesos SMTP, y cita rclone, restic y rustic para enviar las copias lejos. Con MariaDB o PostgreSQL, añada una exportación de la base a la carpeta vw-data.
El wiki pide no confiar únicamente en las instantáneas de disco, más delicadas de restaurar. Conserve, por tanto, estas copias propias de la aplicación: colocadas en el disco del servidor, entran también en sus copias de seguridad nocturnas.
vw-data por su versión guardada./vaultwarden backup, llámela db.sqlite3 y elimine antes cualquier archivo db.sqlite3-wal existente: un registro que no corresponda puede corromper la base. Si procede de una copia directa, restaure juntos db.sqlite3 y su db.sqlite3-wal.El wiki aconseja repetir este ejercicio de vez en cuando, conservando una copia de los datos en su sitio: así comprueba que una copia de seguridad funciona.
El wiki da dos comandos, desde la carpeta del compose.yaml. La carpeta de datos se queda en su sitio:
docker compose pull
docker compose up -d
Estas actualizaciones cuentan más que en otros casos. Las aplicaciones móviles y las extensiones del navegador se actualizan por sí solas, y el wiki advierte de que una diferencia de versión con el servidor puede provocar fallos repentinos. La caja fuerte web, entregada en la imagen, siempre queda acorde con su servidor.
El proyecto no tiene calendario de versiones: siga sus notas de versión y haga una copia de seguridad justo antes de cada actualización. Algunas incluyen correcciones de seguridad, como la 1.37.5 del 1 de noviembre de 2026, cuyas notas recomiendan actualizar cuanto antes. Esas notas advierten además de que, desde la 1.37.5, un valor de configuración no válido impide que Vaultwarden se inicie: revise su archivo de entorno antes de actualizar. La página de diagnóstico de /admin indica si existe una versión más reciente.
El autoalojamiento exige mantener el servidor además de la aplicación. En un VPS administrado, nuestros equipos se encargan del servidor y siguen su instancia de forma proactiva; Vaultwarden sigue siendo su software, con sus ajustes y sus datos.
| Tema | Nuestros equipos | Usted |
|---|---|---|
| El servidor | Actualizaciones del sistema y de seguridad, con intervenciones en el servidor incluidas | El momento que mejor convenga a su actividad |
| La supervisión | Servidor vigilado las 24 horas del día, los 7 días de la semana, con intervención sin esperar su llamada | La lectura de los registros de su instancia |
| Vaultwarden | Seguimiento proactivo: errores, lentitud y espacio en disco detectados, corrección recomendada | Su instalación, sus actualizaciones y sus ajustes, que aplica usted o su asistente de IA |
| Las cuentas y la caja fuerte | El servidor que las soporta, vigilado y con copias de seguridad | Los usuarios, las invitaciones, las contraseñas maestras y la doble autenticación |
| Las copias de seguridad | Cada noche, cifradas y guardadas fuera de la máquina; restauración incluida | Las copias propias de Vaultwarden, y la petición de restauración, cuando la necesite |
| La migración | Su servidor actual migrado, gratis | El momento del cambio |
Si prefiere que nuestros equipos intervengan en la propia aplicación, ese servicio se factura por horas o a precio cerrado, con un presupuesto comunicado antes de la intervención.
Con un VPS administrado de Simafri, nuestros equipos mantienen actualizado el servidor de su instancia de Vaultwarden, lo vigilan día y noche e intervienen sin esperar su llamada; también siguen su instancia de forma proactiva y le recomiendan las correcciones útiles, que aplica usted o su asistente de IA. Las copias de seguridad se cifran cada noche y se guardan fuera de la máquina, su restauración está incluida, y la migración de su servidor actual es gratuita.
Sí. Vaultwarden tiene licencia AGPL-3.0: puede ejecutarlo en su empresa sin ninguna licencia que comprar. Si lo modifica, su versión debe ofrecer su código fuente a quienes la usan por la red. Queda el coste del servidor que lo ejecuta.
Sí. El README presenta Vaultwarden como compatible con los clientes oficiales de Bitwarden, precisando a la vez que el proyecto no está asociado a Bitwarden ni a Bitwarden, Inc. Un problema se comunica, por tanto, al proyecto Vaultwarden, sea cual sea el cliente utilizado.
Cree un compose.yaml con la imagen vaultwarden/server, una carpeta de datos y el puerto publicado en 127.0.0.1, y ejecute docker compose up -d. Coloque después delante un proxy inverso en HTTPS: sin HTTPS, la caja fuerte web no funciona. Indique también su dirección en DOMAIN.
Una vez creada su cuenta, cambie SIGNUPS_ALLOWED a false en compose.yaml y reinicie con docker compose up -d. Las organizaciones aún pueden invitar: INVITATIONS_ALLOWED en false retira esa posibilidad. Si la página de administración ya ha guardado su configuración, haga este ajuste desde ella.
Ejecute el comando vaultwarden hash, que devuelve una cadena argon2id, y colóquela en ADMIN_TOKEN, desde un archivo .env con Docker Compose. Después se conecta a /admin con su contraseña. Sin ADMIN_TOKEN, la página permanece desactivada.
Primero, la contraseña maestra: los datos están cifrados, y una copia de la base solo se lee si se descifra esa contraseña. A ella se suman la doble autenticación, HTTPS, los registros cerrados, un token de administración con hash y copias de seguridad cifradas.
Con SQLite, ejecute cada día el comando /vaultwarden backup en el contenedor, y copie también la carpeta attachments, config.json y los archivos rsa_key. Con MariaDB o PostgreSQL, añada una exportación de la base. Pruebe la restauración con regularidad.
Un VPS administrado cubre el servidor: sistema, seguridad, supervisión y copias de seguridad. Nuestros equipos siguen también su instancia de forma proactiva y le recomiendan las correcciones útiles, que aplica usted. Una intervención en la aplicación se factura por horas o a precio cerrado.
Simafri
Hablemos de su proyecto
Díganos en pocas palabras lo que necesita: le respondemos rápidamente.
¡Gracias! Su solicitud ha sido enviada. Le responderemos en breve.
¿Prefiere el correo? Escríbanos a support@simafri.com.