¿Cómo instalar el servidor de Bitwarden en la Raspberry PI y Orange PI?

Bitwarden es un gestor de contraseñas y de información confidencial de código abierto. Este gestor dispone de una interfaz web, aplicaciones de escritorio, extensiones de navegador, aplicaciones móviles y un cliente CLI.

La ventaja de ser de código abierto la parte del servidor de este gestor es que nos permite montarnos nuestro propio servidor para tener todos nuestros datos en nuestra propia casa sin que ningún dato de los que guardemos dentro de nuestro servidor termine en los servidores de Bitwarden.

En este tutorial os enseñaremos a instalar el servidor de Bitwarden en nuestra Rapsberry Pi o Orange Pi de una forma sencilla. Para hacer las pruebas para este tutorial use la Orange Pi Zero que solo tiene 512MB de Ram y el servidor de Bitwarden funciona sin problema, el consumo con todo instalado (incluyendo Docker, servidor web, ...) fue de unos 250 a 300MB de ram de media.

Requisitos previos

📝 Nota: No es necesario tener un DDNS en el caso de que vuestro proveedor de internet os asigne una IP fija o pagáis por ese servicio, generalmente todos tenemos una IP dinámica (cambia cada X tiempo) por eso es necesario el DDNS.

Instalación de Docker

Para quienes no conozcáis Docker solo deciros que es una plataforma open source que nos permite crear, probar y implementar aplicaciones rápidamente ya que estas se empaquetan en "contendores". En los contenedores se incluye todo lo necesario para que la aplicación funcione como las bibliotecas, herramientas de sistema, código, ...

Para proceder a realizar la instalación de Docker solo tenemos que poner el siguiente comando en nuestra terminal:

curl -sSL https://get.docker.com | sh

Una vez tenemos instalado Docker en nuestro equipo solo podemos manejarlo usando la cuenta "root", pero esto tiene una fácil solución para poder usar usar Docker sin privilegios de root debes ejecutar el siguiente comando:

sudo usermod -aG docker $(whoami)

Este comando añade el usuario actual en el que estemos dentro del grupo de usuarios autorizados del grupo docker, esto nos permitirá gestionarlo sin tener que usar sudo.

Instalando Bitwarden Server

Lo primero de todo que tenemos que hacer es crear una carpeta de persistencia, esta carpeta gurdará todo la información sobre nuestra instanlación del servidor de Bitwarden una vez arranquemos la imagen de docker del mismo. Para ello creamos la siguiente carpeta:

mkdir /var/bw-data

Una vez tenemos la carpeta bw-data creda procedemos a bajar la imagen de docker del servidor de Bitwarden usando el siguiente comando:

docker pull vaultwarden/server:latest

El resultado tendría que ser similar a este:

Una vez tenemos el paso anterior completo solo nos queda arrancar la imagen de docker Bitwarden pasándole los parámetros de configuración con el siguiente comando:

docker run -d --name bitwarden -v /var/bw-data/:/data/ -p 8080:80 --restart always vaultwarden/server

Explicación de los parámetros:

-d: Sirve para indicar que queremos que el contenedor se ejecute en segundo plano.
--name bitwarden: Sirve para especificar el nombre del contenedor, en este caso "bitwarden".
-v /var/bw-data/:/data/: le indicamos a docker la ruta del volumen (asi se llaman las carpetas de persistencia en docker) donde guardamos la configuración y archivos que necesite Bitwarden.
-p 8080:80: sirve para especificar el puerto externo/interno de nuestro contenedor, en el caso de tener el puerto 8080 ocupado por otra aplicación poner otro distinto.
--restart always: este comando nos permite que si apagamos o reiniciamos la Pi el contenedor se levantará de nuevo automáticamente
vaultwarden/server: es el nombre de la imagen de docker que queremos usar.

Una vez realizado todo este proceso tenemos ya ejecutando el contenedor de Bitwarden en nuestro dispositivo, si queréis comprobarlo usar el comando docker ps, este comando muestra los contenedores que se están ejecutando.

Abriendo puertos en el router

Es importante que le asignéis una IP estática a vuestra Rapsberry/Orange Pi, esto lo podéis hacer desde la configuración del propio dispositivo o desde vuestro router, como esta parte varia mucho dependiendo del router que tengáis y demás tendréis que buscar la mejor forma de poneros la IP estática en vuestro dispositivo.

Una vez tenemos una IP estática puesta en nuestro dispositivo tendremos que ir al panel de configuración de vuestro router, en mi caso el de movistar que generalmente se accede poniendo en el navegador la IP 192.168.1.1 (en caso de ser diferente leer el manual de vuestro router). Una vez en esa interfaz (en el caso del router de movistar) vamos a la sección Configuración Básica > Puertos > Puertos IPv4 como podéis ver en la siguiente imagen:

Una vez estamos en esa sección pulsamos en el bóton añadir regla, añadiendo tantas reglas como necesitemos. En nuestro caso solo necesitamos el puerto 443 el del HTTPS y el de 80 que corresponde al HTTP.

Donde pone IP del disipositivo ponemos la IP estática que le tenemos puesta a nuestra Rapsberry/Orange Pi y en los dos casos ponemos usaremos el protocolo TCP.

⚠️ Importante: Aseguraros que ponga ABRIR EL PUERTO, porque si pulsas en ese botón puedes terminar abriendo un rango de puertos a internet y realmente no os lo que buscamos hacer.

Configurando Caddy para Bitwarden

Lo último que nos queda por hacer es configurar Caddy, para ello debemos modificar el archivo "Caddyfile" usando el comando sudo nano /etc/caddy/Caddyfile. Una vez abierto el archivo borramos todo su contenido, en el caso de que tengamos la configuración por defecto y añadimos el siguiente código:

tecnonucleous.com {
  reverse_proxy 127.0.0.1:8080 {
                header_up X-Forwarded-Proto {http.request.scheme}
  }
  encode gzip
}

📝 Nota: Recordar cambiar tecnonucleous.com por vuestro dominio web

El resultado del Caddyfile modificado tendría que ser similar al de la siguiente imagen:

Una vez guardados los cambios en el archivo nos situamos la carpeta donde tenemos el Caddyfile con el siguiente comando cd /etc/caddy, ponemos en la terminar caddy validate para ver si tenemos todo escrito correctamente y por último ponemos caddy reload para aplicar la configuración.

Pues esto es todo, ya tendríais vuestro servidor Bitwarden funcionando y lo podéis usar desde el navegador con vuestro dominio web o desde las aplicaciones del mismo para los distintos dispositivos.