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?
| Benefit | Description |
|---|---|
| Data Sovereignty | Complete control over where your data is stored |
| Compliance | Meet regulatory requirements (HIPAA, GDPR, SOC 2) |
| Air-Gapped Environments | Deploy in networks without internet access |
| Enterprise Features | Access advanced organization and policy controls |
| Official Support | Get direct support from Bitwarden team |
| Security Audits | Benefit from third-party security audits |
Deployment Options: Standard vs Lite
Bitwarden offers two self-hosted deployment architectures:
| Feature | Standard (Traditional) | Lite (Unified) |
|---|---|---|
| Docker Containers | 6-8 containers | 1 container |
| RAM Requirement | 4+ GB | 200 MB |
| Storage | 25 GB | 1 GB |
| Database | SQL Server (included) | SQLite, PostgreSQL, MySQL |
| Installation | bitwarden.sh script | Docker Compose |
| Target Audience | Enterprise, large orgs | Individuals, small teams |
| Complexity | Higher | Lower |
๐ก 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)
| Component | Minimum | Recommended |
|---|---|---|
| Processor | x64 1.4 GHz | x64 Dual-core 2 GHz |
| RAM | 2 GB | 4+ GB |
| Storage | 12 GB | 25+ GB |
| Architecture | x64 only | x64 only |
Lite Deployment (Single-Container)
| Component | Minimum | Recommended |
|---|---|---|
| Processor | x64 or ARM64 | Any modern CPU |
| RAM | 200 MB | 512 MB |
| Storage | 1 GB | 5+ GB |
| Architecture | x64, ARM64 (Raspberry Pi) | Any |
Operating System Support
| Platform | Standard | Lite | Notes |
|---|---|---|---|
| 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
| Port | Protocol | Purpose | Required |
|---|---|---|---|
| 80 | TCP | HTTP (Letโs Encrypt verification) | Required |
| 443 | TCP | HTTPS (Bitwarden access) | Required |
Prerequisites
Before starting, ensure you have:
- 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)
- Bitwarden must run at domain root, not a sub-path (e.g., not
- DNS Configuration: A record pointing to your serverโs public IP
- Open Ports: Ports 80 and 443 accessible from internet (for SSL)
- Installation ID and Key: Obtain from bitwarden.com/host
- SMTP Server: Required for email verification and invitations
- 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
ubuntuwithdebianin 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
- Download from Docker Desktop for Windows
- Run the installer
- Ensure โUse WSL 2 instead of Hyper-Vโ is checked
- Complete installation and restart
Step 3: Configure Docker Desktop
- Open Docker Desktop
- Go to Settings โ Resources โ WSL Integration
- Enable integration with your WSL distro
- Click Apply & Restart
Step 4: Verify Installation
docker --version
docker compose version
docker run hello-world macOS
Step 1: Download Docker Desktop
- Visit Docker Desktop for Mac
- Download appropriate version:
- Apple Silicon (M1/M2/M3/M4): โApple Chipโ
- Intel Macs: โIntel Chipโ
Step 2: Install
- Open the downloaded
.dmgfile - Drag Docker to Applications
- Launch Docker from Applications
- 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:
- Visit bitwarden.com/host
- Enter your email address
- Youโll receive:
- Installation ID: A GUID (e.g.,
12345678-1234-1234-1234-123456789abc) - Installation Key: A random string
- Installation ID: A GUID (e.g.,
๐ 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
| Prompt | Description | Example |
|---|---|---|
| Domain | Your Bitwarden domain | vault.yourdomain.com |
| Letโs Encrypt | Use free SSL certificate? | y (recommended) |
| Letโs Encrypt Email | Email for certificate expiry | admin@yourdomain.com |
| Installation ID | From bitwarden.com/host | Your 36-character ID |
| Installation Key | From bitwarden.com/host | Your key |
| Region | US or EU | US 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:
- Download required Docker images
- Set up directory structure in
./bwdata - Generate configuration files
- Request SSL certificate from Letโs Encrypt
- 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:
| Provider | Host | Port | Notes |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | Requires App Password |
| Outlook | smtp.office365.com | 587 | Requires App Password |
| SendGrid | smtp.sendgrid.net | 587 | API key as password |
| Mailgun | smtp.mailgun.org | 587 | API credentials |
| Amazon SES | email-smtp.region.amazonaws.com | 587 | IAM 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
- Open your browser
- Navigate to
https://vault.yourdomain.com - Click Create Account
- 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:
- Open Task Scheduler (search from Start)
- Click Create Task (not Basic Task)
- General tab:
- Name:
Bitwarden Start - Check โRun whether user is logged on or notโ
- Check โRun with highest privilegesโ
- Name:
- Triggers tab:
- New โ Begin the task: โAt startupโ
- Delay task for: 30 seconds
- Actions tab:
- New โ Action: โStart a programโ
- Program:
powershell.exe - Arguments:
-ExecutionPolicy Bypass -File C:\Bitwarden\bitwarden.ps1 -start
- Conditions tab:
- Uncheck โStart only if computer is on AC powerโ
- 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
- Visit bitwarden.com/host
- Enter your email
- Copy the Installation ID and Key
- Replace
your-installation-idandyour-installation-keyin 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
Place your certificate files in
./bwdata/ssl/vault.yourdomain.com/:certificate.crt: Your certificate (including chain)private.key: Private key
During installation, answer
nto Letโs EncryptSelect โ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
- Self-hosted Bitwarden connects to Bitwardenโs push relay (
push.bitwarden.com) - Push relay uses your Installation ID to route notifications
- Mobile clients receive real-time vault updates
Requirements
- Valid Installation ID and Key
- Outbound HTTPS access to:
https://push.bitwarden.comhttps://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
- Log into your vault on a mobile device
- Log into the web vault on a computer
- Add or modify a vault item on the web
- 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
- Navigate to
https://vault.yourdomain.com/admin - Youโll receive a one-time link via email
- Check your configured SMTP email
- Click the link to access admin functions
Admin Portal Features
| Feature | Description |
|---|---|
| Users | View and manage all users |
| Organizations | View organization details |
| Billing | Manage licenses (enterprise) |
| Diagnostics | View server status |
| Configuration | Edit server settings |
| Logs | View system logs |
Enabling Admin Portal Access
For the admin portal to send login links, SMTP must be properly configured.
Part 8: Licensing
License Types
| License | Users | Features | Use Case |
|---|---|---|---|
| Free | 10 users | Basic | Personal, small teams |
| Teams | Unlimited | Teams features | Small business |
| Enterprise | Unlimited | Full features | Enterprise, 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
- Purchase a license at bitwarden.com
- Download the license file
- Upload via Admin Portal โ Billing
Part 9: Backup and Recovery
What to Back Up
| Component | Location | Priority |
|---|---|---|
| Database | ./bwdata/mssql/ or database | Critical |
| Attachments | ./bwdata/core/attachments/ | Important |
| Configuration | ./bwdata/ directory | Important |
| 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:
- Pull new Docker images
- Stop current containers
- Update configuration
- 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
- Backup before updating - Always create a backup first
- Read release notes - Check for breaking changes
- Test in staging - If possible, test updates in non-production first
- 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:
- Verify DNS is pointing to your server:
dig vault.yourdomain.com - Ensure ports 80 and 443 are open
- Check firewall rules
- Verify domain is accessible from internet
Issue: โEmail Not Sentโ Errors
Symptoms: Canโt verify email or send invitations
Solutions:
- Verify SMTP settings in
global.override.env - Test SMTP credentials with external tool
- Check for TLS/STARTTLS requirements
- 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:
- Verify Installation ID and Key are correct
- Check outbound connectivity:
curl -I https://push.bitwarden.com curl -I https://identity.bitwarden.com - 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
- Official Documentation: bitwarden.com/help
- Community Forums: community.bitwarden.com
- GitHub Issues: github.com/bitwarden/server
- Support (Enterprise): Contact via your license
Part 12: Client Setup
Browser Extensions
- Install the Bitwarden extension for your browser
- Click the extension icon โ Settings (gear)
- Scroll to Self-Hosted Environment
- Enter your server URL:
https://vault.yourdomain.com - Save and log in
Desktop Applications
- Download from bitwarden.com/download
- Before logging in, click the Settings icon
- Enter Self-Hosted Server URL:
https://vault.yourdomain.com - Save and log in
Mobile Applications
- Download Bitwarden from App Store/Play Store
- On login screen, tap Self-hosted
- Enter server URL:
https://vault.yourdomain.com - Save and log in
Command Reference
Standard Installation Commands
| Command | Description |
|---|---|
./bitwarden.sh install | Initial installation |
./bitwarden.sh start | Start all containers |
./bitwarden.sh stop | Stop all containers |
./bitwarden.sh restart | Restart all containers |
./bitwarden.sh update | Update Bitwarden |
./bitwarden.sh updateself | Update the script itself |
./bitwarden.sh backup | Create database backup |
./bitwarden.sh restore | Restore from backup |
./bitwarden.sh rebuild | Rebuild after config changes |
./bitwarden.sh logs | View logs |
./bitwarden.sh status | Check container status |
Lite Installation Commands
| Command | Description |
|---|---|
docker compose up -d | Start containers |
docker compose down | Stop containers |
docker compose restart | Restart containers |
docker compose pull | Update images |
docker compose logs -f | View logs |
docker compose ps | Check status |
Windows Standard Commands (PowerShell)
| Command | Description |
|---|---|
.\bitwarden.ps1 -install | Initial installation |
.\bitwarden.ps1 -start | Start all containers |
.\bitwarden.ps1 -stop | Stop all containers |
.\bitwarden.ps1 -restart | Restart all containers |
.\bitwarden.ps1 -update | Update Bitwarden |
.\bitwarden.ps1 -updateself | Update the script itself |
.\bitwarden.ps1 -rebuild | Rebuild after config changes |
.\bitwarden.ps1 -status | Check 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
- Create your admin account and secure it with 2FA
- Import passwords from your current password manager
- Set up organizations for shared credentials
- Configure clients on all devices
- Establish backup procedures and test restoration
- 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.