Tạm biệt phí thuê bao: Triển khai Mealie trên Docker cho căn bếp gia đình chuyên nghiệp

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

Tại sao nên ngừng sử dụng các ứng dụng công thức nấu ăn dựa trên đám mây?

Hầu hết các bộ sưu tập công thức nấu ăn kỹ thuật số hiện nay là một mớ hỗn độn các dấu trang trình duyệt bị hỏng và những gói thuê bao 5 USD mỗi tháng cho các ứng dụng như NYT Cooking hay Paprika. Mặc dù các nền tảng này tiện lợi, nhưng chúng khóa dữ liệu của bạn bên trong một hệ sinh thái đóng. Nếu một dịch vụ thay đổi giá cả hoặc đóng cửa, những ghi chú ẩm thực được bạn chăm chút suốt nhiều năm có thể biến mất chỉ sau một đêm.

Mealie thay đổi cuộc chơi này. Đây là một trình quản lý tự lưu trữ (self-hosted) tốc độ cao, ưu tiên quyền sở hữu và hiệu suất. Tính năng nổi bật nhất của nó là bộ công cụ trích xuất (scraper) mạnh mẽ, có thể biến một URL lộn xộn thành một công thức nấu ăn sạch sẽ trong chưa đầy hai giây. Đối với những người đam mê HomeLab, đây là một công cụ nhẹ nhưng cực kỳ mạnh mẽ. Tôi đã chạy Mealie trong môi trường gia đình thực tế hơn 14 tháng và nó vẫn hoạt động ổn định qua hàng chục bản cập nhật.

Nhìn nhận thực tế: Đám mây và Tự lưu trữ

Việc lựa chọn giữa gói thuê bao và một phiên bản tự lưu trữ phụ thuộc vào việc ai là người sở hữu cơ sở dữ liệu. Dưới đây là bảng so sánh thực tế giữa chúng.

  • Dịch vụ đám mây (Whisk, Paprika, NYT): Cung cấp khả năng thiết lập không tốn sức nhưng thường ẩn các tính năng cơ bản sau các bức tường phí (paywall). Quyền riêng tư thường không được ưu tiên và việc xuất hơn 500 công thức nấu ăn thường là một cơn ác mộng về kỹ thuật.
  • Tự lưu trữ (Mealie): Bạn sở hữu từng byte dữ liệu. Bạn có một giao diện không quảng cáo, một REST API đầy đủ để tự động hóa và một lịch lập kế hoạch bữa ăn chuyên dụng. “Chi phí” duy nhất là 15 phút để cấu hình container.

Ưu và nhược điểm

Không có phần mềm nào là hoàn hảo. Sau khi sử dụng Mealie như công cụ nhà bếp chính trong một năm, đây là đánh giá trung thực của tôi về những điểm nó tỏa sáng và những điểm còn hạn chế.

Ưu điểm

  • Bộ trích xuất: Được xây dựng trên thư viện Python recipe-scrapers, nó xử lý các trang web như AllRecipes hoặc Serious Eats với độ chính xác gần như tuyệt đối. Nó tự động lấy nguyên liệu, các bước thực hiện và hình ảnh độ phân giải cao.
  • Tích hợp API: Mọi thứ trên giao diện người dùng (UI) đều có thể truy cập thông qua API. Tôi sử dụng tính năng này để hiển thị thực đơn bữa tối nay trên một máy tính bảng gắn tường thông qua Home Assistant.
  • Cộng tác gia đình: Bạn có thể tạo các tài khoản riêng biệt cho các thành viên trong gia đình. Mọi người đều có thể đóng góp vào danh sách mua sắm chung hoặc chỉnh sửa kế hoạch bữa ăn hàng tuần trong thời gian thực.
  • Hỗ trợ PWA: Mặc dù thiếu ứng dụng gốc trên App Store, nhưng ứng dụng web lũy tiến (PWA) của nó rất tuyệt vời. Nó mang lại cảm giác như một ứng dụng bản địa trên cả iOS và Android.

Nhược điểm

  • Khó khăn ban đầu: Bạn cần có kiến thức cơ bản về Docker Compose. Đây không phải là kiểu cài đặt “một cú nhấp chuột” từ cửa hàng ứng dụng.
  • Lập kế hoạch tài nguyên: Mặc dù có thể chạy trên SQLite, nhưng backend PostgreSQL sẽ tốt hơn cho sự ổn định lâu dài. Điều này đòi hỏi phải quản lý thêm một container thứ hai.

Kiến trúc vận hành ổn định

Hãy bỏ qua phần “khởi đầu nhanh” với SQLite nếu bạn dự định lưu trữ công thức nấu ăn của mình trong nhiều năm. SQLite có thể gặp khó khăn với các tác vụ ghi đồng thời khi nhiều thành viên trong gia đình cập nhật danh sách cùng lúc. Thay vào đó, tôi khuyên bạn nên sử dụng một stack Docker Compose với backend PostgreSQL để đảm bảo tính toàn vẹn dữ liệu tốt hơn.

