ติดตั้ง Vaultwarden Password Manager บน VPS

ติดตั้ง Vaultwarden Password Manager บน VPS

มิถุนายน 2026 · อ่าน 7 นาที

Vaultwarden คือ Bitwarden-compatible server ที่เขียนด้วย Rust ใช้ทรัพยากรน้อยกว่า Bitwarden official ถึง 10 เท่า รันได้บน VPS RAM 512 MB ได้สบาย ข้อดีคือใช้ Bitwarden app ทุกตัวได้เลย ทั้ง iOS, Android, Chrome extension โดย password เก็บบน server ตัวเองทั้งหมด

⚠️ ความปลอดภัย: Vaultwarden ต้องรันบน HTTPS เท่านั้น ห้ามเปิด HTTP เด็ดขาด เพราะ password manager ที่ไม่มี SSL เท่ากับเปิด password ทุกอันให้โลก

ติดตั้ง Vaultwarden ด้วย Docker

mkdir -p ~/vaultwarden
cd ~/vaultwarden

cat > docker-compose.yml << 'EOF'
version: "3.8"
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      DOMAIN: https://vault.yourdomain.com
      SIGNUPS_ALLOWED: "false"   # ปิด signup หลังสร้าง user แล้ว
      ADMIN_TOKEN: "your-super-secret-admin-token-here"
      SMTP_HOST: smtp.yourdomain.com
      SMTP_PORT: 587
      SMTP_SECURITY: starttls
      SMTP_USERNAME: [email protected]
      SMTP_PASSWORD: yoursmtppass
      SMTP_FROM: [email protected]
    volumes:
      - ./data:/data
EOF

docker compose up -d

ตั้ง SSL ด้วย Nginx

sudo certbot --nginx -d vault.yourdomain.com

sudo nano /etc/nginx/sites-available/vaultwarden

server {
    listen 443 ssl;
    server_name vault.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    location / {
        proxy_pass http://localhost: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://localhost:3012;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

sudo nginx -t && sudo systemctl reload nginx

สร้าง User Account

# เปิด https://vault.yourdomain.com
# กด "Create Account" และสร้าง account ด้วย email + master password
# (ต้องจำ master password ให้ได้ ถ้าลืมหมดทาง)

# หลังสร้าง user แล้ว ปิด signup โดยตั้ง
# SIGNUPS_ALLOWED: "false"
# ใน docker-compose.yml แล้ว restart

# Admin panel
# https://vault.yourdomain.com/admin
# ใส่ ADMIN_TOKEN ที่ตั้งไว้

ใช้ Bitwarden App เชื่อมกับ Vaultwarden

# ใน Bitwarden app (iOS/Android/Chrome extension)
# กด Settings > Server URL
# ใส่: https://vault.yourdomain.com
# Login ด้วย email + master password ที่สร้างไว้

# Bitwarden Desktop/Browser extension:
# Click region icon > Self-hosted
# Server URL: https://vault.yourdomain.com
Tip: เปิด 2FA ทันทีหลัง login ครั้งแรก ผ่าน Account Settings > Two-step Login รองรับ TOTP (Authenticator app), Email และ WebAuthn

ตรวจสอบว่า Vaultwarden ทำงานถูกต้อง

# ตรวจ container
docker compose ps

# ดู logs
docker compose logs -f

# ตรวจ HTTPS
curl -I https://vault.yourdomain.com

# ตรวจ admin panel
curl -I https://vault.yourdomain.com/admin
Tip: Backup folder ~/vaultwarden/data/ ทุกวัน เพราะนี่คือ vault ทั้งหมด รวม database และ attachments ใช้ rsync หรือ rclone sync ไป cloud storage

แก้ปัญหาที่พบบ่อย

Bitwarden app ไม่ยอมเชื่อมต่อ (SSL error)

SSL certificate ต้องถูก trust โดย browser/OS ถ้าใช้ self-signed cert จะ error ต้องใช้ Let's Encrypt เท่านั้น:

# ตรวจ SSL cert
curl -v https://vault.yourdomain.com 2>&1 | grep -E "SSL|certificate|expire"

2FA Email ไม่ได้รับ

SMTP config ผิด ทดสอบด้วย admin panel:

# Admin panel > Diagnostics > SMTP test
# https://vault.yourdomain.com/admin/diagnostics

Vaultwarden ช้าหรือ timeout เมื่อ sync

WebSocket notification ไม่ทำงาน ทำให้ sync ช้า ตรวจ nginx config ว่ามี /notifications/hub route:

docker logs vaultwarden 2>&1 | grep -i "websocket\|notification"

ลืม Admin Token (ล็อค admin panel)

แก้ environment variable ใน docker-compose.yml แล้ว restart:

ADMIN_TOKEN: "new-token-here"
docker compose up -d

คำถามที่พบบ่อย

Vaultwarden ต่างจาก Bitwarden official อย่างไร?

Vaultwarden คือ third-party server implementation ที่ใช้ Bitwarden protocol เหมือนกัน แต่เขียนด้วย Rust ใช้ RAM ต่ำกว่ามาก Bitwarden official server ต้องการ .NET และ RAM หลาย GB Vaultwarden รันได้ใน RAM 100-200 MB

Password ถูก encrypt อยู่บน server ไหม?

ใช่ Vaultwarden เก็บแค่ encrypted data ที่ encrypt ด้วย master password บนเครื่อง client ก่อน upload server ไม่เคย "รู้" password จริง แม้แต่ admin ก็อ่าน password ไม่ได้ถ้าไม่มี master password

Import password จาก LastPass/1Password ได้ไหม?

ได้ ผ่าน Bitwarden Web Vault > Tools > Import Data รองรับ format จาก LastPass, 1Password, Dashlane, KeePass และ Chrome/Firefox exported CSV ทำบน client ฝั่งเดียว