Cài đặt Bitwarden-rs không sử dụng Docker

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

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 đó domainTê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 😙😙😙.