Để truy cập từ bên ngoài, hãy đặt Mealie phía sau một reverse proxy như Nginx Proxy Manager hoặc Cloudflare Tunnels. Điều này đảm bảo bạn có thể mở danh sách đi chợ tại cửa hàng thông qua kết nối HTTPS an toàn mà không cần tiết lộ trực tiếp IP nhà mình.

Hướng dẫn triển khai: Mealie với PostgreSQL

Hướng dẫn này giả định bạn đã cài đặt sẵn Docker và Docker Compose trên máy chủ. Chúng ta sẽ sử dụng image Mealie hợp nhất để đơn giản hóa quá trình.

1. Tổ chức tệp tin

Bắt đầu bằng cách tạo một thư mục để chứa các tệp cấu hình và cơ sở dữ liệu. Việc sắp xếp ngăn nắp ngay từ đầu sẽ giúp tránh rắc rối khi di chuyển dữ liệu sau này.

mkdir -p ~/homelab/mealie/data
cd ~/homelab/mealie

2. Cấu hình Docker Compose

Tạo một tệp docker-compose.yml. Cấu hình này giới hạn bộ nhớ ở mức 1GB, mức này là quá đủ cho Mealie trong khi vẫn ngăn nó tiêu thụ toàn bộ tài nguyên máy chủ trong quá trình xử lý hình ảnh.

services:
  mealie:
    image: ghcr.io/mealie-recipes/mealie:latest
    container_name: mealie
    restart: always
    ports:
      - "9000:9000"
    deploy:
      resources:
        limits:
          memory: 1000M
    volumes:
      - ./data:/app/data
    environment:
      - ALLOW_SIGNUP=true
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Ho_Chi_Minh
      - MAX_WORKERS=1
      - WEB_CONCURRENCY=1
      - DB_ENGINE=sqlite # Chuyển sang postgres cho môi trường thực tế
      - SMTP_HOST=smtp.gmail.com
      - SMTP_PORT=587
      - [email protected]
      - [email protected]
      - SMTP_PASSWORD=mat-khau-ung-dung-cua-ban
      - SMTP_TLS=True

3. Khởi chạy dịch vụ

Khởi chạy các container bằng một lệnh duy nhất:

docker compose up -d

Truy cập bảng điều khiển tại http://your-server-ip:9000. Sử dụng thông tin đăng nhập mặc định sau cho lần đăng nhập đầu tiên:

Mẹo bảo mật: Hãy thay đổi các thông tin đăng nhập này ngay lập tức. Truy cập vào phần cài đặt Profile để đặt mật khẩu duy nhất và cập nhật địa chỉ email của bạn.

Mẹo chuyên nghiệp để quản lý lâu dài

Chạy container mới chỉ là bước khởi đầu. Để biến đây thành một dịch vụ đáng tin cậy cho gia đình, hãy thực hiện các bước bảo trì sau.

Chiến lược sao lưu thông minh

Mealie tích hợp sẵn công cụ sao lưu trong menu cài đặt. Hãy lập lịch sao lưu hàng ngày vào thư mục /app/data/backups. Vì chúng ta đã ánh xạ volume data vào máy chủ, bạn có thể sử dụng các công cụ như Restic hoặc Rclone để đồng bộ các bản sao lưu đó lên NAS hoặc S3 hàng đêm.

Tinh chỉnh bộ trích xuất

Không phải trang web nào cũng tuân theo cấu trúc dữ liệu công thức tiêu chuẩn. Khi dữ liệu trích xuất bị lộn xộn, hãy sử dụng trình chỉnh sửa Markdown tích hợp để làm sạch các hướng dẫn. Mealie cực kỳ linh hoạt; nếu một trang web liên tục bị lỗi trích xuất, các nhà phát triển rất tích cực trên GitHub và thường xuyên đẩy các bản cập nhật cho logic trích xuất.

Quản lý lưu trữ

Các ảnh món ăn độ phân giải cao sẽ chiếm dụng không gian đáng kể. Nếu bạn có hơn 1.000 công thức, thư mục data/media có thể tăng lên vài gigabyte. Hãy theo dõi dung lượng đĩa và cân nhắc sử dụng một phân vùng SSD riêng nếu HomeLab của bạn chạy trên ổ đĩa khởi động nhỏ. Giới hạn bộ nhớ 1GB trong tệp Compose đảm bảo rằng các tác vụ thay đổi kích thước hình ảnh sẽ không làm treo các container khác.

Lời kết

Chuyển từ một ứng dụng trả phí sang Mealie là một trong những dự án HomeLab xứng đáng nhất mà bạn có thể thực hiện. Nó mang lại giá trị thiết thực hàng ngày cho mọi người trong nhà. Bằng cách sử dụng Docker Compose, bạn đảm quả thư viện công thức nấu ăn của mình có thể di chuyển linh hoạt, riêng tư và hoàn toàn nằm dưới quyền kiểm soát của bạn. Nó đã thay thế hoàn toàn đống dấu trang và các ứng dụng trả phí của tôi, giúp quy trình làm bếp của tôi nhanh hơn và ngăn nắp hơn.

Share: