Bạn có bao giờ bỏ lỡ một deal tốt vì không nhận ra giá đã giảm? Việc theo dõi giá sản phẩm thủ công trên nhiều cửa hàng trực tuyến là tốn thời gian, mệt mỏi và dễ bỏ sót. Giải pháp là PriceBuddy – một ứng dụng self-hosted mã nguồn mở cho phép bạn theo dõi giá tự động trên hàng ngàn sản phẩm và nhận thông báo tức thì khi giá khớp với tiêu chí của bạn.
PriceBuddy được phát triển bởi cộng đồng mã nguồn mở tại GitHub và cung cấp sức mạnh của một dịch vụ theo dõi giá chuyên nghiệp, nhưng hoàn toàn miễn phí, có thể tùy chỉnh cao và dữ liệu của bạn luôn nằm dưới quyền kiểm soát. Bài viết này sẽ hướng dẫn bạn cách cài đặt PriceBuddy self-hosted bằng Docker, cấu hình và sử dụng hiệu quả.

Tại sao chọn PriceBuddy self-hosted?
Trước khi đi vào chi tiết kỹ thuật, hãy hiểu rõ lợi ích của việc self-hosted PriceBuddy so với các dịch vụ cloud:
Lợi ích chính:
- Miễn phí hoàn toàn: Không có phí đăng ký hàng tháng, không quảng cáo, không giới hạn sản phẩm
- Dữ liệu riêng tư: Tất cả dữ liệu được lưu trữ trên máy chủ của bạn, không được chia sẻ với bên thứ ba
- Tùy chỉnh cao: Sửa đổi mã nguồn để phù hợp với nhu cầu cụ thể của bạn
- Độc lập: Không phụ thuộc vào dịch vụ bên ngoài, đảm bảo ứng dụng hoạt động 24/7 nếu máy chủ của bạn bật
- Multi-user: Chia sẻ với người khác, mỗi người có tài khoản và cài đặt riêng
- Thông báo linh hoạt: Hỗ trợ email, webhook, Telegram, Discord, Gotify và nhiều kênh khác thông qua Apprise

