Logo Bit y Vault warden

En este apunte describo el proceso de instalacion de un servidor “Bitwarden”. Llevo ya varios años usándolo con su servicio Cloud, pero he decidido optar por hacer una instalación “on-premise” casera.

Al investigar descubro con sorpresa que tengo dos opciones, la primera es usar el Bitwarden self-hosted oficial (que consume bastantes recursos y parece complejo) o bien optar por un ligero Vaultwarden, un clone del primero, que por lo visto se instala rápido y es sencillo.


Introducción

Bitwarden es un gestor de contraseñas libre y de código abierto que almacena información sensible —como credenciales de sitios web— en una caja fuerte encriptada. El servicio está disponible en interfaz web, aplicaciones de escritorio, complementos para navegador, aplicaciones móviles e interfaz de línea de comandos. Bitwarden ofrece un servicio alojado en la nube (el que yo uso) y también puedes instalártelo “en casa”:

Por no complicarme mucho la vida, voy a ir por la segunda opción y si cubre lo que necesito probablemente me quede con ella.

Instalación

Estas son las dos opciones que tengo.

  • En contenedor LXC en Proxmox con el script Authentication & Security > Vaultwarden.
  • En Raspberry Pi 5 que tengo dedicada a NextCloud, siempre está encendida.

En ambos casos es obligatorio tener en tu casa un Nginx Proxy Manager. Yo ya lo tenía, y lo documenté en mi apunte sobre Domótica y Networking, busca la sección Proxy Inverso.

Vaultwarden en Pi5

Decido ir por la Pi5, donde lo primero es instalar Docker. Primero como root actualizo a la última:

apt update && apt upgrade -y && apt full-upgrade -y
apt full-upgrade -y && apt autoremove -y --purge

Desde mi usuario instalo docker:

curl -fsSL https://get.docker.com -o install-docker.sh
cat install-docker.sh                                    # (verifico el script)
sh install-docker.sh --dry-run                           # un dry-run no viene mal
sudo sh install-docker.sh

Le doy permisos a mi usuario

sudo usermod -aG docker $USER

Rearranco el equipo y compruebo

reboot
:
docker ps -a

luis@cloud:~ $ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

luis@cloud:~ $ docker info
Client: Docker Engine - Community
 Version:    28.0.1
:

Creo un directorio, preparo el compose.yaml para que (descarge y) arranque Vaultwarden

luis@cloud:~ $ mkdir vaultwarden
luis@cloud:~ $ cd vaultwarden/
luis@cloud:~/vaultwarden $ mkdir vw-data
luis@cloud:~/vaultwarden $ nano compose.yaml
luis@cloud:~/vaultwarden $ tree .
.
├── compose.yaml
└── vw-data

Contenido de compose.yaml:

#
# Compose para el servicio vaultwarden on premise
#
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://bitwarden.tld.com"
    volumes:
      - ./vw-data/:/data/
    ports:
      - 8080:80

Más o menos queda asi, tendrás tu NGINX en medio, con tu dominio, todas las peticiones que le llegan por el puerto https las redirige al servidor interno X.Y en el puerto 8080.

Configuración final

Arranco el contenedor y me quedo viendo su log

luis@cloud:~/vaultwarden $ docker compose up -d
luis@cloud:~/vaultwarden $ docker compose logs

Configuro mi DNS, doy de alta una nueva entrada en el NGNIX y conecto con mi nuevo servidor en https://bitwarden.tld.com (usa tu dominio)

Conexión inicial con el servidor

A partir de aquí a configurar Vaultwarden…

Configuración

Pulso en Create Account, introduzco mi correo personal y los datos que pide

Creación de mi usuario

Vuelvo a hacer login y ya tengo acceso a mi servidor Vaultwarden (Bitwarden).

Acceso al servidor local

Una vez que termina la instalación ya puedo ver los datos y reconfigurar los clientes con la dirección local del servidor.

Exportar

Lo siguiente que hice fue irme a mi cuenta de Bitwarden, en la nube, login con mi usuario de siempre y entré en Vault > export. Exporté en formato JSON encriptado con una contraseña. Creó un fichero del tipo bitwarden_encrypted_export_20250302162516.json y lo descargo en mi ordenador.

Exportación

Importar

A continuación conecto desde el navegador con mi servidor local, hago login y click en Import Data.

Importación

Una vez importados los datos he cambiado todos los clientes para que apunten al servidor local y me fui a mi cuenta en la nube de Bitwarden para borrarla. De momento tiene muy buena pinta, como se puede observar, de recursos la Raspberry Pi5 (8GB) va sobradísima, ejecutando NextCloud y Vaultwarden simultáneamente.

Pi5 ejecutando NextCloud y Vaultwarden