Bitwarden es un gestor de contraseñas de código abierto con clientes para navegador, escritorio y móvil. Su versión autoalojada te permite guardar las bóvedas cifradas de tu equipo en tu propio servidor. En este tutorial instalarás Bitwarden en Ubuntu 24.04 con el instalador oficial bitwarden.sh, que despliega todos los servicios en contenedores Docker con un certificado de Let's Encrypt, y después configurarás el correo, cerrarás el registro público y programarás copias de seguridad.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 2 GB de RAM (4 GB recomendados) y 25 GB libres en disco. Bitwarden ejecuta una decena de contenedores, entre ellos Microsoft SQL Server.
  • Un usuario no root con privilegios sudo.
  • Docker Engine y el plugin Docker Compose instalados desde el repositorio oficial de Docker.
  • Un subdominio para la bóveda, por ejemplo vault.example.com, con un registro DNS A apuntando a la IP del servidor. En esta guía se usa your_domain.
  • Los puertos 80 y 443 libres: el Nginx de Bitwarden los usa directamente.
  • Un servidor SMTP para enviar correos de verificación e invitaciones. Sin correo no podrás acceder al panel de administración.

Paso 1: Obtener el ID y la clave de instalación

Cada instalación autoalojada necesita un identificador y una clave que se generan gratis en https://bitwarden.com/host. Introduce un correo de contacto, elige la región de datos (US o EU) y anota los dos valores:

  • Installation Id, un UUID.
  • Installation Key, una cadena aleatoria.

Guárdalos en un lugar seguro; los pedirá el instalador en el paso 3.

Paso 2: Crear el usuario y el directorio de Bitwarden

Bitwarden recomienda ejecutarlo con un usuario dedicado sin privilegios de administrador, miembro del grupo docker. Créalo y asígnale una contraseña:

sudo adduser bitwarden
sudo usermod -aG docker bitwarden

Crea el directorio de instalación, accesible solo para ese usuario:

sudo mkdir /opt/bitwarden
sudo chmod 700 /opt/bitwarden
sudo chown bitwarden:bitwarden /opt/bitwarden

Si usas UFW, abre SSH, HTTP y HTTPS. El puerto 80 es necesario para validar y renovar el certificado de Let's Encrypt:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Paso 3: Ejecutar el instalador oficial

Cambia al usuario bitwarden y entra en el directorio de instalación:

sudo -iu bitwarden
cd /opt/bitwarden

Descarga el script de instalación. Antes de ejecutarlo, puedes revisar su contenido con less bitwarden.sh:

curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux"
chmod 700 bitwarden.sh

Lanza la instalación:

./bitwarden.sh install

El instalador descarga las imágenes y te hace varias preguntas. Responde así:

  • Dominio: your_domain, sin https://.
  • Usar Let's Encrypt: y, e indica un correo para los avisos de caducidad del certificado.
  • Nombre de la base de datos: puedes dejar vault.
  • Installation Id e Installation Key: los valores del paso 1.
  • Región: la misma que elegiste en el paso 1 (US o EU).

Al terminar, toda la configuración y los datos quedan en /opt/bitwarden/bwdata. Arranca los servicios:

./bitwarden.sh start

Comprueba que los contenedores están en marcha:

docker ps --format '{{.Names}}\t{{.Status}}'
bitwarden-nginx         Up 2 minutes (healthy)
bitwarden-admin         Up 2 minutes (healthy)
bitwarden-api           Up 2 minutes (healthy)
bitwarden-identity      Up 2 minutes (healthy)
bitwarden-mssql         Up 2 minutes (healthy)
bitwarden-web           Up 2 minutes (healthy)
...

Los contenedores tardan uno o dos minutos en pasar a healthy. Después verifica que la bóveda responde por HTTPS:

curl -sI https://your_domain | head -1
HTTP/2 200

Paso 4: Configurar el correo y los administradores

Los ajustes del servidor se sobrescriben en el archivo bwdata/env/global.override.env. Ábrelo, todavía como usuario bitwarden:

nano /opt/bitwarden/bwdata/env/global.override.env

Busca las variables de correo y de administración, y rellénalas con tus datos. adminSettings__admins es la lista de correos, separados por comas, que pueden entrar en el panel de administración:

[email protected]
globalSettings__mail__smtp__host=smtp.your_mail_provider.com
globalSettings__mail__smtp__port=587
globalSettings__mail__smtp__ssl=false
globalSettings__mail__smtp__username=your_smtp_user
globalSettings__mail__smtp__password=your_smtp_password
[email protected]

Con el puerto 587 y STARTTLS, deja ssl=false; usa true solo si tu proveedor exige TLS implícito en el puerto 465. Reinicia para aplicar los cambios:

./bitwarden.sh restart

Paso 5: Crear tu cuenta y cerrar el registro

