๐ŸŽฏ New! Master certifications with Performance-Based Questions (PBQ) โ€” realistic hands-on practice for CompTIA & Cisco exams!

Bitwarden Self-Hosted Server Guide 2026: Enterprise Password Management Setup

Published on January 10, 2026


Introduction

Bitwarden is a leading open-source password manager trusted by millions of users and thousands of organizations worldwide. While Bitwarden offers an excellent cloud-hosted service, organizations with strict compliance requirements, data sovereignty needs, or those wanting complete control over their infrastructure can self-host their own Bitwarden server.

This comprehensive guide covers deploying the official Bitwarden self-hosted server, including the traditional multi-container deployment and the newer lightweight Bitwarden Lite (formerly Unified) option.

Why Self-Host Official Bitwarden?

BenefitDescription
Data SovereigntyComplete control over where your data is stored
ComplianceMeet regulatory requirements (HIPAA, GDPR, SOC 2)
Air-Gapped EnvironmentsDeploy in networks without internet access
Enterprise FeaturesAccess advanced organization and policy controls
Official SupportGet direct support from Bitwarden team
Security AuditsBenefit from third-party security audits

Deployment Options: Standard vs Lite

Bitwarden offers two self-hosted deployment architectures:

FeatureStandard (Traditional)Lite (Unified)
Docker Containers6-8 containers1 container
RAM Requirement4+ GB200 MB
Storage25 GB1 GB
DatabaseSQL Server (included)SQLite, PostgreSQL, MySQL
Installationbitwarden.sh scriptDocker Compose
Target AudienceEnterprise, large orgsIndividuals, small teams
ComplexityHigherLower

๐Ÿ’ก Recommendation: For personal use or small teams, consider Bitwarden Lite. For enterprise deployments requiring advanced features and official support, use the Standard installation.

What This Guide Covers

  • โœ… Complete Docker installation for all platforms
  • โœ… Standard Bitwarden self-hosted deployment
  • โœ… Bitwarden Lite (Unified) lightweight deployment
  • โœ… SSL/TLS certificate configuration
  • โœ… SMTP email setup for notifications
  • โœ… Push notification configuration
  • โœ… Licensing and premium features
  • โœ… Backup and disaster recovery
  • โœ… Troubleshooting common issues

Part 1: System Requirements

Hardware Requirements

Standard Deployment (Multi-Container)

ComponentMinimumRecommended
Processorx64 1.4 GHzx64 Dual-core 2 GHz
RAM2 GB4+ GB
Storage12 GB25+ GB
Architecturex64 onlyx64 only

Lite Deployment (Single-Container)

ComponentMinimumRecommended
Processorx64 or ARM64Any modern CPU
RAM200 MB512 MB
Storage1 GB5+ GB
Architecturex64, ARM64 (Raspberry Pi)Any

Operating System Support

PlatformStandardLiteNotes
Ubuntu 22.04/24.04 LTSโœ…โœ…Recommended
Debian 11/12โœ…โœ…Fully supported
CentOS/RHEL 8+โœ…โœ…Enterprise ready
Windows Server 2019+โœ…โœ…With Docker Desktop
Windows 10/11 Proโœ…โœ…Via Docker Desktop + WSL2
macOSโœ…โœ…Development only
Synology NASโŒโœ…Lite only
Raspberry Pi (ARM64)โŒโœ…Lite only

Network Requirements

PortProtocolPurposeRequired
80TCPHTTP (Letโ€™s Encrypt verification)Required
443TCPHTTPS (Bitwarden access)Required

Prerequisites

Before starting, ensure you have:

  1. Domain Name: A domain or subdomain (e.g., vault.yourdomain.com)
    • Bitwarden must run at domain root, not a sub-path (e.g., not /bitwarden)
  2. DNS Configuration: A record pointing to your serverโ€™s public IP
  3. Open Ports: Ports 80 and 443 accessible from internet (for SSL)
  4. Installation ID and Key: Obtain from bitwarden.com/host
  5. SMTP Server: Required for email verification and invitations
  6. SSL Certificate: Letโ€™s Encrypt (free) or your own certificate

Part 2: Docker Installation

Docker is required for both Standard and Lite Bitwarden deployments.

Linux (Ubuntu/Debian)

Step 1: Update System

# Update package lists and upgrade existing packages
sudo apt update && sudo apt upgrade -y

Step 2: Install Prerequisites

