Ngừng “thuê” dữ liệu tài chính: Tự host Firefly III trên Docker

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Sự hỗn loạn của quản lý tài chính cá nhân hiện đại

Tôi từng theo dõi tiền bạc của mình bằng một mớ hỗn độn gồm ba ứng dụng ngân hàng, một cổng thông tin thẻ tín dụng và một file Google Sheet mà tôi đã không cập nhật từ năm 2022. Mỗi tháng, tôi lại nhìn chằm chằm vào số dư của mình và tự hỏi khoản chi tiêu “tạp nham” 400 USD đó đã đi đâu. Hầu hết mọi người tìm đến các ứng dụng SaaS bóng bẩy như YNAB hoặc Mint để giải quyết vấn đề này. Tuy nhiên, các nền tảng này thu phí rất cao—thường là 15 USD một tháng hoặc 180 USD một năm—chỉ để cho bạn xem dữ liệu của chính mình.

Quản lý ngân sách gia đình còn khó khăn hơn. Bạn cần một hệ thống có thể theo dõi các khoản chi tiêu chung và nhiều tài khoản mà không làm rò rỉ thói quen chi tiêu của mình cho các nhà quảng cáo. Lịch sử nợ nần và mức thu nhập của bạn là mỏ vàng cho các nhà môi giới dữ liệu. Việc lưu giữ thông tin đó trên phần cứng của riêng bạn không chỉ là sở thích của dân công nghệ; đó là quyền riêng tư tài chính cơ bản.

Tại sao bảng tính và ứng dụng SaaS thường thất bại

Hầu hết các nỗ lực lập ngân sách đều thất bại do sự phân mảnh dữ liệu. Khi thông tin của bạn nằm rải rác ở các ứng dụng khác nhau, bạn sẽ mất đi cái nhìn tổng thể. Bảng tính mang lại sự linh hoạt, nhưng chúng rất dễ bị lỗi công thức. Một lần gõ sai phím trong một ô có thể làm hỏng dữ liệu theo dõi của cả một năm.

Các giải pháp SaaS cung cấp khả năng tự động hóa nhưng đi kèm với một cái bẫy lớn: bạn phải giao thông tin đăng nhập ngân hàng của mình cho các bên tổng hợp thứ ba. Nếu máy chủ của họ bị xâm nhập, toàn bộ đời sống tài chính của bạn sẽ bị phơi bày. Hơn nữa, nhiều ứng dụng trong số này đang chuyển sang mô hình đăng ký thuê bao gắt gao. Cuối cùng, bạn phải trả phí hàng tháng chỉ để xem mình đang mất bao nhiêu tiền cho các loại phí hàng tháng khác.

So sánh các lựa chọn: Bảng tính vs. SaaS vs. Self-Hosted

Trước khi chuyển dữ liệu tài chính sang HomeLab của mình, tôi đã cân nhắc ba con đường phổ biến nhất:

  • Excel/Google Sheets: Miễn phí và linh hoạt. Tuy nhiên, nó thiếu một API tử tế và trở thành cơn ác mộng khi bạn có hơn 100 giao dịch mỗi tháng.
  • SaaS (YNAB/PocketGuard): Có ứng dụng di động tuyệt vời và đồng bộ hóa tự động. Nhược điểm là chi phí trên 15 USD/tháng và thực tế là bạn không sở hữu dữ liệu của mình—bạn chỉ đang thuê quyền truy cập vào nó.
  • Firefly III (Self-Hosted): Đây là một hệ thống kế toán kép chuyên nghiệp. Nó là mã nguồn mở và miễn phí. Nó cung cấp REST API, theo dõi giao dịch định kỳ và báo cáo chuyên sâu không thua kém gì các phần mềm kế toán doanh nghiệp.

Nếu bạn coi trọng chủ quyền dữ liệu, Firefly III là lựa chọn hiển nhiên. Nó lấp đầy khoảng trống giữa một bảng tính đơn giản và một bộ phần mềm kế toán phức tạp.

Cài đặt: Firefly III trên Docker

Chạy Firefly III qua Docker Compose là phương pháp đáng tin cậy nhất mà tôi tìm thấy. Nó tách biệt logic ứng dụng khỏi cơ sở dữ liệu. Sự cô lập này giúp việc cập nhật và sao lưu dễ dàng hơn nhiều. Bạn sẽ không phải lo lắng về việc xung đột các phiên bản PHP trên máy chủ của mình.

Hệ thống dựa trên hai phần chính: web engine và cơ sở dữ liệu như MariaDB hoặc PostgreSQL. Tôi cũng khuyên bạn nên tạo một mạng Docker riêng để cách ly lưu lượng truy cập này với các container khác.

1. Chuẩn bị môi trường

Bắt đầu bằng cách tạo một thư mục riêng biệt. Việc sắp xếp các file cấu hình ngay bây giờ sẽ tiết kiệm thời gian cho các lần di chuyển trong tương lai.

mkdir ~/firefly-iii && cd ~/firefly-iii
touch docker-compose.yml .env

2. Cấu hình Docker Compose

Cấu hình này sử dụng MariaDB và một volume riêng biệt để lưu trữ dữ liệu bền vững. Nó đảm bảo dữ liệu của bạn vẫn tồn tại ngay cả khi bạn xóa hoặc tạo lại các container.

