Vaultwarden hay Bitwarden self-hosted cho VPS?
Bitwarden self-hosted cần khoảng một chục container và 2 GB RAM, còn Vaultwarden chạy trong một container. So sánh API, bảo mật và backup trước khi chọn.
Vaultwarden và Bitwarden self-hosted thực chất là gì
Vaultwarden và Bitwarden self-hosted là lựa chọn giữa hai server dùng cùng client API, không phải lựa chọn giữa hai password manager. Stack chính thức của Bitwarden chạy khoảng một chục container phía sau nginx, lưu mọi dữ liệu trong Microsoft SQL Server và gắn với một installation ID mà bạn đăng ký bằng địa chỉ email. Vaultwarden là bản triển khai lại không chính thức của Bitwarden client API, được viết bằng Rust, chạy trong một container và sử dụng một file SQLite. Extension trên browser và ứng dụng trên điện thoại không thể phân biệt hai server này, vì cả hai đều phản hồi cùng các endpoint.
Cơ chế mã hóa giống hệt nhau trong cả hai trường hợp. Client Bitwarden mã hóa vault trước khi bất kỳ dữ liệu nào rời khỏi thiết bị, nên server chỉ lưu các blob mà nó không thể đọc; định dạng vault cũng đều thuộc về Bitwarden. Điểm khác biệt là lượng tài nguyên bạn phải thuê, bên duy trì code, các tính năng phải trả phí và những dữ liệu bạn phải backup.
README của Vaultwarden nói rõ về trạng thái của dự án: "Dự án này không liên quan đến Bitwarden hoặc Bitwarden, Inc." Đây là một dự án do tình nguyện viên duy trì, không có bộ phận hỗ trợ và không có bảo hành. Một maintainer đang hoạt động làm việc tại Bitwarden và đóng góp trong thời gian cá nhân. Đây là hành động hỗ trợ thiện chí, không phải sự chứng thực.
Ba stack có thể cài đặt
Nhiều bài so sánh bỏ sót rằng Bitwarden phát hành hai sản phẩm self-hosted khác nhau.
Bitwarden standard. Bản triển khai chính thức của nhà cung cấp, được thực hiện bằng shell script.
curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
&& chmod 700 bitwarden.sh
./bitwarden.sh installTrình cài đặt hỏi domain của bạn, có yêu cầu chứng chỉ Let's Encrypt hay không, tên database, cùng installation ID và key mà bạn lấy từ https://bitwarden.com/host bằng cách nhập địa chỉ email. Sau đó, ./bitwarden.sh start tải các image và khởi động stack. Bitwarden ghi rõ mức tối thiểu là 2 GB RAM và 12 GB storage, mức khuyến nghị là 4 GB RAM và 25 GB storage, cùng Docker Engine 26 trở lên có Compose plugin. Database sử dụng image MSSQL Express. Phiên bản này giới hạn relational database ở 10 GB, trừ khi bạn cấu hình deployment sử dụng database bên ngoài.
Bitwarden lite. Đây là bản deployment trước đây có tên Bitwarden Unified. Bản này đã thoát giai đoạn beta và được đổi tên vào tháng 12 năm 2025. Bản triển khai gồm một application container và một database tùy chọn:
services:
bitwarden:
depends_on:
- db
env_file:
- settings.env
image: ghcr.io/bitwarden/lite
restart: always
ports:
- "80:8080"
volumes:
- bitwarden:/etc/bitwarden
db:
environment:
MARIADB_USER: "bitwarden"
MARIADB_PASSWORD: "super_strong_password"
MARIADB_DATABASE: "bitwarden_vault"
MARIADB_RANDOM_ROOT_PASSWORD: "true"
image: mariadb:10
restart: always
volumes:
- data:/var/lib/mysql
volumes:
bitwarden:
data:Bản này hỗ trợ MariaDB hoặc MySQL, PostgreSQL, SQLite và MSSQL; yêu cầu 200 MB RAM và 1 GB storage. Có hai điểm cần lưu ý theo tài liệu của Bitwarden. Bản này được ghi rõ là dành cho mục đích cá nhân và home lab, không phải cho môi trường doanh nghiệp. Bản này cũng không tự động backup database, nên bạn phải tự thực hiện việc đó.
Vaultwarden. Một container duy nhất, lấy trực tiếp từ README của project:
docker run --detach --name vaultwarden \
--env DOMAIN="https://vw.domain.tld" \
--volume /vw-data/:/data/ \
--restart unless-stopped \
--publish 127.0.0.1:8000:80 \
vaultwarden/server:latestDòng publish chỉ bind port 8000 vào loopback. Đây là cấu hình có chủ đích. Vaultwarden cung cấp HTTP thuần và yêu cầu reverse proxy thực hiện TLS termination (transport layer security) phía trước. TLS không phải tùy chọn trong trường hợp này: web vault thực hiện mã hóa bằng WebCrypto API của trình duyệt. Trình duyệt chỉ cung cấp API này trong secure context, nên khi dùng http thuần, trang đăng nhập sẽ lỗi trong trình duyệt trước khi server của bạn được yêu cầu xử lý. Hướng dẫn cài đặt Vaultwarden đầy đủ trình bày cách cấu hình proxy và chứng chỉ.
Vaultwarden dùng bao nhiêu RAM khi chạy cùng Bitwarden tự host?
Mức tối thiểu do nhà cung cấp công bố cho biết trình cài đặt sẽ từ chối chạy dưới mức nào, không cho biết phần mềm thực sự chiếm bao nhiêu tài nguyên. Các dòng dưới đây lấy từ docker stats --no-stream trên các cài đặt đang idle, mỗi cài đặt có một user, một vault nhỏ và không có tệp đính kèm, chạy trên máy Ubuntu 24.04 có 4 GB RAM. Dung lượng disk gồm image và thư mục data sau lần khởi động thành công đầu tiên.
The data behind this chart
[
{
"label": "Vaultwarden (SQLite)",
"idle_ram_mb": 58,
"containers": 1,
"disk_gb": 0.4
},
{
"label": "Bitwarden lite + MariaDB",
"idle_ram_mb": 470,
"containers": 2,
"disk_gb": 1.6
},
{
"label": "Bitwarden standard (MSSQL)",
"idle_ram_mb": "2,400",
"containers": 12,
"disk_gb": 6.5
}
]Vaultwarden sử dụng 58 MB RAM khi idle trong một container duy nhất. Bitwarden stack tiêu chuẩn sử dụng gần 2,400 MB khi idle trên 12 container, trong đó container MSSQL chiếm phần lớn dung lượng. Bitwarden lite nằm giữa hai lựa chọn này, sử dụng 470 MB cùng container MariaDB. Hãy chạy cùng command trên máy của bạn trước khi tin vào các số liệu này, vì chúng thay đổi theo số lượng user, tệp đính kèm và network traffic khi sync. MSSQL cũng tăng working set càng chạy lâu.
Đối với một VPS nhỏ, có thể chạy Vaultwarden với SQLite thoải mái trên gói 1 GB, còn Bitwarden stack tiêu chuẩn sẽ không khởi động trên đó. Trên gói 2 GB, stack tiêu chuẩn đạt mức tối thiểu được tài liệu công bố nhưng còn rất ít RAM cho hệ điều hành, nên kernel out of memory killer có thể thực sự được kích hoạt. Khi xảy ra, dmesg sẽ in một dòng cho biết process bị kill. Với stack này, process đó thường là sqlservr. Hãy cấp 4 GB RAM cho deployment tiêu chuẩn.
Những tính năng trả phí nào được miễn phí trong Vaultwarden?
Chạy server của Bitwarden không mất phí, nhưng các tính năng trả phí vẫn bị khóa cho đến khi bạn tải lên một file licence. Tài khoản cá nhân Premium và mọi gói tổ chức trả phí (Families, Teams, Enterprise) đều cần file này. Bạn tải file từ cloud web vault, vào Settings rồi Subscription đối với tài khoản cá nhân, hoặc vào Admin Console, chọn Billing rồi Subscription đối với tổ chức, sau đó tải file lên instance của mình. Licence của tổ chức được cấp dựa trên installation ID lưu trong ./bwdata/env/global.override.env. Vì vậy, một tổ chức self-hosted vẫn có subscription trả phí và vẫn kết nối đến cloud của Bitwarden để xử lý billing.
Vaultwarden bật các tính năng tương tự mà không cần licence hoặc subscription. Wiki của dự án liệt kê các tính năng này:
- organisations, collections và groups
- file attachment
- đăng nhập hai bước bằng email, Duo, YubiKey và FIDO2
- Emergency Access
- Bitwarden Send
- personal API keys
- SSO thông qua OpenID Connect
SSO là tính năng mới nhất trong số này và được cấu hình bằng SSO_ENABLED, SSO_AUTHORITY, SSO_CLIENT_ID và SSO_CLIENT_SECRET. Tính năng này chỉ xác thực bước đăng nhập. Wiki nêu rõ rằng master password vẫn bắt buộc và không do identity provider kiểm soát, vì password này được dùng để tạo key giải mã vault. Trỏ SSO_AUTHORITY đến discovery issuer của identity provider Authentik self-hosted rồi người dùng đăng nhập tại đó, sau đó mở khóa bằng master password. Giá trị này phải khớp với trường issuer mà discovery endpoint trả về, nhưng không được có hậu tố /.well-known/openid-configuration ở cuối.
Điều bạn không có khi dùng Vaultwarden là vendor. Bitwarden có SOC 2 Type 2 và ISO 27001, công bố báo cáo audit của bên thứ ba và vận hành chương trình bug bounty riêng trên HackerOne. Các chứng nhận và chương trình này áp dụng cho code và service của Bitwarden, không phải server bạn tự cài đặt. Tuy nhiên, nếu auditor yêu cầu password manager phải có một nhà cung cấp cụ thể đứng sau, một dự án volunteer reimplementation sẽ khó đáp ứng yêu cầu đó.
Các ứng dụng Bitwarden chính thức có hoạt động với Vaultwarden không?
Có. Vaultwarden triển khai client API, nên browser extension, desktop app, mobile app và web vault tích hợp đều hoạt động với Vaultwarden. Trong mỗi client, bạn đặt URL server self-hosted trên màn hình môi trường trước khi đăng nhập, không phải sau đó.
Một tính năng cần cấu hình bổ sung: push notification cho mobile app. Nếu không có push notification, app sẽ đồng bộ khi bạn mở app hoặc theo timer riêng. Vì vậy, mật khẩu được đổi trên laptop sẽ chưa xuất hiện trên điện thoại cho đến khi bạn kiểm tra. Vaultwarden có thể dùng push relay của Bitwarden. Bạn cần installation ID và key từ cùng trang https://bitwarden.com/host mà installer chính thức sử dụng.
PUSH_ENABLED=true
PUSH_INSTALLATION_ID=<your installation id>
PUSH_INSTALLATION_KEY=<your installation key>Server trong khu vực EU cũng cần PUSH_RELAY_URI=https://api.bitwarden.eu và PUSH_IDENTITY_URI=https://identity.bitwarden.eu. Wiki nêu hai trường hợp dễ nhầm mà bạn nên biết trước khi mất cả giờ để debug. App được cài từ F-Droid hoặc Neo Store không có hỗ trợ Firebase và sẽ không bao giờ nhận push, bất kể server được cấu hình thế nào. App đã kết nối trước Vaultwarden 1.30.2 phải được xóa dữ liệu để đăng ký push token.
Bản triển khai lại an toàn đến mức nào?
Lịch sử audit của Bitwarden rất dài và được công khai. Cure53 đã review Bitwarden vào các năm 2018, 2021, 2022 và 2023. IOActive và Mandiant đã review các client vào năm 2024. Fracture Labs đã thực hiện đánh giá web và network trong các năm 2024 và 2025. Unit 42 đã đánh giá các mobile app vào năm 2025. Nhóm Applied Cryptography Group thuộc ETH Zurich đã review phần cryptography vào năm 2025.
Vaultwarden cũng đã được các bên bên ngoài kiểm tra, dù nhiều người bất ngờ vì nghĩ rằng không ai xem xét nó. Văn phòng Liên bang về An toàn Thông tin của Đức (BSI) đã yêu cầu các đối tác bảo mật mgm kiểm thử Vaultwarden từ tháng 2 đến tháng 5 năm 2024 trong khuôn khổ dự án phân tích mã Caos 3.0. Đợt review đó xếp hạng 2 phát hiện ở mức high. Trong một đợt đánh giá riêng, ERNW đã báo cáo lỗ hổng bypass authentication ảnh hưởng đến các phiên bản thấp hơn 1.32.5 (CVE-2024-55225). Lỗi này được sửa vào tháng 11 năm 2024. Version 1.37.0, phát hành vào tháng 7 năm 2026, đã sửa các lỗi SSRF (server side request forgery) thông qua icon endpoint, truy cập cipher xuyên organisation và bypass policy của organisation khi import directory.
Lịch sử này cho thấy dự án có quy trình công bố lỗ hổng đang hoạt động. Nó cũng chỉ ra bề mặt thường xuyên xuất hiện trong các báo cáo: admin page. Vì vậy, hãy coi page này là thành phần nhạy cảm đúng như bản chất của nó. Page này mặc định bị tắt trừ khi ADMIN_TOKEN được thiết lập, và bạn nên lưu hash thay vì token dạng plaintext.
docker run --rm -it vaultwarden/server /vaultwarden hashLệnh này in ra một chuỗi Argon2 PHC (password hashing competition format) để dán vào ADMIN_TOKEN. Hãy bật HTTPS trước khi bật admin page, vì token được gửi trong request và token dạng plaintext trên kết nối HTTP không mã hóa có thể bị bất kỳ bên nào trên đường truyền đọc được. Khi có thể, hãy giữ /admin không exposed ra Internet công cộng và kết hợp với các biện pháp hardening thông thường cho host, chẳng hạn như siết chặt quyền truy cập SSH trên server.
Điều gì hỏng khi API chính thức thay đổi
Đây là rủi ro thường bị đánh giá thấp. Bitwarden phát hành các client, và những client này tự cập nhật qua app store trong đêm. Vaultwarden phải theo kịp. Khi một bản phát hành client thay đổi API contract, Vaultwarden chưa được nâng cấp sẽ phải xử lý một client đã chuyển sang contract mới, khiến đăng nhập hoặc đồng bộ bắt đầu lỗi trên những thiết bị bạn không hề đụng đến.
Release notes có một ví dụ cụ thể. Vaultwarden 1.37.0 ghi: "Bản cập nhật này bắt buộc để hỗ trợ các client phiên bản 2026.7.0 trở lên; hãy cập nhật trước khi báo cáo bất kỳ sự cố nào với các client đó." Tính đến tháng 8 năm 2026, bản phát hành hiện tại là 1.37.1, được phát hành vào ngày 29 tháng 7 năm 2026.
Hai thói quen giúp việc này không trở nên phức tạp. Hãy pin một image tag cụ thể thay vì latest, để một pull không giám sát không thể tự ý cập nhật server của bạn lúc 3 giờ sáng. Sau đó, theo dõi release feed và nâng cấp có chủ đích, đọc release notes trước, vì breaking changes chỉ xuất hiện ở đó. Chẳng hạn, phiên bản 1.35.5 đã vô hiệu hóa mọi two factor remember token hiện có khi nâng cấp, khiến người dùng bị đăng xuất khỏi một bước mà họ tưởng đã lưu.
Triển khai Bitwarden tiêu chuẩn gặp vấn đề ngược lại. Việc nâng cấp chạy qua ./bitwarden.sh updateself và ./bitwarden.sh update, đồng thời bản cập nhật áp dụng database migration. Backup được tạo trước migration không thể rollback schema sau migration. Vì vậy, hãy tạo backup và ghi lại phiên bản tại thời điểm tạo backup.
Sao lưu, nơi người dùng thực sự làm mất vault
Thư mục dữ liệu của Vaultwarden chính là toàn bộ server. Hãy giữ lại các mục sau:
db.sqlite3- mọi file
rsa_key*, bao gồmrsa_key.pemvàrsa_key.der attachments/config.jsonsends/
Không sao chép db.sqlite3 bằng cp khi container đang chạy. SQLite có thể đang ghi dở, nên bản sao có thể là database bị hỏng nhưng vẫn trông bình thường cho đến khi bạn restore. Thay vào đó, hãy dùng API backup online:
sqlite3 data/db.sqlite3 ".backup '/path/to/backups/db-$(date '+%Y%m%d-%H%M').sqlite3'"Từ phiên bản 1.32.1, image cũng có command /vaultwarden backup tích hợp sẵn. Dù dùng cách nào, snapshot vẫn nằm trên cùng disk với bản gốc cho đến khi bạn di chuyển nó. Vì vậy, hãy định kỳ đẩy snapshot ra khỏi máy bằng restic snapshot đến storage off-site. Các file rsa_key quan trọng không kém database: server dùng key đó để ký session token. Vì vậy, khi restore database cùng một key vừa được tạo mới, tất cả người dùng sẽ bị đăng xuất và các lời mời vào organization đang được xử lý sẽ bị hỏng.
Bitwarden Standard tự backup nhiều thành phần hơn. Container mssql ghi các bản backup database hằng đêm vào ./bwdata/mssql/backups và giữ lại 30 ngày, miễn là container đang chạy. Bạn cũng có thể buộc tạo một bản backup:
docker exec -i bitwarden-mssql /backup-db.shCác thư mục cần giữ lại là ./bwdata/env (biến môi trường, bao gồm mật khẩu database và certificate), ./bwdata/core/attachments, ./bwdata/mssql/data và ./bwdata/core/aspnet-dataprotection. Mục cuối cùng là mục mọi người thường quên. Nó chứa dữ liệu bảo vệ ở cấp framework, bao gồm authentication token và một số cột database. Vì vậy, nếu restore database mà không có mục này, các cột được bảo vệ sẽ không thể đọc được. Bitwarden Lite hoàn toàn không tự động backup. Vì thế, chọn Lite đồng nghĩa với việc bạn phải tự lập lịch dump, giống như khi dùng Vaultwarden.
Di chuyển theo cả hai hướng
Quá trình di chuyển thực hiện thông qua client, không phải server, vì export và import là các tính năng của client. Do đó, cả hai hướng đều dùng cùng một quy trình.
Mỗi user export từ web vault hoặc desktop app, tạo account trên server mới rồi import. Các định dạng gồm plaintext .json, plaintext .csv, encrypted .json và một .zip chứa JSON cùng file đính kèm cho từng vault riêng lẻ. Card, identity, passkey đã lưu và SSH key chỉ được giữ lại trong các định dạng JSON, nên migration bằng CSV sẽ âm thầm bỏ qua chúng. Không định dạng export nào bao gồm các mục trong trash hoặc Sends. Dữ liệu thuộc organisation cũng không nằm trong export của từng cá nhân.
Hãy xem bản export plaintext là một secret đang hoạt động, vì đó chính là toàn bộ vault của bạn ở dạng văn bản rõ trên disk. Hãy export, import rồi xóa file đó trong cùng một lần thực hiện. Không bao giờ gửi file này qua email hoặc chat.
Có một lỗi dễ khiến quá trình migration bị gián đoạn. Encrypted export gắn với account của bạn không thể import vào account khác, mà chuyển server thì mặc định đồng nghĩa với dùng account khác. Thay vào đó, hãy chọn tùy chọn export được bảo vệ bằng password, vì định dạng này có thể di chuyển giữa các account.
Chuyển từ Vaultwarden sang Bitwarden standard khó hơn, vì cấu trúc organisation không được giữ trong file export. Bạn phải tạo lại organisation trên server mới, mời lại các user, rồi để từng user import vault của mình. Hãy lên kế hoạch cho một maintenance window thay vì đến ngày thực hiện mới phát hiện vấn đề này.
Nên chạy phiên bản nào?
Chạy Vaultwarden nếu bạn là một cá nhân, một gia đình hoặc đang vận hành home lab trên VPS 1 GB hoặc 2 GB. Organisations, Emergency Access và Send được cung cấp miễn phí, mức dùng memory khi idle tương đương khoảng một tab trình duyệt, và bản backup chỉ gồm một file SQLite cùng một thư mục nhỏ. Đây là lý do Vaultwarden chiếm ưu thế trong việc tự host password manager.
Chạy server chính thức của Bitwarden khi những người khác phụ thuộc vào hệ thống này cho công việc: công ty cần hợp đồng hỗ trợ, yêu cầu compliance chỉ định đúng vendor, hoặc bạn đã trả tiền cho các tính năng enterprise. Cấp 4 GB cho deployment tiêu chuẩn, đồng thời xem file licence và installation ID là một phần của deployment, không phải thủ tục giấy tờ.
Bitwarden lite nằm ở khoảng giữa và có một số điểm khó xử. Đây là code của vendor nhưng nhẹ hơn rất nhiều, nên thực sự hấp dẫn. Tuy nhiên, Bitwarden chỉ hướng dẫn dùng nó cho cá nhân và home lab, đồng thời không có backup tự động. Bạn phải tự vận hành database như với Vaultwarden nhưng không có bộ tính năng miễn phí của Vaultwarden. Chọn Bitwarden lite khi bạn coi trọng code của vendor hơn các tính năng và chấp nhận tự vận hành database.
Nếu bạn vẫn đang quyết định máy này sẽ host thêm gì, danh sách rút gọn rộng hơn về các dịch vụ tự host đặt lựa chọn này cạnh những service khác đang cạnh tranh cùng lượng RAM.
FAQ
Vaultwarden có đủ an toàn để làm trình quản lý mật khẩu thực tế không?
Có, nếu dùng cho cá nhân và gia đình, nhưng cần đáp ứng một số điều kiện. Client mã hóa vault trước khi dữ liệu đến server, nên Vaultwarden không bao giờ thấy master password hoặc dữ liệu plaintext của bạn. Phần mềm đã được đánh giá độc lập: BSI đã thuê các đối tác bảo mật mgm kiểm thử từ tháng 2 đến tháng 5 năm 2024, và ERNW đã báo cáo một lỗi bypass xác thực được sửa trong phiên bản 1.32.5. Hãy luôn cập nhật phiên bản, tắt trang admin hoặc đặt trang này phía sau ADMIN_TOKEN đã băm bằng Argon2, và chỉ cung cấp dịch vụ qua HTTPS. Doanh nghiệp cần hỗ trợ từ vendor hoặc tài liệu audit nên chạy server chính thức của Bitwarden.
Vaultwarden cần bao nhiêu RAM so với Bitwarden self-hosted?
Trong các bản cài đặt nhàn rỗi được đo bằng docker stats --no-stream, Vaultwarden dùng SQLite chiếm khoảng 58 MB trong một container, còn bản triển khai tiêu chuẩn của Bitwarden chiếm gần 2,400 MB trên 12 container. Phần lớn dung lượng này thuộc về database MSSQL. Bitwarden ghi rõ mức tối thiểu là 2 GB và mức khuyến nghị là 4 GB cho stack tiêu chuẩn, còn Bitwarden lite cần 200 MB. Vaultwarden chạy được trên VPS 1 GB và vẫn còn dư RAM.
Tôi có cần licence Bitwarden để self-host không?
Không cần nếu bạn chỉ dùng một vault cá nhân miễn phí. Chạy server là miễn phí. Cần có file licence để mở khóa các tính năng premium dành cho cá nhân và mọi gói organisation trả phí, bao gồm Families, Teams và Enterprise. Bạn tải licence từ cloud web vault rồi upload vào instance của mình. Licence organisation được cấp dựa trên installation ID lưu trong ./bwdata/env/global.override.env. Vaultwarden không cần licence và tự bật các tính năng organisation.
Sau này tôi có thể chuyển từ Vaultwarden sang Bitwarden hoặc chuyển ngược lại không?
Có, theo cả hai hướng, thông qua các client. Mỗi user export vault từ web vault hoặc desktop app, rồi import vào server mới sau khi tạo account trên server đó. Bản export .zip chứa attachment của vault cá nhân. Các dạng JSON chứa card, identity, passkey và SSH key. Item trong Trash và Sends không có trong bất kỳ định dạng export nào. Item do organisation sở hữu phải được owner export riêng. Vì vậy, hãy chuẩn bị tạo lại organisation và mời lại user trên server mới.