# Install required packages
sudo apt install -y 
    ca-certificates 
    curl 
    gnupg 
    lsb-release

Step 3: Add Docker Repository

# Create keyring directory
sudo install -m 0755 -d /etc/apt/keyrings

# Download and install Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 
    sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add Docker repository
echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]   https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

๐Ÿ’ก For Debian: Replace ubuntu with debian in the URL.

Step 4: Install Docker Engine

# Update package lists with new repository
sudo apt update

# Install Docker and plugins
sudo apt install -y 
    docker-ce 
    docker-ce-cli 
    containerd.io 
    docker-buildx-plugin 
    docker-compose-plugin

Step 5: Post-Installation Setup

# Add current user to docker group (optional, run without sudo)
sudo usermod -aG docker $USER

# Apply group change (or log out and back in)
newgrp docker

# Enable Docker to start on boot
sudo systemctl enable docker

# Start Docker service
sudo systemctl start docker

Step 6: Verify Installation

# Check Docker version
docker --version
# Expected: Docker version 25.x.x

# Check Docker Compose version
docker compose version
# Expected: Docker Compose version v2.x.x

# Test Docker
docker run hello-world

Windows

Prerequisites

  • Windows 10 version 21H2+ or Windows 11
  • 64-bit processor with virtualization support
  • WSL2 installed and configured

Step 1: Install WSL2

Open PowerShell as Administrator:

# Install WSL with Ubuntu
wsl --install

# Restart your computer when prompted

After restart, complete Ubuntu setup when prompted.

Step 2: Install Docker Desktop

  1. Download from Docker Desktop for Windows
  2. Run the installer
  3. Ensure โ€œUse WSL 2 instead of Hyper-Vโ€ is checked
  4. Complete installation and restart

Step 3: Configure Docker Desktop

  1. Open Docker Desktop
  2. Go to Settings โ†’ Resources โ†’ WSL Integration
  3. Enable integration with your WSL distro
  4. Click Apply & Restart

Step 4: Verify Installation

docker --version
docker compose version
docker run hello-world

macOS

Step 1: Download Docker Desktop

  1. Visit Docker Desktop for Mac
  2. Download appropriate version:
    • Apple Silicon (M1/M2/M3/M4): โ€œApple Chipโ€
    • Intel Macs: โ€œIntel Chipโ€

Step 2: Install

  1. Open the downloaded .dmg file
  2. Drag Docker to Applications
  3. Launch Docker from Applications
  4. Accept the license agreement

Step 3: Verify Installation

docker --version
docker compose version
docker run hello-world

Part 3: Bitwarden Standard Installation

The standard installation uses Bitwardenโ€™s installation script (bitwarden.sh) which orchestrates multiple Docker containers including the web vault, API, identity server, admin portal, and SQL Server database.

Step 1: Obtain Installation Credentials

Before installing, you need an Installation ID and Key:

  1. Visit bitwarden.com/host
  2. Enter your email address
  3. Youโ€™ll receive:
    • Installation ID: A GUID (e.g., 12345678-1234-1234-1234-123456789abc)
    • Installation Key: A random string

๐Ÿ“ Save these credentials - youโ€™ll need them during installation and for premium features.

Step 2: Create Bitwarden User and Directory

# Create dedicated user (recommended for production)
sudo adduser bitwarden

# Add user to docker group
sudo usermod -aG docker bitwarden

# Create installation directory
sudo mkdir -p /opt/bitwarden
sudo chown bitwarden:bitwarden /opt/bitwarden

# Switch to bitwarden user
sudo su - bitwarden

# Navigate to installation directory
cd /opt/bitwarden

Step 3: Download Installation Script

# Download the bitwarden.sh script
curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux"

# Make script executable
chmod 700 bitwarden.sh

Step 4: Run the Installer

# Run the installation
./bitwarden.sh install

The installer will prompt for several pieces of information:

Installation Prompts

PromptDescriptionExample
DomainYour Bitwarden domainvault.yourdomain.com
Letโ€™s EncryptUse free SSL certificate?y (recommended)
Letโ€™s Encrypt EmailEmail for certificate expiryadmin@yourdomain.com
Installation IDFrom bitwarden.com/hostYour 36-character ID
Installation KeyFrom bitwarden.com/hostYour key
RegionUS or EUUS or EU

Example interaction:

(!) Enter the domain name for your Bitwarden instance (ex. bitwarden.example.com): vault.yourdomain.com

