Skip to main content
To install Vaultwarden with Docker, run the vaultwarden/server:latest image with DOMAIN="https://vault.example.com", a ./vw-data volume and the port published on 127.0.0.1:8000. Put Nginx with a Let’s Encrypt certificate in front, because the web vault only works over HTTPS. Create your account, then set SIGNUPS_ALLOWED=false.

What is Vaultwarden?

Vaultwarden is an unofficial, lightweight server that implements the Bitwarden client API. The official Bitwarden apps, browser extensions and the bundled web vault work with it. It is not made or supported by Bitwarden, Inc.: the Vaultwarden project asks you to report problems to them, not to Bitwarden support.

Before you start

  • HTTPS is required. The web vault uses the browser’s Web Crypto API, which only works in a secure context. Over plain http:// it does not work.
  • Point a subdomain such as vault.example.com at your server. See point a domain to your server.
  • Install Docker and Nginx. The commands use sudo; leave it out if you are root.
  • A password vault is a high-value target. Follow the Linux server security checklist first.

How to install Vaultwarden with Docker Compose

1

Create a project folder

2

Create compose.yaml

This is the official compose example with your domain filled in:
DOMAIN must be the exact https:// address you will use. 127.0.0.1:8000 means only Nginx on the same server can reach the container. SIGNUPS_ALLOWED is true for now so you can create your account.
3

Start it

How to set up HTTPS for Vaultwarden with Nginx

1

Create the Nginx site

Create /etc/nginx/sites-available/vault.example.com (Ubuntu / Debian) or /etc/nginx/conf.d/vault.example.com.conf (AlmaLinux / Rocky). This is based on the Vaultwarden Nginx example:
The Upgrade headers let WebSocket notifications through, so clients sync changes straight away. If another site already defines a map $http_upgrade block, keep only one.
2

Enable, test and reload

On AlmaLinux / Rocky, also run sudo setsebool -P httpd_can_network_connect 1 so SELinux lets Nginx reach the container.
3

Get a certificate

Choose to redirect HTTP to HTTPS when asked. See get a free SSL certificate with Certbot.

How to create your account and disable sign-ups

1

Create your account

Open https://vault.example.com, click Create account and choose a long master password. Vaultwarden cannot recover a lost master password.
2

Turn off public registration

In compose.yaml, change SIGNUPS_ALLOWED: "true" to SIGNUPS_ALLOWED: "false", then recreate the container:
Anyone who can reach your server could otherwise register.
3

Turn on two-step login

In the web vault, open your account’s security settings and set up two-step login, for example with an authenticator app.
Leave the /admin page disabled unless you need it. If you enable it with ADMIN_TOKEN, store an Argon2 hash created with sudo docker exec -it vaultwarden /vaultwarden hash, not the plain token. In compose.yaml, write every $ in the hash as $$. See Enabling admin page.

How to check it worked

The container shows Up, and curl returns a 200 status line. Log in from a Bitwarden app: on the login screen, choose the self-hosted option and enter https://vault.example.com as the server URL.

How to back up Vaultwarden

All data is in ./vw-data. The files that matter are db.sqlite3 (the database), the attachments folder, config.json (if you used the admin page) and the rsa_key* files. Make a consistent copy of the database with the built-in command:
Then copy the whole vw-data folder off the server, ideally encrypted. See encrypted backups with restic and the official backup guide.

How to update Vaultwarden

Bitwarden apps update themselves, so keep Vaultwarden current to avoid client errors. Back up first, then:

Frequently asked questions

Is Vaultwarden the same as Bitwarden?

No. Vaultwarden is a separate, community-built server that is compatible with the official Bitwarden clients. Bitwarden’s own self-hosted server is a different product.

Why does the web vault show an error over HTTP?

The web vault needs a secure context for the Web Crypto API. Serve it over HTTPS with a valid certificate.

How do I add family or team members after disabling sign-ups?

Create an organization and invite them, or enable the admin page and invite them there. With SIGNUPS_ALLOWED=false, organization owners and admins can still invite users.

How much RAM does Vaultwarden need?

The project does not publish a minimum. It is written in Rust and is designed for self-hosting where the resource-heavy official Bitwarden server would not be ideal.

VPS and dedicated server guides

Every guide in this section.

Nginx reverse proxy

How proxying to a local port works.

Back up Docker volumes

Copy container data safely.

Secure Docker on a VPS

Keep container ports private.

Linux server security checklist

Harden the server first.

Checked against the official Vaultwarden README and wiki on 4 November 2026 (image vaultwarden/server:latest); compose.yaml validated with docker compose config and the Nginx configuration syntax-tested on Ubuntu 24.04 LTS. Menu names in the Bitwarden clients can change between releases.

Need Extra Help?

If you encounter any issues, our support team is ready to assist:

Save on Your Hosting

Ready to upgrade your hosting? Use code KB20 at checkout for 20% off your first order!

Last Updated: November 2026