Vấn đề với tủ đồ khô hiện đại
Quản lý tủ thực phẩm gia đình thường mang lại cảm giác như đang duy trì một máy chủ cũ kỹ (legacy server) mà không có bất kỳ hệ thống giám sát nào. Chúng ta mua trùng lặp những món đồ đã có sẵn trong tủ, trong khi hộp sữa nằm sâu trong góc tủ lạnh thì hết hạn sử dụng (EOL) mà không có lấy một cảnh báo.
Theo một số ước tính, các hộ gia đình lãng phí gần 30% lượng thực phẩm họ mua. Với tư cách là những kỹ sư, chúng ta ghét sự kém hiệu quả đó. Grocy đóng vai trò như một hệ thống ERP (Enterprise Resource Planning) cho căn bếp của bạn, tương tự như việc triển khai Mealie trên Docker, và chạy nó trên Docker là cách đáng tin cậy nhất để giữ cho nó hoạt động ổn định.
Tôi đã sử dụng thiết lập này trong môi trường thực tế hơn hai năm. Nó đã vượt qua nhiều lần di chuyển phần cứng và nâng cấp phiên bản mà không làm mất bất kỳ dữ liệu nào về kệ gia vị hay kho thực phẩm đông lạnh của tôi.
Triển khai: Bắt đầu và vận hành
Tôi khuyên bạn nên sử dụng image được duy trì bởi Linuxserver.io. Họ xử lý quyền (permissions) và cập nhật sạch sẽ hơn nhiều so với các bản build thông thường. Bạn có thể chạy nó trên hầu hết mọi thiết bị; ngay cả một chiếc Raspberry Pi 4 với 2GB RAM cũng là quá đủ, vì container này thường tiêu thụ ít hơn 150MB bộ nhớ.
Đầu tiên, hãy tạo một thư mục riêng cho stack của bạn:
mkdir -p ~/homelab/grocy && cd ~/homelab/grocy
Tiếp theo, tạo một file docker-compose.yml. Đảm bảo cập nhật các giá trị TZ, PUID, và PGID để phù hợp với môi trường cụ thể của bạn. Bạn có thể tìm thấy ID của mình bằng cách chạy lệnh id $USER trong terminal.
services:
grocy:
image: lscr.io/linuxserver/grocy:latest
container_name: grocy
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- ./config:/config
ports:
- 9283:80
restart: unless-stopped
Khởi chạy container bằng một lệnh duy nhất:
docker-compose up -d
Bây giờ bạn có thể truy cập giao diện tại http://your-server-ip:9283. Thông tin đăng nhập mặc định là admin / admin. Hãy thay đổi chúng ngay lập tức để bảo mật dữ liệu của bạn.
Kiến trúc và lưu trữ dữ liệu bền vững
Grocy là một ứng dụng PHP sử dụng cơ sở dữ liệu SQLite. Điều này giúp toàn bộ hệ thống trở nên linh hoạt và nhanh chóng. Khi chúng ta map volume ./config:/config, chúng ta đảm bảo rằng file grocy.db, hình ảnh sản phẩm và các cài đặt tùy chỉnh vẫn tồn tại ngay cả khi bạn xóa container. Vì nó sử dụng SQLite, I/O của ổ đĩa là điểm nghẽn thực sự duy nhất. Nếu bạn đang chạy ứng dụng này trên thẻ SD, hãy cân nhắc chuyển thư mục config sang ổ SSD để giữ cho giao diện luôn mượt mà.
Thiết lập Reverse Proxy
Đừng mở port 9283 trực tiếp ra internet. Nếu bạn muốn kiểm tra kho hàng khi đang ở siêu thị, hãy sử dụng một reverse proxy hoặc thiết lập VPN riêng bằng cách triển khai Headscale trên Docker. Grocy xử lý các header rất tốt, nhưng bạn phải đảm bảo proxy của mình truyền qua X-Forwarded-Proto. Điều này giúp ngăn lỗi mixed-content khi bạn truy cập dashboard qua HTTPS.
Tự động hóa: Mã vạch và API
Các hệ thống quản lý kho thủ công thường thất bại ngay khi cuộc sống trở nên bận rộn. Để Grocy thực sự hiệu quả trong gia đình, bạn phải tự động hóa việc nhập dữ liệu. API chính là “vũ khí bí mật” ở đây.
Tích hợp di động
Cộng đồng Grocy cung cấp các ứng dụng tuyệt vời cho cả Android và iOS. Chúng biến camera điện thoại của bạn thành một máy quét mã vạch tốc độ cao. Để liên kết chúng, hãy vào mục Manage API Keys trong giao diện web, tạo một key và quét mã QR kết quả bằng điện thoại. Quá trình thiết lập mất chưa đầy 30 giây.
Tra cứu cơ sở dữ liệu bên ngoài
Việc quét mã vạch EAN 13 chữ số sẽ không có tác dụng nếu hệ thống không biết đó là sản phẩm gì. Grocy có thể kết nối với OpenFoodFacts để tự động lấy tên và hình ảnh sản phẩm. Bạn có thể bật tính năng này bằng cách chỉnh sửa file data/config.php bên trong volume config của mình. Tìm các cài đặt API bên ngoài để kích hoạt việc tự động lấy metadata.
Kết hợp với Home Assistant
Nếu bạn đang chạy Home Assistant, đặc biệt là khi đã kết nối thiết bị Zigbee với Home Assistant, tích hợp Grocy sẽ là một bước ngoặt. Tôi sử dụng một chiếc máy tính bảng gắn tường trong bếp để hiển thị danh sách “Sắp hết hạn”. Bạn thậm chí có thể tạo một tự động hóa để nháy đèn trong tủ đồ hoặc tự host Gotify để nhận cảnh báo khi danh sách mua sắm vượt quá năm món.
Chiến lược để thành công lâu dài
Sau khi theo dõi hàng ngàn mặt hàng, tôi đã tìm thấy hai tính năng cụ thể giúp hệ thống luôn hữu dụng.
Sức mạnh của sản phẩm cha
Đừng tạo một mục riêng biệt cho mọi thương hiệu bột mì hoặc mì ống. Hãy tạo một “Sản phẩm cha” tên là “Bột mì trắng” và coi các thương hiệu cụ thể là “Sản phẩm con”. Điều này cho phép bạn thấy rằng mình có tổng cộng 10kg bột mì, bất kể đó là thương hiệu King Arthur hay nhãn hàng riêng của siêu thị.
Theo dõi các món đồ đã mở
Một lọ sốt mayonnaise có thể tươi ngon trong một năm trên kệ nhưng chỉ được 30 ngày sau khi mở nắp. Grocy xử lý việc này một cách hoàn hảo. Khi bạn nhấn “Open” trong giao diện, hệ thống sẽ tự động tính toán lại ngày hết hạn dựa trên cài đặt “Default best before days after opening”. Chỉ riêng tính năng này đã giúp tôi tránh được vài lần bị ngộ độc thực phẩm.
Sao lưu đáng tin cậy
Vì toàn bộ trạng thái được lưu trữ trong một vài file, việc sao lưu rất dễ dàng, nhất là khi bạn đã xây dựng hệ thống sao lưu HomeLab 3-2-1 chuyên nghiệp. Tôi chạy một cron job hàng đêm để nén thư mục config và chuyển nó sang NAS của mình.
# Đoạn mã script sao lưu đơn giản
tar -czf /backups/grocy_$(date +%F).tar.gz ~/homelab/grocy/config
Vượt qua sự mệt mỏi khi nhập liệu
Trở ngại lớn nhất không phải là thiết lập kỹ thuật; đó là việc kiểm kê ban đầu. Đừng cố gắng quét mọi món đồ trong nhà vào ngày đầu tiên. Bạn sẽ bị kiệt sức. Thay vào đó, chỉ cần quét các thực phẩm mới khi bạn dỡ chúng ra. Trong vòng ba tuần, khoảng 90% các mặt hàng thiết yếu của bạn sẽ có trong hệ thống, và việc bảo trì hàng ngày sẽ chỉ mất vài phút.

