kiến thức Hướng dẫn selfhost Bitwarden miễn phí bằng Fly.io

hoanganh.pro

Senior Member
Trước đây mình có làm theo bài viết: Hướng dẫn selfhost Bitwarden miễn phí bằng Railway của bác @Fioren. Tuy nhiên bên Railway hiện tại chỉ cho chúng ta 5$ miễn phí và số tiền này sẽ bị trừ đi hàng ngày. Như tài khoản của mình mỗi ngày bị trừ khoảng 0.03$, như vậy 5/0.03=166 ngày.
Do vậy mình có Google các dịch vụ khác để đăng ký miễn phí làm phương án thay thế cho bên Railway thì có tìm được bên Fly.oi hiện cũng miễn phí 5$/tháng.
Lưu ý: Khi đăng ký Fly cần yêu cầu thẻ Credit Card, họ cho chúng ta 5$/tháng và sẽ trừ tiền nếu sử dụng quá mức đó, và chính sách của họ có thể thay đổi theo thời gian. Các bạn nên tìm hiểu đọc thêm tại đây: Fly App Pricing (https://fly.io/docs/about/pricing/)

Mình có tìm được 1 trang bằng tiếng Anh hướng dẫn cách đăng ký, bạn nào rành tiếng Anh có thể làm theo bài viết này: Hosting Vaultwarden on fly.io for free - aarol.dev (https://aarol.dev/posts/vault-self-host).
***
XEM THÊM:
Hướng dẫn self-hosted vaultwarden (bitwarden) trên VPS của thím @ntth
Hướng dẫn Self-Hosted VaultWarden với Máy ảo EC2 trên AWS Cloud
Kinh nghiệm sử dụng VPN của thím
@vincvn
***
Trong bài viết này mình sẽ trình bày từng bước cụ thể, cho một người chưa biết gì (như mình) cũng có thể làm được nhé!
Mình thấy cách trình bày bài viết của bác Fioren rất khoa học dễ hiểu vậy nên mình xin phép được trình bày tương tự bác Fioren.​

A/ Giới Thiệu:

Bitwarden là dịch vụ quản lí, sync mật khẩu. Video này sẽ hướng dẫn cách tự tạo "server" để chạy Vaultwarden. Vaultwarden là một nhánh của Bitwarden nó được viết lại hoàn toàn bằng ngôn ngữ Rust nhằm mục đích chạy nhanh hơn so với bản Bitwarden gốc. Và nó không khác gì Bitwarden cũng là mã nguồn mở và thêm các tính năng pro của Bitwarden. Mục đích của việc sử dụng Vaultwarden mà không dùng Bitwarden, đơn giản vì Bitwarden quá nặng không phù hợp để sử dụng các dịch vụ miễn phí.

B/ Các bước thực hiện:
1. Tạo tài khoản Fly.io: Truy cập Fly.io để tạo tài khoản
2. Tải PowerShell: Link tải
3. Cài đặt flyctl, mở PowerShell và gõ lệnh (các lệnh sau bước này đều thực hiện trên PowerShell):
Code:
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
4. Đăng nhập. Trên PowerShell gõ lệnh:
Code:
fly auth login
5. Tiếp tục gõ lệnh sau để khởi chạy ứng dụng:
Code:
fly launch
6. Chỉnh sửa file fly.toml, chọn chỉnh bằng Notepad.
Code:
.\fly.toml
Copy đoạn mã trong link sau vào Notepad:​
Code:
app = "buildertv" #Mục “buildertv” này thay bằng tên của bạn
kill_signal = "SIGINT"
kill_timeout = 5
primary_region = "sin" #Thay đổi theo vùng bạn đã chọn
processes = []

[env]
  SIGNUPS_ALLOWED = "true" # Mục này nếu bạn không muốn cho web đăng ký nữa thì chọn false

[build]
  image = "vaultwarden/server:latest"

[mounts]
  source = "vw_data"
  destination = "/data"

[experimental]
  auto_rollback = true

[[services]]
  http_checks = []
  internal_port = 80
  processes = ["app"]
  protocol = "tcp"
  script_checks = []
  [services.concurrency]
    hard_limit = 25
    soft_limit = 20
    type = "connections"

  [[services.ports]]
    force_https = true
    handlers = ["http"]
    port = 80

  [[services.ports]]
    handlers = ["tls", "http"]
    port = 443

  [[services.tcp_checks]]
    grace_period = "1s"
    interval = "15s"
    restart_limit = 0
    timeout = "2s"
7. Tạo 1 phân vùng data 1GB
Code:
fly volumes create vw_data --size 1
7a. ADMIN_TOKEN
Code:
fly secrets set ADMIN_TOKEN='YOUR_TOKEN_HERE'
8. Triển khai deploy
Code:
fly deploy
9. Tạo tài khoản trên host của bạn
10. Export dữ liệu từ Bitwarden® server (nếu có)
11. Import dữ liệu vào tài khoản mới trên host của bạn
12. Đăng nhập trên tiện ích Chrome và điện thoại

Video hướng dẫn:

Link web để thuận tiện cho copy mã code:
---
 
Last edited:
Vì đây là dịch vụ miễn phí, cho nên không biết là nó sẽ thay đổi chính sách hay không, thường xuyên export data bitwarden để backup nhé.
---
Sao lưu dữ liệu


Hình ảnh Docker vaultwarden lưu trữ dữ liệu trong thư mục /data. Hãy SSH vào ứng dụng:

NGINX:
$ fly ssh console
Connecting to 7b36:2bcb:e402:4de9:dbb2:2... complete
# ls
bin   dev             home   media  proc  sbin      sys  var
boot  etc             lib    mnt    root  srv       tmp  vaultwarden
data  healthcheck.sh  lib64  opt    run   start.sh  usr  web-vault
# ls /data
attachments  db.sqlite3-shm  icon_cache  rsa_key.pem      sends
db.sqlite3   db.sqlite3-wal  lost+found  rsa_key.pub.pem  tmp

Thư mục dữ liệu chứa cơ sở dữ liệu SQLite và các tệp quan trọng khác. db.sqlite3 chứa tất cả dữ liệu người dùng và được mã hóa hoàn toàn. Để tự động hóa quá trình sao lưu, chúng ta dùng tập lệnh PowerShell bên dưới.

Tạo một tệp mới backup.ps1 trong cùng thư mục với tệp fly.toml:

NGINX:
$DATE = get-date -Format "yyyy-MM-dd"
$INSTALL_SQLITE = "apt-get update && apt-get install sqlite3 -y"
$BACKUP_DB = "sqlite3 /data/db.sqlite3 '.backup /data/db.bak'"
$CREATE_ARCHIVE = "tar -czf $DATE.tar.gz data"
fly ssh console -q -C "bash -c ""$INSTALL_SQLITE && $BACKUP_DB && $CREATE_ARCHIVE"" "
fly sftp get "$DATE.tar.gz"

Đoạn mã trên là một script PowerShell được sử dụng để sao lưu dữ liệu từ một ứng dụng đã được triển khai trên fly.io

Có thể chạy tập lệnh bằng Powershell:

NGINX:
.\backup.ps1

Bây giờ, một tệp trông giống như 2023-04-21.tar.gz sẽ xuất hiện trong thư mục.

Tệp này rất nhỏ, khoảng 2 MB cho vault của tôi. Thậm chí kích thước đó còn tăng cao do thư mục icon_cache chứa các biểu tượng cho mọi trang web trong vault.

Cách đơn giản nhất để sao lưu cơ sở dữ liệu sqlite là cp nó. Tuy nhiên, nếu cơ sở dữ liệu bị sửa đổi trong quá trình sao lưu, nó có thể dẫn đến hỏng hóc. Lệnh .backup của sqlite3 sẽ ngăn chặn điều này bằng cách khóa cơ sở dữ liệu trong suốt thời gian sao chép, chỉ mất một phần giây. Việc khôi phục cơ sở dữ liệu sẽ đơn giản như chạy:

NGINX:
rm db.sqlite3 && mv db.bak db.sqlite3

Nếu bạn không muốn chạy lệnh theo cách thủ công, bạn có thể đăng ký lịch để thực thi lệnh tự động.

Ví dụ
Để lên lịch chạy tệp "C:\\Users\hoang\hoangfly\backup.ps1" mỗi ngày vào lúc 9 giờ sáng bằng PowerShell, bạn có thể làm theo các bước sau:

1. Mở PowerShell.
2. Nhập các lệnh sau:

Code:
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Users\hoang\hoangfly\backup.ps1"
$Trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -Action $Action -Trigger $Trigger -TaskName "BackupTask" -Description "Daily backup at 9 AM"

Trong đó:
  • New-ScheduledTaskAction tạo một hành động mới cho công việc theo lịch trình. Trong trường hợp này, hành động là chạy tệp PowerShell "C:\\Users\hoang\hoangfly\backup.ps1"
  • New-ScheduledTaskTrigger tạo một kích hoạt mới cho công việc theo lịch trình. Trong trường hợp này, kích hoạt là mỗi ngày vào lúc 9 giờ sáng.
  • Register-ScheduledTask đăng ký công việc theo lịch trình với hành động và kích hoạt đã được định nghĩa.

Lưu ý: Bạn cần quyền quản trị để đăng ký một công việc theo lịch trình. Nếu bạn gặp lỗi, hãy thử mở PowerShell với quyền quản trị (Run as Administrator) và thử lại.
 
Last edited:
cách này sao vào được tài khoản admin bitwarden vậy fen?
tưởng nó sài docker thì tài khoản signup đầu tiên luôn là admin mà mod ?
qXOiZRa.gif
 
sao thử làm theo mà bị lỗi sau sửa file fly.toml nhỉ.View attachment 2149636
chủ thớt ghi code sai ấy fen, fen vào bài tiếng anh, copy y chang là đc, tại do thiếu spacing các dòng
@hoanganh.pro sửa lại đi bác
 
chủ thớt ghi code sai ấy fen, fen vào bài tiếng anh, copy y chang là đc, tại do thiếu spacing các dòng
@hoanganh.pro sửa lại đi bác
e làm theo bài tiếng anh thì ok rồi ạ
 
Back
Top