(!) Do you want to use Let's Encrypt to generate a free SSL certificate? (y/n): y

(!) Enter your email address (Let's Encrypt will send you certificate expiration reminders): admin@yourdomain.com

(!) Enter your installation id (get at https://bitwarden.com/host): xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

(!) Enter your installation key: xxxxxxxxxxxxxxxxxxxx

(!) Enter the region: US

The installer will:

  1. Download required Docker images
  2. Set up directory structure in ./bwdata
  3. Generate configuration files
  4. Request SSL certificate from Letโ€™s Encrypt
  5. Configure the Bitwarden stack

Step 5: Configure SMTP Email

Email is required for Bitwarden to function properly. Edit the global environment file:

nano ./bwdata/env/global.override.env

Add/modify the following SMTP settings:

# =========================================
# SMTP Email Configuration
# =========================================

# SMTP Server Settings
globalSettings__mail__smtp__host=smtp.gmail.com
globalSettings__mail__smtp__port=587
globalSettings__mail__smtp__ssl=false
globalSettings__mail__smtp__startTls=true

# Authentication
globalSettings__mail__smtp__username=your.email@gmail.com
globalSettings__mail__smtp__password=your-app-password

# Sender Information
globalSettings__mail__replyToEmail=noreply@yourdomain.com
globalSettings__mail__smtp__trustServer=false

๐Ÿ’ก Gmail Users: You must use an App Password instead of your regular password.

Admin Portal Access Configuration:

Also add the admin emails for portal access:

# Admin Portal Access
# Comma-separated list of admin emails for portal access
adminSettings__admins=admin@yourdomain.com,backup-admin@yourdomain.com

Popular SMTP Providers:

ProviderHostPortNotes
Gmailsmtp.gmail.com587Requires App Password
Outlooksmtp.office365.com587Requires App Password
SendGridsmtp.sendgrid.net587API key as password
Mailgunsmtp.mailgun.org587API credentials
Amazon SESemail-smtp.region.amazonaws.com587IAM credentials

Step 6: Rebuild After Configuration Changes

# Rebuild the configuration
./bitwarden.sh rebuild

# Start Bitwarden
./bitwarden.sh start

Step 7: Verify Installation

# Check status
./bitwarden.sh status

All services should show as running:

Container Name              State
bitwarden-proxy             Running
bitwarden-nginx             Running
bitwarden-admin             Running
bitwarden-web               Running
bitwarden-api               Running
bitwarden-identity          Running
bitwarden-sso               Running
bitwarden-events            Running
bitwarden-notifications     Running
bitwarden-attachments       Running
bitwarden-icons             Running
bitwarden-mssql             Running

Step 8: Access Your Bitwarden Instance

  1. Open your browser
  2. Navigate to https://vault.yourdomain.com
  3. Click Create Account
  4. Create your admin account

Windows Standard Deployment

For Windows Server deployments using PowerShell script.

Prerequisites

  • Docker Desktop installed with WSL2 (not Hyper-V)
  • Ports 80 and 443 open in Windows Firewall
  • Nested virtualization enabled if running on a VM

Step 1: Create Dedicated User

Open PowerShell as Administrator:

# Create local user for Bitwarden
$Password = Read-Host -AsSecureString "Enter password for Bitwarden user"
New-LocalUser "Bitwarden" -Password $Password -Description "Bitwarden Local Admin"

# Add to Administrators group
Add-LocalGroupMember -Group "Administrators" -Member "Bitwarden"

# Add to docker-users group (may need to create first)
Add-LocalGroupMember -Group "docker-users" -Member "Bitwarden" -ErrorAction SilentlyContinue

Step 2: Create Installation Directory

# Create directory
New-Item -ItemType Directory -Force -Path "C:Bitwarden"

# Add to Docker file sharing
# In Docker Desktop: Settings > Resources > File Sharing > Add C:Bitwarden

โš ๏ธ Important: In Docker Desktop Settings โ†’ Resources โ†’ File Sharing, add C:\Bitwarden

Step 3: Download PowerShell Installation Script

Log out and log in as the Bitwarden user, then run:

# Navigate to installation directory
Set-Location C:Bitwarden

# Download the bitwarden.ps1 script
Invoke-RestMethod -OutFile bitwarden.ps1 -Uri "https://func.bitwarden.com/api/dl/?app=self-host&platform=windows"

Step 4: Run Windows Installer

# Run the installation
.itwarden.ps1 -install

The prompts are the same as Linux installation (domain, SSL, ID/key, etc.).

๐Ÿ’ก Note: Windows script commands use - prefix instead of nothing. For example: -install, -start, -stop.

Step 5: Configure SMTP

Edit C:\Bitwarden\bwdata\env\global.override.env with your SMTP settings (same as Linux).

Step 6: Start Bitwarden

.itwarden.ps1 -restart
.itwarden.ps1 -start

Step 7: Verify

.itwarden.ps1 -status
docker ps

Auto-Start with Task Scheduler

To start Bitwarden automatically on system boot:

  1. Open Task Scheduler (search from Start)
  2. Click Create Task (not Basic Task)
  3. General tab:
    • Name: Bitwarden Start
    • Check โ€œRun whether user is logged on or notโ€
    • Check โ€œRun with highest privilegesโ€
  4. Triggers tab:
    • New โ†’ Begin the task: โ€œAt startupโ€
    • Delay task for: 30 seconds
  5. Actions tab:
    • New โ†’ Action: โ€œStart a programโ€
    • Program: powershell.exe
    • Arguments: -ExecutionPolicy Bypass -File C:\Bitwarden\bitwarden.ps1 -start
  6. Conditions tab:
    • Uncheck โ€œStart only if computer is on AC powerโ€
  7. Click OK and enter the Bitwarden user credentials

๐Ÿ’ก Windows Script Commands: Use -start, -stop, -restart, -update, -rebuild, -status (with dash prefix)


Part 4: Bitwarden Lite Installation

Bitwarden Lite (formerly called โ€œUnifiedโ€) is a lightweight, single-container deployment ideal for personal use and small teams.

Advantages of Bitwarden Lite

  • Single container: Simpler management and fewer resources
  • ARM support: Works on Raspberry Pi
  • Flexible databases: SQLite, PostgreSQL, MySQL
  • Lower resource usage: ~200 MB RAM

Step 1: Create Project Directory

# Create directory
mkdir -p ~/bitwarden-lite
cd ~/bitwarden-lite

# Create data directory
mkdir -p data

Step 2: Create Docker Compose File

nano docker-compose.yml
# Bitwarden Lite Docker Compose Configuration

services:
  bitwarden:
    image: bitwarden/self-host:latest
    container_name: bitwarden
    restart: unless-stopped
    
    # Environment configuration
    environment:
      # ==========================================
      # REQUIRED: Installation Credentials
      # ==========================================
      # Get these from https://bitwarden.com/host
      - BW_INSTALLATION_ID=your-installation-id
      - BW_INSTALLATION_KEY=your-installation-key
      
      # ==========================================
      # REQUIRED: Domain Configuration
      # ==========================================
      - BW_DOMAIN=vault.yourdomain.com
      
      # ==========================================
      # DATABASE CONFIGURATION
      # ==========================================
      # SQLite (default, simplest)
      - BW_DB_PROVIDER=sqlite
      - BW_DB_FILE=/data/vault.db
      
      # PostgreSQL (recommended for production)
      # - BW_DB_PROVIDER=postgresql
      # - BW_DB_SERVER=postgres
      # - BW_DB_PORT=5432
      # - BW_DB_DATABASE=bitwarden
      # - BW_DB_USERNAME=bitwarden
      # - BW_DB_PASSWORD=SecurePassword123
      
      # ==========================================
      # SMTP Configuration (Required)
      # ==========================================
      - globalSettings__mail__smtp__host=smtp.gmail.com
      - globalSettings__mail__smtp__port=587
      - globalSettings__mail__smtp__ssl=false
      - globalSettings__mail__smtp__startTls=true
      - globalSettings__mail__smtp__username=your.email@gmail.com
      - globalSettings__mail__smtp__password=your-app-password
      - globalSettings__mail__replyToEmail=noreply@yourdomain.com
      
      # ==========================================
      # Push Notifications (Optional)
      # ==========================================
      # Enabled by default if installation ID/key are valid
      - globalSettings__pushRelayBaseUri=https://push.bitwarden.com
      - globalSettings__installation__identityUri=https://identity.bitwarden.com
      
    # Volume mapping
    volumes:
      - ./data:/data
      
    # Port mapping 
    ports:
      - "8080:80"   # HTTP (internal)
      - "8443:443"  # HTTPS (if using built-in SSL)

Step 3: Get Installation Credentials

  1. Visit bitwarden.com/host
  2. Enter your email
  3. Copy the Installation ID and Key
  4. Replace your-installation-id and your-installation-key in docker-compose.yml

Step 4: Configure SMTP

Update the SMTP settings in docker-compose.yml with your email provider credentials.

Step 5: Start Bitwarden Lite

# Pull image and start container
docker compose up -d

# Check logs
docker compose logs -f

# Check status
docker compose ps

Step 6: Set Up Reverse Proxy (Required for Production)

Bitwarden Lite needs HTTPS for production use. Hereโ€™s a Caddy configuration:

Create Caddyfile:

vault.yourdomain.com {
    # Security headers
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "SAMEORIGIN"
    }
    
    # Proxy to Bitwarden
    reverse_proxy bitwarden:80
}

Update docker-compose.yml to include Caddy:

services:
  bitwarden:
    # ... existing configuration ...
    networks:
      - bitwarden-network

  caddy:
    image: caddy:latest
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy-data:/data
      - ./caddy-config:/config
    networks:
      - bitwarden-network

networks:
  bitwarden-network:
    driver: bridge

Restart everything:

docker compose down
docker compose up -d

Part 5: SSL Certificate Options

Option 1: Letโ€™s Encrypt (Free, Automatic)

The recommended approach for most deployments.

Via Standard Installation

When running ./bitwarden.sh install, answer y when asked about Letโ€™s Encrypt.

Via Reverse Proxy (Caddy)

Caddy automatically obtains and renews certificates. No additional configuration needed.

Via Reverse Proxy (Nginx + Certbot)

# Install Certbot
sudo apt install -y certbot python3-certbot-nginx

# Obtain certificate
sudo certbot --nginx -d vault.yourdomain.com

# Certificate auto-renews via systemd timer
sudo systemctl status certbot.timer

Option 2: Your Own Certificate

For enterprise deployments or internal CAs:

Standard Installation

  1. Place your certificate files in ./bwdata/ssl/vault.yourdomain.com/:

    • certificate.crt: Your certificate (including chain)
    • private.key: Private key
  2. During installation, answer n to Letโ€™s Encrypt

  3. Select โ€œProvide your own certificateโ€

Lite/Docker Deployment

Mount your certificates and configure reverse proxy accordingly.

Option 3: Self-Signed Certificate (Development Only)

โš ๏ธ Warning: Only use self-signed certificates for testing. Clients will show security warnings.

# Generate self-signed certificate
openssl req -x509 -nodes -days 365 -newkey rsa:2048 
    -keyout private.key 
    -out certificate.crt 
    -subj "/C=US/ST=State/L=City/O=Org/CN=vault.yourdomain.com"

Part 6: Push Notifications

Push notifications enable real-time synchronization on mobile devices.

How It Works

  1. Self-hosted Bitwarden connects to Bitwardenโ€™s push relay (push.bitwarden.com)
  2. Push relay uses your Installation ID to route notifications
  3. Mobile clients receive real-time vault updates

Requirements

  • Valid Installation ID and Key
  • Outbound HTTPS access to:
    • https://push.bitwarden.com
    • https://identity.bitwarden.com

Configuration

Standard Installation

Push notifications are automatically configured when you provide valid installation credentials.

Lite Installation

Add to your environment:

environment:
  - globalSettings__pushRelayBaseUri=https://push.bitwarden.com
  - globalSettings__installation__identityUri=https://identity.bitwarden.com

Testing Push Notifications

  1. Log into your vault on a mobile device
  2. Log into the web vault on a computer
  3. Add or modify a vault item on the web
  4. The mobile app should sync automatically within seconds

โš ๏ธ Note: Self-hosting the push relay itself is not possible for official Bitwarden, as it requires Bitwardenโ€™s keys for Apple/Google push services.


Part 7: Admin Portal

The admin portal provides server administration capabilities.

Accessing the Admin Portal

  1. Navigate to https://vault.yourdomain.com/admin
  2. Youโ€™ll receive a one-time link via email
  3. Check your configured SMTP email
  4. Click the link to access admin functions

Admin Portal Features

FeatureDescription
UsersView and manage all users
OrganizationsView organization details
BillingManage licenses (enterprise)
DiagnosticsView server status
ConfigurationEdit server settings
LogsView system logs

Enabling Admin Portal Access

For the admin portal to send login links, SMTP must be properly configured.


Part 8: Licensing

License Types

LicenseUsersFeaturesUse Case
Free10 usersBasicPersonal, small teams
TeamsUnlimitedTeams featuresSmall business
EnterpriseUnlimitedFull featuresEnterprise, compliance

Free Tier Limitations

Without a license, self-hosted Bitwarden is limited to:

  • 10 users maximum
  • Basic organization features
  • No SSO, Directory Sync, or Enterprise Policies

Applying a License

  1. Purchase a license at bitwarden.com
  2. Download the license file
  3. Upload via Admin Portal โ†’ Billing

Part 9: Backup and Recovery

What to Back Up

ComponentLocationPriority
Database./bwdata/mssql/ or databaseCritical
Attachments./bwdata/core/attachments/Important
Configuration./bwdata/ directoryImportant
SSL Certificates./bwdata/ssl/Can regenerate
Logs./bwdata/logs/Low

Standard Installation Backup

Method 1: Full Directory Backup

# Stop Bitwarden
./bitwarden.sh stop

# Create backup
sudo tar -czvf bitwarden_backup_$(date +%Y%m%d).tar.gz ./bwdata

# Restart Bitwarden
./bitwarden.sh start

Method 2: Database Backup Only

# Use bitwarden.sh to backup database
./bitwarden.sh backup

# This creates a backup in ./bwdata/backup/

Lite Installation Backup

# Stop container
docker compose stop

# Backup data directory
tar -czvf bitwarden_lite_backup_$(date +%Y%m%d).tar.gz ./data

# Restart
docker compose start

Automated Backups

Create a backup script:

#!/bin/bash
# bitwarden-backup.sh

BACKUP_DIR="/home/bitwarden/backups"
BITWARDEN_DIR="/opt/bitwarden"
RETENTION_DAYS=30

# Create backup directory
mkdir -p $BACKUP_DIR

# Stop services
cd $BITWARDEN_DIR
./bitwarden.sh stop

# Create backup
tar -czvf "$BACKUP_DIR/bitwarden_$(date +%Y%m%d_%H%M%S).tar.gz" ./bwdata

# Restart services
./bitwarden.sh start

# Remove old backups
find $BACKUP_DIR -name "bitwarden_*.tar.gz" -mtime +$RETENTION_DAYS -delete

Schedule with cron:

# Run daily at 3 AM
0 3 * * * /home/bitwarden/bitwarden-backup.sh

Restore Procedure

Standard Installation

# Stop Bitwarden
./bitwarden.sh stop

# Remove existing data
rm -rf ./bwdata

# Extract backup
tar -xzvf bitwarden_backup_YYYYMMDD.tar.gz

# Restart
./bitwarden.sh start

Lite Installation

docker compose down
rm -rf ./data
tar -xzvf bitwarden_lite_backup_YYYYMMDD.tar.gz
docker compose up -d

Part 10: Updating Bitwarden

Standard Installation Updates

# Navigate to installation directory
cd /opt/bitwarden

# Check for updates
./bitwarden.sh updateself

# Update Bitwarden
./bitwarden.sh update

The update process will:

  1. Pull new Docker images
  2. Stop current containers
  3. Update configuration
  4. Start new containers

Lite Installation Updates

cd ~/bitwarden-lite

# Pull latest image
docker compose pull

# Recreate containers with new image
docker compose up -d

Update Best Practices

  1. Backup before updating - Always create a backup first
  2. Read release notes - Check for breaking changes
  3. Test in staging - If possible, test updates in non-production first
  4. Schedule downtime - Notify users of brief outage

Part 11: Troubleshooting

Common Issues

Issue: Installation Script Fails

Symptoms: bitwarden.sh install exits with error

Solutions:

# Check Docker is running
sudo systemctl status docker

# Verify Docker Compose
docker compose version

# Check ports are available
sudo netstat -tlnp | grep -E ':80|:443'

Issue: Letโ€™s Encrypt Certificate Fails

Symptoms: SSL certificate not obtained

Solutions:

  1. Verify DNS is pointing to your server:
    dig vault.yourdomain.com
  2. Ensure ports 80 and 443 are open
  3. Check firewall rules
  4. Verify domain is accessible from internet

Issue: โ€œEmail Not Sentโ€ Errors

Symptoms: Canโ€™t verify email or send invitations

Solutions:

  1. Verify SMTP settings in global.override.env
  2. Test SMTP credentials with external tool
  3. Check for TLS/STARTTLS requirements
  4. Review logs for specific errors:
    docker logs bitwarden-api 2>&1 | grep -i smtp

Issue: Database Connection Failed (Lite)

Symptoms: Container fails to start

Solutions:

# Check container logs
docker compose logs bitwarden

# Verify database file permissions
ls -la ./data/

# Ensure data directory exists and is writable
mkdir -p ./data
chmod 755 ./data

Issue: Push Notifications Not Working

Symptoms: Mobile apps donโ€™t sync in real-time

Solutions:

  1. Verify Installation ID and Key are correct
  2. Check outbound connectivity:
    curl -I https://push.bitwarden.com
    curl -I https://identity.bitwarden.com
  3. Review push notification settings in configuration

Viewing Logs

Standard Installation

# View all logs
./bitwarden.sh logs

# View specific service logs
docker logs bitwarden-api
docker logs bitwarden-identity
docker logs bitwarden-mssql

Lite Installation

docker compose logs -f

Getting Help


Part 12: Client Setup

Browser Extensions

  1. Install the Bitwarden extension for your browser
  2. Click the extension icon โ†’ Settings (gear)
  3. Scroll to Self-Hosted Environment
  4. Enter your server URL: https://vault.yourdomain.com
  5. Save and log in

Desktop Applications

  1. Download from bitwarden.com/download
  2. Before logging in, click the Settings icon
  3. Enter Self-Hosted Server URL: https://vault.yourdomain.com
  4. Save and log in

Mobile Applications

  1. Download Bitwarden from App Store/Play Store
  2. On login screen, tap Self-hosted
  3. Enter server URL: https://vault.yourdomain.com
  4. Save and log in

Command Reference

Standard Installation Commands

CommandDescription
./bitwarden.sh installInitial installation
./bitwarden.sh startStart all containers
./bitwarden.sh stopStop all containers
./bitwarden.sh restartRestart all containers
./bitwarden.sh updateUpdate Bitwarden
./bitwarden.sh updateselfUpdate the script itself
./bitwarden.sh backupCreate database backup
./bitwarden.sh restoreRestore from backup
./bitwarden.sh rebuildRebuild after config changes
./bitwarden.sh logsView logs
./bitwarden.sh statusCheck container status

Lite Installation Commands

CommandDescription
docker compose up -dStart containers
docker compose downStop containers
docker compose restartRestart containers
docker compose pullUpdate images
docker compose logs -fView logs
docker compose psCheck status

Windows Standard Commands (PowerShell)

CommandDescription
.\bitwarden.ps1 -installInitial installation
.\bitwarden.ps1 -startStart all containers
.\bitwarden.ps1 -stopStop all containers
.\bitwarden.ps1 -restartRestart all containers
.\bitwarden.ps1 -updateUpdate Bitwarden
.\bitwarden.ps1 -updateselfUpdate the script itself
.\bitwarden.ps1 -rebuildRebuild after config changes
.\bitwarden.ps1 -statusCheck container status

Security Checklist

Server Security

  • Keep OS and Docker updated
  • Configure firewall (ufw/iptables)
  • Disable root SSH login
  • Use SSH key authentication
  • Enable fail2ban for brute-force protection

Bitwarden Security

  • Use strong SMTP credentials
  • Secure Installation ID/Key
  • Regular backups with offsite storage
  • Enable 2FA for all admin accounts
  • Review access logs regularly
  • Keep Bitwarden updated

Network Security

  • HTTPS only (no HTTP access)
  • Valid SSL certificate
  • Consider Web Application Firewall
  • Monitor for intrusion attempts

Conclusion

You now have a fully functional, self-hosted Bitwarden installation providing:

  • โœ… Complete control over your password data
  • โœ… Enterprise-grade security with regular audits
  • โœ… Official Bitwarden support (with license)
  • โœ… Full feature set including organizations
  • โœ… Push notifications for real-time sync
  • โœ… Automated backups

Next Steps

  1. Create your admin account and secure it with 2FA
  2. Import passwords from your current password manager
  3. Set up organizations for shared credentials
  4. Configure clients on all devices
  5. Establish backup procedures and test restoration
  6. Consider licensing for enterprise features

Additional Resources


Last updated: January 2026

Comments

Sign in to join the discussion!

Your comments help others in the community.