Các tính năng chính của PriceBuddy
PriceBuddy không chỉ đơn giản theo dõi giá – nó cung cấp một bộ công cụ mạnh mẽ cho nhà phân tích giá:
Theo dõi giá đa cửa hàng
Thêm cùng một sản phẩm từ nhiều cửa hàng (Amazon, eBay, Shopee, Tiki, v.v.) và so sánh giá theo thời gian. PriceBuddy tự động phát hiện cửa hàng phổ biến, nhưng bạn cũng có thể thêm cửa hàng tùy chỉnh bằng CSS selector, regex hoặc JSONPath.
Lịch sử giá chi tiết
Xem biểu đồ giá theo thời gian với thông tin min, max và giá trung bình. Hữu ích để xác định xu hướng giá và quyết định thời điểm tốt nhất để mua.
Thông báo thông minh
Đặt thông báo dựa trên:
- Giá cụ thể: Thông báo khi giá ≤ số tiền bạn chỉ định
- Phần trăm giảm: Thông báo khi giá giảm X% so với giá ban đầu
Hỗ trợ trang web động (JavaScript)
Một số trang web sử dụng JavaScript để tải nội dung động. PriceBuddy sử dụng trình duyệt headless để render JavaScript, đảm bảo bạn có thể theo dõi các sản phẩm trên bất kỳ trang nào.
Tổ chức bằng thẻ
Phân loại sản phẩm bằng thẻ (ví dụ: “Điện thoại”, “Laptop”, “Gaming”) để dễ dàng lọc trên bảng điều khiển.
Giao diện hiện đại
Hỗ trợ chế độ sáng/tối, responsive trên mobile, thiết kế sạch sẽ và dễ sử dụng.
Tích hợp SearXNG
Nếu bạn chạy một instance SearXNG riêng, PriceBuddy có thể tích hợp để giúp bạn tìm kiếm và thêm sản phẩm trực tiếp trong ứng dụng.
Yêu cầu hệ thống
Để chạy PriceBuddy self-hosted, bạn cần:
Phần cứng tối thiểu:
- CPU: 1 lõi (2 lõi khuyến nghị)
- RAM: 512 MB (1 GB khuyến nghị)
- Bộ nhớ: 5-10 GB (phụ thuộc số lượng sản phẩm theo dõi)
Phần mềm bắt buộc:
- Docker (khuyến nghị) hoặc Docker Compose (đơn giản nhất)
- Hoặc: Node.js, PHP/Laravel, MySQL/PostgreSQL (cài đặt thủ công)
Kết nối:
- Kết nối Internet ổn định
- Cho phép truy cập cơ sở dữ liệu từ container (nếu dùng Docker)
Hướng dẫn cài đặt PriceBuddy Self-Hosted bằng Docker
Phương pháp sử dụng Docker Compose là cách nhanh nhất và dễ nhất để khởi động PriceBuddy.
Bước 1: Chuẩn bị môi trường
Đầu tiên, hãy chắc chắn bạn đã cài đặt Docker và Docker Compose. Trên Mac, bạn có thể dùng:
brew install docker
# hoặc tải Docker Desktop từ https://www.docker.com/products/docker-desktopTrên Ubuntu bạn có thể xem bài hướng dẫn đầy đủ này: Hướng dẫn cài đặt Docker, Docker Compose trên Ubuntu
Kiểm tra cài đặt:
docker --version
docker-compose --versionBước 2: Tạo thư mục dự án
Tạo một thư mục riêng cho PriceBuddy:
mkdir pricebuddy
cd pricebuddyBước 3: Tải Docker Compose file
Tải file docker-compose.yml từ repository chính thức:
wget https://raw.githubusercontent.com/jez500/pricebuddy/main/docker-compose.ymlNếu bạn dùng Mac hoặc wget không khả dụng, dùng curl:
curl -o docker-compose.yml https://raw.githubusercontent.com/jez500/pricebuddy/main/docker-compose.ymlBước 4: Tạo file .env
PriceBuddy yêu cầu file .env để cấu hình. Tạo file trống bên cạnh docker-compose.yml:
touch .envHoặc nếu bạn muốn cấu hình chi tiết, hãy xem .env.example từ repository:
curl -o .env.example https://raw.githubusercontent.com/jez500/pricebuddy/main/.env.example
# Sau đó copy và chỉnh sửa theo nhu cầu
cp .env.example .envFile .env mẫu có thể chứa:
APP_ENV=production
APP_DEBUG=false
APP_KEY=
APP_NAME=PriceBuddy
DATABASE_DRIVER=mysql
DATABASE_HOST=db
DATABASE_PORT=3306
DATABASE_NAME=pricebuddy
DATABASE_USER=pricebuddy
DATABASE_PASSWORD=your_secure_passwordBước 5: Chạy container
Khởi động PriceBuddy bằng Docker Compose:
docker-compose up -dLệnh này sẽ:
- Tải image Docker từ Docker Hub
- Tạo các container cho ứng dụng và cơ sở dữ liệu
- Chạy ở chế độ nền (
-d)
Chờ khoảng 30-60 giây để tất cả dịch vụ khởi động.
Bước 6: Xác minh cài đặt
Kiểm tra trạng thái container:
docker-compose psBạn sẽ thấy output tương tự:
NAME COMMAND STATUS
pricebuddy-app-1 docker-php-entrypoint Up 2 minutes
pricebuddy-db-1 docker-entrypoint.sh Up 2 minutesBước 7: Truy cập ứng dụng
Mở trình duyệt và truy cập:
http://localhost:8080Thông tin đăng nhập mặc định:
- Email:
[email protected] - Mật khẩu:
admin
QUAN TRỌNG: Đổi mật khẩu mặc định ngay sau khi đăng nhập!

