Cài đặt Bitwarden-rs không sử dụng Docker
Giới thiệu
Bitwarden là một ứng dụng để lưu trữ và quản lý mật khẩu, cũng tương tự như LastPass, 1Password...
Trước đây mình có sử dụng LastPass, tuy nhiên sau khi LastPass thay đổi chính sách (mỗi tài khoản miễn phí chỉ được sử dụng trên một thiết bị) thì mình quyết định tìm kiếm ứng dụng khác để thay thế. Và ứng dụng mình lựa chọn là Bitwarden.
Ưu điểm của Bitwarden:
- Ghi nhớ mật khẩu không giới hạn.
- Nhập được dữ liệu mật khẩu đã lưu từ các ứng dụng khác.
- Miễn phí, miễn phí và ...miễn phí.
- Lưu trữ trên đám mây, cụ thể là chúng ta có thể xây dựng server riêng để sử dụng.
- ...và rất nhiều ưu điểm khác, có thể tìm hiểu ở Trang chủ
Ban đầu, mình sử dụng Docker trên Synology để cài Bitwarden, tuy nhiên, sau khi mới chạy được 2 ngày với 1 tài khoản duy nhất mà ứng dụng trên Docker đã ngốn 1Gb RAM của mình (trong khi Synology của mình RAM có 4Gb 🤣🤣🤣) → tìm giải pháp khác gấp.
Tiếp tục tìm kiếm, mình tìm được bitwarden-rs, và cũng tiếp tục cài thử, chạy thử, cũng ngốn mất hơn 100Mb RAM → tìm tiếp, và tìm ra cách build trực tiếp từ source.
Bài viết này sẽ note lại quá trình mình thực hiện.
Yêu cầu hệ thống
- Ubuntu Server cài theo hướng dẫn.
- NodeJS đã cài theo hướng dẫn.
- Nginx làm Reverse Proxy, cài theo hướng dẫn.
- Tên miền với chứng chỉ SSL đã được lấy từ Let's Encrypt, xem thêm hướng dẫn.
Cài đặt thêm các gói cần thiết
Ubuntu Server, NodeJS, Nginx là yêu cầu bắt buộc sử dụng mãi sau khi cài đặt, để build chúng ta cần thêm các gói sau.
- rustup, trình cài đặt cho ngôn ngữ lập trình Rust, để cài đặt chúng ta chỉ cần
sudo curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Làm theo yêu cầu hiển thị ra để tiến hành cài đặt.
- Cài các gói build-essential, git
sudo apt install build-essential git
- Cài MariaDB(MySQL) hoặc SQLite hoặc PostgreSQL tùy yêu cầu sử dụng.
MariaDB | SQLite | PostgreSQL | |
---|---|---|---|
Gói cần cài thêm | libmariadb-dev-compat và libmariadb-dev | libsqlite3-dev | libpq-dev và pkg-config |
Tiến hành cài đặt
Clone Git Repo của bitwarden-rs
sudo git clone https://github.com/dani-garcia/bitwarden_rs && pushd bitwarden_rs
Tùy loại database sử dụng mà lựa chọn cách build khác nhau
đối với SQLite
sudo cargo clean && cargo build --features sqlite --release
đối với MariaDB
sudo cargo clean && cargo build --features mysql --release
đối với PostgreSQL
sudo cargo clean && cargo build --features postgresql --release
file được build ra sẽ có tên là vaultwarden và lưu vào thư mục target/release, kiểm tra đã build được chưa
file target/release/vaultwarden
Nếu hiện ra thế này là được
vaultwarden: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f7166dff8d07c3d14b423065db112946b79bc7f, for GNU/Linux 3.2.0, not stripped
Tạo thư mục để chạy Bitwarden
sudo mkdir /opt/bitwarden
Sau đó, bạn cần giao diện người dùng web. Vì đây là nodejs nên cần rất nhiều RAM, nên mình chỉ nên tải bản phát hành mới nhất từ bản phát hành trên kho lưu trữ web của họ. Phiên bản mình sử dụng thời điểm cài mới nhất là v2023.2.0. Tải và giải nén nó được thư mục web-fault.
wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2023.2.0/bw_web_v2023.2.0.tar.gz
tar -xf bw_web_v2023.2.0.tar.gz
Copy file vaultwarden đã build ở trên và thư mục web-fault vào folder /opt/bitwarden đã tạo.
sudo cp bitwarden_rs/target/release/vaultwarden /opt/bitwarden/vaultwarden
sudo cp -a web-vault/ /opt/bitwarden/web-vault/
Vào thư mục /opt/bitwarden, chạy kiểm tra thử xem được chưa
cd /opt/bitwarden
sudo ./opt/bitwarden/vaultwarden
Thường sẽ có lỗi do chưa có thư mục data của SQLite (với trường hợp mình sử dụng SQLite làm cơ sở dữ liệu)
Sửa rất đơn giản, tạo thư mục đó
sudo mkdir data
Nếu có lỗi không có thư mục web-fault thì là do chúng ta chưa thực hiện copy thư mục web-fault ở bước trên nhé 😂😂😂🤣🤣🤣😅😅😅.
Tạo cấu hình để Bitwarden chạy cùng hệ thống với. Tạo file bitwarden.service
sudo nano /etc/systemd/system/bitwarden.service
và nhập nội dung sau
[Unit]
Description=Bitwarden
After=nginx.service
[Service]
Type=simple
Restart=always
WorkingDirectory=/opt/bitwarden
ExecStart=/opt/bitwarden/vaultwarden
[Install]
WantedBy=multi-user.target
Kích hoạt và chạy cấu hình này
sudo systemctl enable --now bitwarden.service
sudo systemctl start bitwarden.service
Kiểm tra cấu hình và Bitwarden chạy chưa
systemctl status bitwarden
Hiện ra thế này là được rồi đó.
Cấu hình Nginx để truy cập thông qua Tên miền, tạo file /etc/nginx/sites-availabes/bitwarden.conf (tên tùy chọn) và nhập vào nội dung sau
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
server_name domain.com;
listen 443 ssl http2;
# listen [::]:443 ssl http2;
access_log /var/log/nginx/bitwarden.access.log;
error_log /var/log/nginx/bitwarden.error.log;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
include /etc/nginx/include/diffie-hellman;
client_max_body_size 20M;
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff|)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public, mustrevalidate, proxy-revalidate";
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_buffering off;
}
location / {
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_buffering off;
}
}
Trong đó domain là Tên miền của bạn.
Ánh xạ, kiểm tra không lỗi thì khởi động lại Nginx
sudo ln -s /etc/nginx/sites-availabes/bitwarden.conf /etc/nginx/sites-enabled/bitwarden.conf
sudo systemctl nginx -t
sudo systemctl restart nginx
Truy cập thông qua Tên miền, tiến hành đăng ký và sử dụng Bitwarden thôi.
Kiểm tra lại mức độ sử dụng của Bitwarden, còn có hơn 30Mb, so với hơn 1Gb thì quả là khác biệt 😙😙😙.