Abre https://your_domain en el navegador, pulsa Crear cuenta y regístrate con tu correo. La contraseña maestra cifra tu bóveda en el propio dispositivo: el servidor no la conoce y no se puede recuperar si la olvidas, así que elige una frase larga y guárdala en lugar seguro. Después verifica tu correo desde el enlace que recibirás; si llega, el SMTP está bien configurado.

Cuando se hayan registrado todas las personas que necesitas, o si prefieres añadir usuarios solo mediante invitaciones de organización, desactiva el registro público. Vuelve a editar global.override.env:

nano /opt/bitwarden/bwdata/env/global.override.env
globalSettings__disableUserRegistration=true

Aplica el cambio:

./bitwarden.sh restart

Comprueba en una ventana privada que la opción Crear cuenta ya no permite registrarse.

Paso 6: Acceder al panel de administración

El panel del sistema está en https://your_domain/admin. No usa contraseña: introduce uno de los correos de adminSettings__admins y recibirás un enlace de acceso de un solo uso.

Desde el panel puedes ver y desactivar usuarios, forzar la eliminación de cuentas y consultar las organizaciones creadas. Las organizaciones, colecciones y permisos de cada miembro se gestionan desde la bóveda web, en Nueva organización.

Instala después los clientes (extensión de navegador, escritorio o móvil) y, antes de iniciar sesión, cambia en su pantalla de acceso la región o servidor a Autoalojado, con la URL https://your_domain.

Paso 7: Programar copias de seguridad

Bitwarden hace una copia nocturna automática de la base de datos en bwdata/mssql/backups. Esas copias, junto con los archivos adjuntos (bwdata/core/attachments), la configuración (bwdata/env, bwdata/config.yml) y los certificados, son lo que debes guardar fuera del servidor. Los archivos en vivo de SQL Server (bwdata/mssql/data) no se deben copiar con el servicio en marcha, así que se excluyen.

Sal del usuario bitwarden con exit y crea el script como tu usuario sudo:

sudo nano /usr/local/bin/bitwarden-backup
#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/bitwarden"
STAMP="$(date +%F_%H%M)"

mkdir -p "$BACKUP_DIR"
chmod 700 "$BACKUP_DIR"

tar -czf "$BACKUP_DIR/bwdata-$STAMP.tar.gz" \
  --exclude='bwdata/mssql/data' \
  --exclude='bwdata/logs' \
  -C /opt/bitwarden bwdata

find "$BACKUP_DIR" -type f -mtime +14 -delete

Hazlo ejecutable, pruébalo y prográmalo para después de la copia nocturna de la base de datos:

sudo chmod 750 /usr/local/bin/bitwarden-backup
sudo /usr/local/bin/bitwarden-backup
sudo ls -lh /var/backups/bitwarden
echo '0 4 * * * root /usr/local/bin/bitwarden-backup' | sudo tee /etc/cron.d/bitwarden-backup

Copia estos archivos a otro servidor o almacenamiento externo. Contienen la base de datos y las claves de la instalación: protégelos igual que el propio servidor.

Actualizar Bitwarden

Las actualizaciones se hacen con el mismo script, como usuario bitwarden. Primero se actualiza el propio script y después los contenedores:

sudo -iu bitwarden
cd /opt/bitwarden
./bitwarden.sh updateself
./bitwarden.sh update

Estos son los comandos de bitwarden.sh que usarás con más frecuencia:

ComandoQué hace
./bitwarden.sh startArranca todos los contenedores
./bitwarden.sh stopDetiene todos los contenedores
./bitwarden.sh restartReinicia y aplica los cambios de global.override.env
./bitwarden.sh updateselfActualiza el script bitwarden.sh
./bitwarden.sh updateDescarga las imágenes nuevas y actualiza la base de datos
./bitwarden.sh renewcertRenueva el certificado de Let's Encrypt

Puedes comprobar la fecha de caducidad del certificado con:

echo | openssl s_client -connect your_domain:443 -servername your_domain 2>/dev/null | openssl x509 -noout -enddate

Solución de problemas

  • El instalador no obtiene el certificado: el DNS aún no apunta al servidor, o el puerto 80 está bloqueado u ocupado por otro servicio. Comprueba con sudo ss -tlnp | grep ':80 '.
  • permission denied al ejecutar docker: el usuario bitwarden no está en el grupo docker o no ha vuelto a iniciar sesión. Sal y entra de nuevo con sudo -iu bitwarden.
  • No llegan los correos: revisa las variables SMTP y los logs con docker logs bitwarden-api.
  • Los clientes no se conectan: verifica que en la app has elegido servidor autoalojado con la URL https://your_domain exacta.

Conclusión

Bitwarden está funcionando en tu servidor Ubuntu 24.04 con HTTPS, correo configurado, registro público cerrado y copias de seguridad diarias fuera de los datos en vivo. Como siguientes pasos, crea una organización para compartir credenciales por colecciones, activa el inicio de sesión en dos pasos en todas las cuentas y ensaya una restauración de la copia de seguridad en un servidor de pruebas.