Xử lý lỗi phổ biến
Lỗi 500 – Internal Server Error
Nguyên nhân: File .env bị thiếu hoặc cấu hình sai.
Giải pháp:
# Đảm bảo file .env tồn tại
touch .env
# Xem log để tìm lỗi chi tiết
docker-compose logs app
# Kiểm tra cơ sở dữ liệu
docker-compose exec app cat /app/storage/logs/laravel.logContainer không khởi động
Giải pháp:
# Xem chi tiết lỗi
docker-compose logs
# Tái khởi động tất cả
docker-compose restart
# Xoá và tạo lại
docker-compose down
docker-compose up -dCơ sở dữ liệu không kết nối
Giải pháp:
# Đảm bảo cơ sở dữ liệu đã sẵn sàng
docker-compose exec db mysql -u pricebuddy -p<password> -e "SELECT 1"
# Nếu cần reset cơ sở dữ liệu
docker-compose down -v # Xoá volume
docker-compose up -d # Tạo lạiPort 8080 đã được sử dụng
Nếu port 8080 đã bị chiếm, sửa file docker-compose.yml:
ports:
- "9000:80" # Dùng port 9000 thay vì 8080Sau đó restart: docker-compose up -d
Cấu hình nâng cao (Docker Compose)
Sử dụng Reverse Proxy (Nginx)
Nếu bạn chạy Nginx phía trước, hãy đặt:
APP_URL=https://pricebuddy.yourdomain.com
ASSET_URL=https://pricebuddy.yourdomain.com
TRUSTED_PROXIES=*Sử dụng PostgreSQL thay vì MySQL
Sửa docker-compose.yml:
environment:
DATABASE_DRIVER: pgsql
DATABASE_HOST: db
DATABASE_PORT: 5432Cấu hình bộ nhớ cache
Để tăng tốc độ, thêm Redis:
redis:
image: redis:latest
app:
environment:
CACHE_DRIVER: redis
REDIS_HOST: redisHướng dẫn sử dụng PriceBuddy
Sau khi cài đặt xong, hãy bắt đầu theo dõi giá sản phẩm.
1. Đăng nhập và thay đổi mật khẩu
Truy cập http://localhost:8080 và đăng nhập bằng tài khoản mặc định. Ngay lập tức, hãy thay đổi mật khẩu:
- Nhấp vào avatar (góc trên cùng bên phải)
- Chọn “Settings” → “Change Password”
- Nhập mật khẩu mới và lưu
2. Thêm sản phẩm mới
Để theo dõi một sản phẩm:
- Nhấp nút “Add Product” (hoặc biểu tượng + trên bảng điều khiển)
- Dán URL sản phẩm từ cửa hàng (ví dụ: Amazon, eBay, Shopee)
- PriceBuddy sẽ tự động:
- Tải hình ảnh sản phẩm
- Lấy tên sản phẩm
- Quét giá hiện tại
- Nhấp “Save”
Ví dụ:
- Amazon:
https://www.amazon.com/Apple-AirPods-Max-Midnight-MQDA3/dp/B0CDMNDG7Z - Shopee:
https://shopee.vn/... - eBay:
https://www.ebay.com/itm/...
3. So sánh giá từ nhiều cửa hàng
Để theo dõi cùng sản phẩm từ nhiều nơi:
- Tìm sản phẩm bạn vừa thêm
- Nhấp “Add URL”
- Dán URL của sản phẩm từ cửa hàng khác
- Lưu
Ví dụ: Theo dõi cùng một chiếc laptop trên Amazon, Tiki, Lazada, và B2X.
4. Cấu hình thông báo
Để nhận thông báo khi giá phù hợp:
- Chọn sản phẩm → Nhấp “Settings” hoặc biểu tượng cái bánh xe
- Dưới mục “Notifications”, chọn:
- Notify Price: Thông báo khi giá ≤ số tiền bạn chỉ định
- Notify Percent: Thông báo khi giá giảm X% so với giá ban đầu
- Chọn phương thức thông báo (xem bên dưới)
Ví dụ cài đặt:
- Sản phẩm: Apple AirPods Max (giá hiện tại: 5,900,000 VND)
- Notify Price: 4,500,000 VND (mục tiêu)
- Phương thức: Email
5. Cấu hình phương thức thông báo
PriceBuddy hỗ trợ nhiều kênh thông báo thông qua Apprise:
- Vào Settings → Notifications
- Chọn phương thức: Email
- Nhập email của bạn
- Cấu hình máy chủ SMTP (hoặc dùng mặc định)
Telegram
- Tạo bot trên Telegram:
- Nhắn
@BotFathertrên Telegram - Nhận
bot_token - Nhận
chat_idcủa bạn từ@userinfobot
- Nhắn
- Vào PriceBuddy → Settings → Thêm phương thức Telegram
- Dán token và chat_id
Discord Webhook
- Tạo webhook trên server Discord:
- Server Settings → Integrations → Webhooks
- Tạo webhook mới
- Copy URL webhook
- Vào PriceBuddy → Settings → Thêm Discord
- Dán webhook URL
Gotify (tự lưu trữ)
Nếu bạn chạy Gotify riêng:
- Vào PriceBuddy → Settings → Gotify
- Nhập URL Gotify:
https://gotify.yourdomain.com - Nhập Token
Các phương thức khác
Apprise hỗ trợ 80+ dịch vụ bao gồm: Slack, Pushbullet, Ntfy, Mattermost, v.v.
6. Sử dụng thẻ (Tags) để tổ chức
Tổ chức sản phẩm bằng thẻ:
- Chọn sản phẩm → Settings
- Thêm thẻ: “Điện thoại”, “Gaming”, “Black Friday”, v.v.
- Trên bảng điều khiển, bạn có thể lọc theo thẻ
7. Xem lịch sử giá
Để xem xu hướng giá:
- Mở sản phẩm
- Xem biểu đồ “Price History”
- Hiển thị: Min, Max, Average giá, cùng với thời gian
- Giúp bạn quyết định thời điểm mua tốt nhất
8. Thêm cửa hàng tùy chỉnh
Nếu cửa hàng của bạn chưa được hỗ trợ, hãy thêm thủ công:
- Vào Settings → Stores (Admin)
- Nhấp “Add Store”
- Nhập tên cửa hàng
- Cấu hình CSS Selector để lấy giá:
- Mở sản phẩm trên trang web
- Chuột phải vào phần tử giá → Inspect
- Sao chép selector (ví dụ:
span.pricehoặcdiv.product-price) - Dán vào PriceBuddy
- Lưu
Ví dụ CSS Selectors phổ biến:
- Amazon:
span.a-price - Shopee:
div.shopee-price__current - eBay:
span.BOLD
Ví dụ thực tế: Theo dõi iPhone
Hãy xem một ví dụ từng bước:
Mục tiêu: Theo dõi giá iPhone 15 Pro trên Amazon, Tiki, và Lazada. Nhận thông báo khi giá ≤ 20 triệu VND.
Bước 1: Thêm sản phẩm từ Amazon
- URL:
https://www.amazon.com.vn/Apple-iPhone-15-Pro-Max/s?k=iPhone+15+Pro - Lưu
Bước 2: Thêm cùng sản phẩm từ Tiki
- Mở sản phẩm trên Tiki
- Dán URL vào “Add URL”
- Lưu
Bước 3: Thêm từ Lazada
- Lặp lại bước tương tự
Bước 4: Cấu hình thông báo
- Chọn sản phẩm → Settings
- Notify Price: 20,000,000 VND
- Phương thức: Email + Telegram
- Lưu
Bước 5: Đợi
- PriceBuddy sẽ kiểm tra giá hàng ngày
- Khi bất kỳ URL nào đạt giá ≤ 20 triệu, bạn sẽ nhận email + tin nhắn Telegram
Tối ưu hóa và bảo trì
Thay đổi thời gian kiểm tra giá
Mặc định, PriceBuddy kiểm tra giá một lần mỗi ngày. Để tùy chỉnh:
- Vào Admin Settings (biểu tượng cài đặt)
- Scraper Settings → Fetch schedule time
- Chọn giờ (VD: 02:00 AM)
- Lưu
Xoá dữ liệu cũ
Để tiết kiệm bộ nhớ, hãy xoá sản phẩm không còn theo dõi:
- Chọn sản phẩm → Biểu tượng thùng rác
- Xác nhận xoá
Backup dữ liệu
Để sao lưu cơ sở dữ liệu:
docker-compose exec db mysqldump -u pricebuddy -p pricebuddy > backup.sqlKhôi phục:
docker-compose exec db mysql -u pricebuddy -p pricebuddy < backup.sqlCập nhật PriceBuddy
Để cập nhật lên phiên bản mới:
docker-compose pull
docker-compose up -dCác vấn đề thường gặp và giải pháp
| Vấn đề | Nguyên nhân | Giải pháp |
|---|---|---|
| Trang web không tải giá | CSS selector sai | Kiểm tra lại selector bằng DevTools |
| Thông báo không đến | SMTP hoặc dịch vụ chưa cấu hình | Kiểm tra cài đặt thông báo, test email |
| Container tắt liên tục | Lỗi cơ sở dữ liệu | Kiểm tra log, đảm bảo database chạy |
| Giá không cập nhật | Lịch trình kiểm tra chưa đến | Đợi hoặc chạy fetch thủ công |
| RAM cao | Quá nhiều sản phẩm | Giảm số lượng, thêm bộ nhớ |
PriceBuddy self-hosted là giải pháp tuyệt vời cho bất kỳ ai muốn theo dõi giá tự động mà không phụ thuộc vào dịch vụ bên ngoài hoặc phí đắt. Với Docker, bạn có thể khởi động hoàn toàn trong vài phút, và sau đó tận hưởng các tính năng mạnh mẽ: theo dõi đa cửa hàng, lịch sử giá, thông báo linh hoạt, và dữ liệu riêng tư 100%.
Dù bạn là một nhà phát triển muốn học Docker và mã nguồn mở, hay một người mua sắm thông minh tìm cách tiết kiệm tiền, PriceBuddy đều là lựa chọn lý tưởng.
Bắt đầu ngay:
- Cài đặt Docker
- Chạy 5 lệnh từ phần “Bước 1-5” ở trên
- Truy cập
http://localhost:8080 - Thêm sản phẩm đầu tiên của bạn
Tham gia cộng đồng: Star repository trên GitHub, báo cáo lỗi, hoặc đóng góp code để giúp PriceBuddy phát triển!








