Prerequisites & VPS Selection
2
Initial Server Setup
Update system and configure firewall:
Update System
sudo apt update && sudo apt upgrade -yConfigure Firewall
sudo apt install ufw -y
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status⚠️ Warning: Ensure SSH (port 22) is allowed before enabling UFW!
3
Install Docker & Docker Compose
Install Docker for container management:
Install Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -yInstall Docker Compose & Setup User
sudo apt install docker-compose-plugin -y
sudo usermod -aG docker $USER
newgrp docker4
Install Nginx
Install Nginx and Certbot
sudo apt install nginx certbot python3-certbot-nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx5
Deploy Vaultwarden with Docker
Create Vaultwarden container:
Create Directory and Docker Compose File
mkdir -p ~/vaultwarden/data
cd ~/vaultwarden
nano docker-compose.ymlDocker Compose Configuration
version: '3'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=true
- INVITATIONS_ALLOWED=true
- SHOW_PASSWORD_HINT=false
- WEBSOCKET_ENABLED=true
volumes:
- ./data:/data
ports:
- "127.0.0.1:8080:80"
- "127.0.0.1:3012:3012"⚠️ Important: Replace vault.yourdomain.com with your actual domain!
Start Vaultwarden
docker compose up -d
docker ps
docker logs vaultwarden6
Configure Nginx Reverse Proxy
Setup Nginx to proxy requests:
Create Nginx Config
server {
listen 80;
listen [::]:80;
server_name vault.yourdomain.com;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vault.yourdomain.com;
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8080;
}
}Enable Site
sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx7
Obtain SSL Certificate
Get SSL with Certbot
sudo certbot --nginx -d vault.yourdomain.com✅ Follow prompts to complete SSL setup. Certbot will auto-configure Nginx.
8
Secure Your Installation
Disable Signups (After Account Creation)
Update Docker Compose
nano ~/vaultwarden/docker-compose.yml
# Change SIGNUPS_ALLOWED=true to SIGNUPS_ALLOWED=false
docker compose down
docker compose up -dEnable Admin Panel (Optional)
Generate Admin Token
openssl rand -base64 48Add to docker-compose.yml environment:
Add to Environment
- ADMIN_TOKEN=your_generated_token_hereRestart
docker compose down
docker compose up -d9
Setup Automated Backups
Create backup script for data protection:
Create Backup Script
#!/bin/bash
BACKUP_DIR="/home/$USER/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Stop Vaultwarden
cd ~/vaultwarden
docker compose down
# Backup data
tar -czf $BACKUP_DIR/vaultwarden_backup_$DATE.tar.gz ./data
# Start Vaultwarden
docker compose up -d
# Keep only last 7 backups
find $BACKUP_DIR -name "vaultwarden_backup_*.tar.gz" -mtime +7 -delete
echo "Backup completed: vaultwarden_backup_$DATE.tar.gz"Make Executable and Schedule
chmod +x ~/backup-vaultwarden.sh
crontab -e
# Add: 0 2 * * * /home/vaultwarden/backup-vaultwarden.shTroubleshooting
Container Won't Start
Check Logs
docker logs vaultwardenCan't Access Web Interface
- • Check Nginx:
sudo systemctl status nginx - • Verify firewall:
sudo ufw status - • Confirm DNS points to server IP
Security Best Practices
- Use strong master password
- Enable 2FA in account settings
- Regular backups and test restoration
- Keep software updated
- Disable signups after account creation
