Bitwarden Proxmox

Posted on  by admin

Howto install Bitwarden in a LXC container (e.g. Proxmox)

January 13, 2019

Bitwarden; PiHole; OnlyOffice; folgen. Falls alles bis hierhin funktionieren sollte, soll ein Proxmox-Backupserver gebaut und aufgesetzt werden. Mir stellt sich jetzt die Frage, ob die vorhandene Hardware, insbesondere Prozessor und RAM ausreichend sind. I run a proxmox server, but then also installed Docker. You could run Bitwarden as a Docker container easy enough. If you wanted to run a reverse proxy, something like Traefik could be used to front Bitwarden. I have set up bitwarden on my proxmox server within a Virtual Machine (ubuntu 18.04 LTS) using the install script ( and docker. As a reverse proxy i’m using Apache, which also maintains certificates from let’s encrypt. I setup bitwarden to use self-signed certificates, therefore i need to use the SSLProxyCheck. directives. Make Bitwarden run behind proxy to be able to use the same ports as Nextcloud (80 + 443) Make Bitwarden run as a non-privileged user Add Bitwarden RS (an Unofficial implementation of Bitwarden) Not recommended, but an option at least. Further improvements to SMB-mount script.

As many of you know me, I’m quite serious about security and therefore a believer in the theory that a service which is not reachable (e.g. from the Internet) cannot be attacked as easily as one that it. Looking at password managers this makes choosing not that easy. Sure there is Keepass and the descendants, but they have the problem that the security is based solely on the master password and the end device security. Knowing friends that use Google Drive for syncing the password file between their devices, I looked at that option, but it was not right for me (e.g. Browser integration, 2FA, …).

Password managers like Lastpass or 1Password are also not the right solution for me. Yes, I believe that their crypto is good, and they never see the passwords of their users, but the 2FA is only as good as the lost password/2FA reset feature is. I’ve read and seen to many attacks on that to rely on it.

All of this leads to Bitwarden, it provides the same level of functionality as Lastpass or 1Password but is OpenSource and can be hosted on my own server. Not opening it up to Internet and using it from remote only via VPN (which I have anyway) make for a real small attack surface. This blog post shows how I installed it within a Proxmox LXC container, which I did to isolated it from other stuff and therefore there are no dependencies, if I need to upgrade something. I don’t like to install anything on the Proxmox host itself. As this is my first try, and I run into a problem with an unprivileged container and docker within it, this setup works currently only with a privileged container. I know this is not that good, but in this case it is a risk I can accept. If you find a solution to get it running in an unprivileged container please send me an email or write a comment.

LXC container

After creating the LXC container (2Gb RAM, >5GB HD) with Debian 9, don’t start the container at once. You need to add following to /etc/modules-load.d/modules.conf


And if you don’t want to boot load the modules with

modprobe aufs
modprobe overlay

Bitwarden proxmox vmBitwarden Proxmox

If you don’t do this your installation will get gigantic (over 30gb). Now we just need to add following to /etc/pve/lxc/<vid>.conf

#insert docker part below
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a

Now you can start the container and enter it, we’ll check later if all was correct, but we need docker for this.

Docker and Docker Composer

Bitwarden_rs proxmox

Some requirements for docker

apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

and now we can add the repository for docker

curl -fsSL apt-key add -
add-apt-repository 'deb [arch=amd64] $(lsb_release -cs) stable'

and now we can install it with

apt-get update apt-get install docker-ce

The Docker Composer which is shipped with Debian is too old to work with this docker, so we need following:

curl -L '$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

and add /usr/local/bin/ to the path variable by adding


to .bashrc and calling it directly in the bash to get it set without starting a new bash instance. I know that a package would be better, couldn’t find one, so this is a temporary solution. If someone finds a better one, leave it in the comments below.

Now we need to check if the overlay stuff is working by calling docker info and hopefully you get also overlay2 as storage driver:

Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file


Now we just need following:

curl -s -o
chmod +x
./ install
./ start
./ updatedb

And now you’re done, you’ve your own password manager server which also supports Google Authenticator (Time-based One-time Password Algorithm (TOTP) as second factor. Maybe I’ll write a blogpost how to setup a Yubikey as 2FA (desktop and mobile) later.

  1. Hi,

    thank you for this tutorial. Unfortunately I always receive SQL error messages after database migration.


    Comment by MZ — July 6, 2019 #

  2. Thank you for the tutorial. I am extremely new to this and I am not sure how to complete the first step:
    “After creating the LXC container (2Gb RAM, >5GB HD) with Debian 9, don’t start the container at once. You need to add following to /etc/modules-load.d/modules.conf


    Ive created the LXC container in my proxmox server but I dont know how to access the /etc/modules-load.d/modules.conf w/o starting the container. Im assuming i would have to do it within my proxmox shell but a bunch of esearches have turned up little insight for how to modify LXC files w/o starting the container. Any advice is appreciated, thank you!

    Comment by Drew — September 26, 2020 #

  3. sorry that my text is misleading, you just need to add this to the modules.conf of the proxmox system, not the container.

    Comment by robert — September 27, 2020 #

Leave a comment


Heute schauen wir uns das Thema Bitwarden-rs an. Da Bitwarden in seiner Grundinstallation von 8bit Solutions verhältnismäßig viele Resourcen benötigt, gibt es eine Alternative die auf der API von Bitwarden basiert. Sie ist in Rust programmiert und verwendet keine WinSQL Datenbank. Ein weiterer Punkt ist, dass die Premium Features die bei Bitwarden erworben werden müssen hier schon kostenfrei integriert sind.

Ihr benötigt dazu:

Bitwarden proxmox create
  • Eine Subdomain
  • optinal: MariaDB Datenbank

Ich starte persönlich immer gerne mit einem neuen LXC Container auf Basis von Debian 10 mit installierten sudo, Docker und Portainer. Für solche Fälle clone ich ein vorbereitetes Template innerhalb von Proxmox. Bei Bedarf kann ich dazu auch mal ein Tutorial machen.

Bitwarden Proxmox

Wir starten und laden das Docker Image runter.

Anschließend erstellen wir den Container innerhalb Dockers. Wer mit MariaDB arbeiten und auf die interne Datenbank verzichten möchte fügt die Zeile mit -e DATABASE_URL hinzu.

Und schon können wir Bitwarden über die interne IP aufrufen.
Nun erstellen wir bei unserem Domainprovider eine Subdomain und hinterlegen dort unsere öffentliche IP. Anschließend hinterlegt ihr bei eurem Reverse Proxy Server die Weiterleitung auf die gewünschte interne IP und generiert ein SSL Zertifikat mit Let’s Encrypt.

Bitwarden Proxmox

Schon könnt ihr Bitwarden über https://subdomain.euredomain.tld/ erreichen.

Nun kann jeder der eure Domain kennt, sich einen Account dort erstellen und euren Dienst nutzen. Damit das nicht länger der Fall ist und nur ihr euren Dienst nutzen könnt, deaktivieren wir die Registrierungsfunktion.

Dazu müssen wir den Container zerstören und mit veränderten ENV Variabeln neu erstellen.

Bitwarden_rs Proxmox

Solltet ihr doch eine andere Person zur Nutzung eures Dienstes einladen wollen, funktioniert dies nur über die Adminseite. Ihr könnt diese aktivieren, indem ihr als Variabel einen Token hinterlegt. Außerdem müssen wir einen SMTP Server konfigurieren, da die Einladung per Email versendet wird. Zusätzlich aktivieren wir das der eingeladene User seine Email erst bestätigen muss bevor er unseren Dienst nutzen kann. Wir generien im nächsten Schritt den besagten Token, zerstören den Container erneut und bauen uns einen neuen. Yeahh!!!

Die Adminseite könnt ihr ganz einfach mit https://subdomain.euredomain.tld/admin aufrufen. Unter Users im oberen Menü könnt ihr, die von euch gewünschten User dazu einladen euren Dienst zu nutzen.

Nun ladet ihr euch selber über das Admin WebUI ein und erstellt euch einen Account. Tada ihr seit fertig mit der Grundkonfiguration.

Bitwarden Proxmox Ve

Grüße gehen aus dem Archiv!