version: '3.8'

services:
  app:
    image: fireflyiii/core:latest
    restart: always
    volumes:
      - firefly_iii_upload:/var/www/html/storage/upload
    env_file: .env
    networks:
      - firefly_net
    ports:
      - 8080:8080
    depends_on:
      - db

  db:
    image: mariadb:10
    hostname: firefly_iii_db
    restart: always
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=yes
      - MYSQL_USER=firefly
      - MYSQL_PASSWORD=mat_khau_bao_mat_cua_ban
      - MYSQL_DATABASE=firefly
    networks:
      - firefly_net
    volumes:
      - firefly_iii_db:/var/lib/mysql

networks:
  firefly_net:
    driver: bridge

volumes:
  firefly_iii_upload:
  firefly_iii_db:

3. Cấu hình file .env

File .env đóng vai trò là bộ não cho quá trình thiết lập của bạn. Firefly III yêu cầu một APP_KEY duy nhất gồm 32 ký tự để mã hóa dữ liệu. Bạn có thể tạo mã này bằng công cụ trực tuyến hoặc qua trình tạo dòng lệnh.

# Cấu hình cốt lõi
APP_KEY=ThayTheBangChuoiNgauNhien32KyTu
APP_URL=http://localhost:8080
TRUSTED_PROXIES=**

# Cấu hình cơ sở dữ liệu
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=mat_khau_bao_mat_cua_ban

# Cấu hình email
MAIL_MAILER=log

Mẹo thực tế để cài đặt trơn tru

Sau khi chạy docker-compose up -d, bảng điều khiển sẽ hoạt động trên cổng 8080. Tuy nhiên, việc cài đặt thô mới chỉ là bắt đầu. Để biến đây thành một hệ thống chuyên nghiệp thực sự, hãy làm theo các bước sau:

Bảo mật kết nối của bạn

Đừng bao giờ để lộ cổng 8080 trực tiếp ra internet. Hãy sử dụng một reverse proxy như Nginx Proxy Manager hoặc Traefik với chứng chỉ SSL. Dữ liệu tài chính rất nhạy cảm; gửi nó qua HTTP không mã hóa là một rủi ro lớn. Nếu bạn chỉ cần truy cập từ bên ngoài nhà, hãy sử dụng VPN như Tailscale hoặc WireGuard thay vì mở cổng.

Hiểu về kế toán kép (Double-Entry Bookkeeping)

Firefly III không chỉ là một danh sách các khoản chi tiêu. Nó tuân theo các quy tắc kế toán kép. Khi bạn mua một ly cà phê 5 USD, tiền sẽ chuyển từ “Asset account” (như tài khoản thanh toán tại ngân hàng) sang “Expense account” (Starbucks). Ban đầu bạn sẽ cảm thấy hơi tẻ nhạt. Tuy nhiên, phương pháp này đảm bảo giá trị tài sản ròng của bạn chính xác đến từng xu.

Tự động hóa những phần nhàm chán

Nhập liệu thủ công là lý do khiến hầu hết mọi người bỏ cuộc sau hai tuần. Firefly III có một công cụ đi kèm gọi là Data Importer. Hãy sử dụng nó để tải lên các file CSV từ ngân hàng hoặc kết nối với các API như GoCardless (trước đây là Nordigen) để tự động lấy các giao dịch. Việc này mất khoảng 20 phút để cấu hình nhưng giúp tiết kiệm hàng giờ gõ phím mỗi tháng.

Chiến lược bảo mật và sao lưu

Sao lưu là bắt buộc khi bạn tự làm ngân hàng cho chính mình. Hãy thiết lập một cron job đơn giản để xuất cơ sở dữ liệu MariaDB hàng đêm. Di chuyển các bản sao lưu này đến một vị trí ngoại vi được mã hóa, chẳng hạn như S3 bucket hoặc NAS thứ hai. Nếu ổ SSD của bạn bị hỏng, bạn chắc chắn không muốn mất 5 năm lịch sử tài chính.

# Lệnh dump cơ sở dữ liệu nhanh
docker exec firefly-iii_db_1 /usr/bin/mysqldump -u firefly --password=mat_khau_bao_mat_cua_ban firefly > backup_$(date +%F).sql

Ngay sau lần đăng nhập đầu tiên, hãy bật Xác thực hai yếu tố (2FA) trong phần cài đặt. Điều này thêm một lớp bảo vệ quan trọng chống lại bất kỳ ai có thể đoán được mật khẩu của bạn.

Giành lại chủ quyền tài chính của bạn

Chuyển từ một ứng dụng đám mây sang Firefly III mang lại cảm giác như đang giành lại quyền kiểm soát ngôi nhà của mình. Tôi không còn lo lắng về việc một công ty tăng giá hoặc bán dữ liệu của mình cho các công ty bảo hiểm. Có thể mất một chút công sức để phân loại 100 giao dịch đầu tiên, nhưng chiều sâu của những thông tin thu được là hoàn toàn xứng đáng. Tương lai tài chính của gia đình bạn quá quan trọng để giao phó vào tay một tập đoàn.

Share: