Cách cài đặt Vaultwarden với Docker trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Vaultwarden là một cổng không chính thức của máy chủ Bitwarden được viết bằng ngôn ngữ Rust. Nó tương thích với các máy khách Bitwarden chính thức và ít tốn tài nguyên hơn Bitwarden. Nó triển khai hầu hết các tính năng của Bitwarden ngoại trừ một số ít. Nó sử dụng API Bitwarden để cung cấp các tính năng như hỗ trợ tổ chức, tệp đính kèm, trình xác thực, U2F, Yubikey, hỗ trợ Duo và hỗ trợ cho các dịch vụ bí danh email.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập bản sao Vaultwarden của mình trên máy chủ Ubuntu 22.04.

Điều kiện tiên quyết​


  • Máy chủ chạy Ubuntu 22.04.

  • Người dùng không phải root có quyền sudo.

  • Tường lửa đơn giản (UFW) được bật và đang chạy.

  • Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ như vaultwarden.example.com.

  • Mọi thứ đều được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade

Bước 1 - Cấu hình Tường lửa​

Trước khi cài đặt bất kỳ gói nào, bước đầu tiên là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy nội dung tương tự như sau.
Mã:
Trạng thái: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
Cho phép cổng HTTP và HTTPs.
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Kiểm tra lại trạng thái để xác nhận.
Mã:
$ sudo ufw statusTrạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443 ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443 (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt Docker và Docker Compose​

Thêm khóa GPG chính thức của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
Chạy lệnh sau để thêm kho lưu trữ Docker.
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật hệ thống để bao gồm kho lưu trữ của Docker.
Mã:
$ sudo apt update
Cài đặt Docker.
Mã:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Hướng dẫn này sẽ sử dụng plugin Docker Compose v2 thay vì tệp nhị phân cũ hơn. Do đó, lệnh chạy nó đã thay đổi từ docker-compose thành docker compose và điều này được phản ánh ở đây.

Docker chạy với các đặc quyền nâng cao nên bạn sẽ cần sử dụng sudo thường xuyên để chạy lệnh. Tùy chọn tốt hơn là thêm tài khoản người dùng Linux của bạn vào nhóm người dùng docker.
Mã:
$ sudo usermod -aG docker ${USER}
Biến ${USER} sẽ chọn tài khoản hệ thống hiện đang đăng nhập. Nếu bạn không đăng nhập bằng người dùng mà bạn muốn cấp đặc quyền, hãy thay thế ${USER} bằng tên người dùng.

Để đăng ký tư cách thành viên nhóm mới, hãy đăng xuất khỏi máy chủ và đăng nhập lại hoặc sử dụng lệnh sau. Bạn sẽ được nhắc nhập mật khẩu của người dùng.
Mã:
$ su - ${USER}

Bước 3 - Tạo tệp Docker Compose cho Vaultwarden​

Tạo thư mục mới cho Vaultwarden.
Mã:
$ mkdir vaultwarden
Chuyển đến thư mục.
Mã:
$ cd vaultwarden
Tạo tệp Docker compose và mở tệp đó để chỉnh sửa.
Mã:
$ nano docker-compose.yml
Dán mã sau vào đó. Thay thế các biến DOMAINEMAIL bằng các giá trị thích hợp.
Mã:
version: '3'services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always environment: WEBSOCKET_ENABLED: "true" # Bật thông báo WebSocket. DOMAIN: "https://vaultwarden.example.com" SMTP_HOST: "" SMTP_FROM: "" SMTP_PORT: "587" SMTP_SECURITY: "starttls" SMTP_USERNAME: "" SMTP_PASSWORD: "
" volumes: - ./vw-data:/data caddy: image: caddy:2 container_name: caddy restart: always ports: - 80:80 # Cần thiết cho thử thách ACME HTTP-01. - 443:443 volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy-config:/config - ./caddy-data:/data environment: DOMAIN: "https://vaultwarden.example.com" # Tên miền của bạn. EMAIL: "[emailprotected]" # Địa chỉ email sử dụng để đăng ký ACME. LOG_FILE: "/data/access.log"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Chúng tôi đang thiết lập Vaultwarden và máy chủ web Caddy trong một tệp Docker compose duy nhất. Chúng ta hãy xem xét tất cả các tùy chọn được xác định trong tệp.
  • image đề cập đến vị trí của hình ảnh Docker của Vaultwarden và Caddy trên Dockerhub.
  • container_name cho phép bạn áp dụng nhãn cho vùng chứa docker của mình, để sử dụng khi tham chiếu đến vùng chứa trong mạng Docker.
  • restart chỉ định chính sách khởi động lại cho vùng chứa. Đặt thành always có nghĩa là vùng chứa nếu thoát sẽ tự động được khởi động lại.
  • environment phần thiết lập các biến theo yêu cầu của Vaultwarden và Caddy. Nếu cổng SMTP của dịch vụ của bạn là 587, hãy đặt giá trị của biến SMTP_SECURITY thành starttls và nếu cổng SMTP của dịch vụ của bạn là 465, hãy đặt giá trị của biến SMTP_SECURITY thành force_tls. Biến miền là cần thiết để xác minh email hoạt động. Chúng tôi đã bật Web socket để thông báo hoạt động.
  • volume xác định các thư mục có trên máy chủ để lưu trữ dữ liệu liên tục. Thư mục /vw-data trên máy chủ được ánh xạ tới thư mục /data trong vùng chứa lưu trữ tất cả dữ liệu mà Vaultwarden yêu cầu. Tương tự như vậy, vị trí của tệp Caddy, cấu hình Caddy và dữ liệu của caddy được ánh xạ tới các thư mục tương ứng trong vùng chứa. Docker sẽ tự động tạo các thư mục tương ứng trên máy chủ được cấu hình trong phần Volume.
  • ports yêu cầu container xuất bản các cổng hoặc một phạm vi cổng tới máy chủ.

Bước 4 - Cấu hình Vaultwarden bổ sung​

Vô hiệu hóa Đăng ký​

Nếu bạn không muốn cài đặt Vaultwarden của mình mở để đăng ký người dùng, bạn có thể vô hiệu hóa nó bằng cách thêm biến sau vào phần environment của tệp Docker compose.
Mã:
environment: WEBSOCKET_ENABLED: "true" # Bật thông báo WebSocket. SIGNUPS_ALLOWED: "false" ....

Tắt lời mời​

Ngay cả sau khi tắt đăng ký người dùng, người dùng hiện tại là thành viên của tổ chức vẫn có thể mời người dùng mới. Để dừng điều đó, hãy sử dụng biến sau.
Mã:
INVITATIONS_ALLOWED: "false"

Tắt gợi ý mật khẩu​

Vaultwarden gửi gợi ý mật khẩu qua email và cũng hiển thị chúng trên trang gợi ý mật khẩu. Để tắt tính năng này, hãy đặt giá trị của biến SHOW_PASSWORD_HINT.
Mã:
SHOW_PASSWORD_HINT: "false"

Tắt Bảng điều khiển quản trị​

Vaultwarden lưu trữ các tệp tĩnh cho giao diện web của mình. Bạn có thể vô hiệu hóa chức năng này bằng cách đặt biến sau thành false.
Mã:
WEB_VAULT_ENABLED: "false"
Bạn có thể ghi đè các tệp Vault bằng cách cung cấp các tệp tĩnh của mình để lưu trữ bằng cách sử dụng cấu hình trong phần volumes trong tệp Compose.
Mã:
volumes: - ./vw-data:/data - /path/to/static/files_directory:/web-vault

Nhật ký Vaultwarden​

Nhật ký Vaultwarden chỉ ghi vào đầu ra chuẩn. Bạn có thể cấu hình để ghi vào một tệp.
Mã:
LOG_FILE: "/data/vaultwarden.log"
Để giảm số lượng thông báo nhật ký, bạn có thể đặt mức nhật ký thành warn đồng thời đặt biến EXTENDED_LOGGING thành true.
Mã:
LOG_LEVEL: "warn"EXTENDED_LOGGING: "true"

Bước 5 - Tạo tệp Caddy cho Vaultwarden​

Bây giờ chúng ta đã cấu hình Vaultwarden, hãy tạo một tệp caddy cho Vaultwarden và mở tệp đó để chỉnh sửa.
Mã:
$ nano Caddyfile
Dán mã sau vào đó.
Mã:
{$DOMAIN}:443 { log { level INFO output file {$LOG_FILE} { roll_size 10MB roll_keep 10 } } # Sử dụng thử thách ACME HTTP-01 để lấy chứng chỉ cho miền đã cấu hình. tls {$EMAIL} # Cài đặt này có thể có sự cố về khả năng tương thích với một số trình duyệt # (ví dụ: tải xuống tệp đính kèm trên Firefox). Hãy thử tắt cài đặt này # nếu bạn gặp sự cố. encode gzip # Kích thước tệp được đặt thành 500MB để hỗ trợ tính năng Gửi của Vaultwarden (Bitwarden). request_body { max_size 500MB } header { # Bật bộ lọc chéo trang (XSS) và yêu cầu trình duyệt chặn các cuộc tấn công được phát hiện X-XSS-Protection "1; mode=block" # Không cho phép hiển thị trang web trong một khung (bảo vệ chống clickjacking) X-Frame-Options "DENY" # Ngăn công cụ tìm kiếm lập chỉ mục (tùy chọn) X-Robots-Tag "none" # Xóa tên máy chủ -Server } # Thông báo được chuyển hướng đến máy chủ WebSocket reverse_proxy /notifications/hub vaultwarden:3012 # Proxy mọi thứ khác cho Rocket reverse_proxy vaultwarden:80 { # Gửi IP từ xa thực sự đến Rocket để vaultwarden có thể đưa thông tin này vào # nhật ký để fail2ban có thể cấm IP chính xác. header_up X-Real-IP {remote_host} }}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 6 - Chạy Vaultwarden​

Khởi động vùng chứa Docker Vaultwarden.
Mã:
$ docker compose up -d
Bạn có thể kiểm tra trạng thái của vùng chứa bằng lệnh sau.
Mã:
$ docker ps
Bạn sẽ nhận được kết quả tương tự.
Mã:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4ad23954f1d5 caddy:2 "caddy run --config …" Khoảng một phút trước Lên Khoảng một phút 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 2019/tcp caddyd55a037850bc vaultwarden/server:latest "/usr/bin/dumb-init …" Khoảng một phút trước Lên Khoảng một phút (khỏe mạnh) 80/tcp, 3012/tcp vaultwarden

Bước 7 - Sử dụng Vaultwarden với Bitwarden Client​

Mở URL https://vaultwarden.example.com trong trình duyệt của bạn.



Bước đầu tiên là tạo một tài khoản. Nhấp vào nút Tạo tài khoản để tiếp tục.



Nhập thông tin tài khoản của bạn và nhấp vào nút Gửi để tiếp tục. Bạn sẽ được chuyển hướng đến trang đăng nhập. Nhập thông tin tài khoản của bạn để đăng nhập.



Bạn cần mở khóa đầy đủ các tính năng của tài khoản bằng cách xác minh email của mình. Nhấp vào nút Gửi email để gửi email xác minh.

Bạn sẽ nhận được email sau. Nhấp vào liên kết để xác minh địa chỉ email của bạn.



Bây giờ chúng ta đã có tài khoản Vaultwarden, đã đến lúc sử dụng nó với máy khách Bitwarden. Đối với hướng dẫn của chúng tôi, chúng tôi đang sử dụng tiện ích mở rộng Chrome. Cài đặt tiện ích mở rộng này bằng cách tải xuống từ trang web của Bitwarden.

Nhấp vào biểu tượng tiện ích mở rộng để hiển thị màn hình đăng nhập Vaultwarden.



Nhấp vào biểu tượng bánh răng ở góc trên bên trái của cửa sổ bật lên để hiển thị trang cài đặt nâng cao. Điền https://vaultwarden.example.com làm URL máy chủ.



Nhấp vào nút Lưu để áp dụng cài đặt. Đăng nhập bằng thông tin đăng nhập Vaultwarden của bạn để đăng nhập vào ứng dụng.



Sau khi đăng nhập, bạn sẽ được đưa đến trang ứng dụng và có thể bắt đầu sử dụng Bitwarden.


Bước 8 - Sao lưu Vaultwarden​

Vaultwarden lưu trữ dữ liệu của mình trong cơ sở dữ liệu SQLite. Một cách là chỉ cần sao chép tệp .sqlite3 từ thư mục /vw-data. Nhưng đây không phải là giải pháp được khuyến nghị vì cơ sở dữ liệu sẽ không ở trạng thái nhất quán do Vaultwarden đang chạy. Để sao lưu theo cách đáng tin cậy, chúng ta sẽ sử dụng lệnh sao lưu SQLite.

Cài đặt gói sqlite3.
Mã:
$ sudo apt install sqlite3
Tạo thư mục để sao lưu.
Mã:
$ mkdir ~/vw-backups
Xóa quyền đọc, ghi và thực thi khỏi nhóm và những người dùng khác.
Mã:
$ chmod go-rwx ~/vw-backups
Tạo tệp dịch vụ sao lưu Vaultwarden và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/systemd/system/vaultwarden-backup.service
Dán mã sau vào đó.
Mã:
[Unit]Mô tả=sao lưu sqlite vaultwarden cơ sở dữ liệu[Dịch vụ]Loại=oneshotWorkingDirectory=/home//vw-backupsExecStart=/usr/bin/env bash -c 'sqlite3 /home//vaultwarden/vw-data/db.sqlite3 ".backup backup-$(date -Is | tr : _).sqlite3"'ExecStart=/usr/bin/find . -type f -mtime +30 -name 'backup*' -delete
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động dịch vụ để kiểm tra dịch vụ và sao lưu.
Mã:
$ sudo systemctl start vaultwarden-backup.service
Kiểm tra xem tệp sao lưu có tồn tại không.
Mã:
$ ls -l ~/vw-backups
Bạn sẽ thấy danh sách tệp sao lưu.
Mã:
tổng cộng 192-rw-r--r-- 1 root root 196608 31 tháng 7 17:25 backup-2022-07-31T17_25_04+00_00.sqlite3
Để tạo lịch trình sao lưu thường xuyên, hãy tạo và mở tệp đơn vị bộ đếm thời gian systemd. Bạn cần đảm bảo tên tệp khớp với tên tệp của dịch vụ.
Mã:
$ sudo nano /etc/systemd/system/vaultwarden-backup.timer
Dán mã sau vào đó.
Mã:
[Unit]Description=schedule vaultwarden backups[Timer]OnCalendar=04:00Persistent=true[Install]WantedBy=multi-user.target
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Lệnh này sẽ lên lịch sao lưu vào lúc 4 giờ sáng hàng ngày.

Khởi động và kích hoạt dịch vụ bộ đếm thời gian.
Mã:
$ sudo systemctl enable vaultwarden-backup.timer$ sudo systemctl start vaultwarden-backup.timer
Kiểm tra trạng thái của dịch vụ bộ đếm thời gian.
Mã:
$ systemctl status vaultwarden-backup.timer? vaultwarden-backup.timer - lên lịch sao lưu vaultwarden Đã tải: đã tải (/etc/systemd/system/vaultwarden-backup.timer; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chờ) kể từ CN 2022-07-31 17:27:03 UTC; 7 giây trước Kích hoạt: Thứ Hai 2022-08-01 04:00:00 UTC; còn 10 giờ Kích hoạt: ? vaultwarden-backup.service31 tháng 7 17:27:03 vaultwarden systemd[1]: Đã bắt đầu lên lịch sao lưu vaultwarden.
Điều này chỉ sao lưu dữ liệu. Bạn nên đảm bảo tệp cơ sở dữ liệu được sao lưu thường xuyên ngoài trang web hoặc vào hệ thống cục bộ của bạn. Để sao lưu những thứ còn lại, bạn có thể thực hiện bằng cách sao chép mọi thứ trong thư mục ~/vaultwarden/vw-data. Trong số những thứ còn lại, thư mục attachments, tệp config.json và các tệp rsa_key* phải được sao lưu. Các thư mục sends và icon_cache là tùy chọn và nên được sao lưu nếu chúng đủ lớn và bạn cần chúng. Chúng hoàn toàn là tùy chọn.

Bước 9 - Khôi phục Vaultwarden​

Để khôi phục dữ liệu Vaultwarden, hãy đảm bảo rằng container đã dừng. Bạn có thể thay thế mọi thứ trong thư mục dữ liệu bằng phiên bản đã sao lưu của nó. Khi khôi phục bản sao lưu SQLite, hãy đảm bảo xóa tệp db.sqlite3-wal hiện có để tránh hỏng.

Bước 10 - Cập nhật Vaultwarden​

Nâng cấp Vaultwarden là một bước đơn giản. Chuyển sang thư mục soạn thảo Docker của Vaultwarden.
Mã:
$ cd ~/vaultwarden
Tiếp theo, hãy dừng và xóa container hiện có. Tuy nhiên, dữ liệu của bạn sẽ được giữ lại.
Mã:
$ docker compose down --remove-orphans
Kéo phiên bản mới nhất của hình ảnh docker Gitlab.
Mã:
$ docker compose pull
Khởi động lại các container.
Mã:
$ docker compose up -d
Cài đặt Vaultwarden của bạn đã được cập nhật và khởi động lại.

Kết luận​

Như vậy là kết thúc hướng dẫn của chúng tôi về cách cài đặt và cấu hình Vaultwarden trên máy chủ Ubuntu 22.04. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên