SELF HOSTING

PriceBuddy: Ứng dụng self-hosted theo dõi giá sản phẩm tự động

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 Composecá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-desktop

Trê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 --version

Bước 2: Tạo thư mục dự án

Tạo một thư mục riêng cho PriceBuddy:

mkdir pricebuddy
cd pricebuddy

Bướ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.yml

Nế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.yml

Bướ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 .env

Hoặ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 .env

File .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_password

Bước 5: Chạy container

Khởi động PriceBuddy bằng Docker Compose:

docker-compose up -d

Lệ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 ps

Bạ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 minutes

Bước 7: Truy cập ứng dụng

Mở trình duyệt và truy cập:

http://localhost:8080

Thông tin đăng nhập mặc định:

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.log

Container 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 -d

Cơ 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ại

Port 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ì 8080

Sau đó 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: 5432

Cấu hình bộ nhớ cache

Để tăng tốc độ, thêm Redis:

redis:
  image: redis:latest

app:
  environment:
    CACHE_DRIVER: redis
    REDIS_HOST: redis

Hướ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:

  1. Nhấp vào avatar (góc trên cùng bên phải)
  2. Chọn “Settings” → “Change Password”
  3. 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:

  1. Nhấp nút “Add Product” (hoặc biểu tượng + trên bảng điều khiển)
  2. Dán URL sản phẩm từ cửa hàng (ví dụ: Amazon, eBay, Shopee)
  3. 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
  4. 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:

  1. Tìm sản phẩm bạn vừa thêm
  2. Nhấp “Add URL”
  3. Dán URL của sản phẩm từ cửa hàng khác
  4. 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:

  1. Chọn sản phẩm → Nhấp “Settings” hoặc biểu tượng cái bánh xe
  2. 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
  3. 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:

Email

  1. Vào SettingsNotifications
  2. Chọn phương thức: Email
  3. Nhập email của bạn
  4. Cấu hình máy chủ SMTP (hoặc dùng mặc định)

Telegram

  1. Tạo bot trên Telegram:
    • Nhắn @BotFather trên Telegram
    • Nhận bot_token
    • Nhận chat_id của bạn từ @userinfobot
  2. Vào PriceBuddy → Settings → Thêm phương thức Telegram
  3. Dán token và chat_id

Discord Webhook

  1. Tạo webhook trên server Discord:
    • Server Settings → Integrations → Webhooks
    • Tạo webhook mới
    • Copy URL webhook
  2. Vào PriceBuddy → Settings → Thêm Discord
  3. Dán webhook URL

Gotify (tự lưu trữ)

Nếu bạn chạy Gotify riêng:

  1. Vào PriceBuddy → Settings → Gotify
  2. Nhập URL Gotify: https://gotify.yourdomain.com
  3. 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ẻ:

  1. Chọn sản phẩm → Settings
  2. Thêm thẻ: “Điện thoại”, “Gaming”, “Black Friday”, v.v.
  3. 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á:

  1. Mở sản phẩm
  2. Xem biểu đồ “Price History”
  3. Hiển thị: Min, Max, Average giá, cùng với thời gian
  4. 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:

  1. Vào SettingsStores (Admin)
  2. Nhấp “Add Store”
  3. Nhập tên cửa hàng
  4. 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.price hoặc div.product-price)
    • Dán vào PriceBuddy
  5. 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:

  1. Vào Admin Settings (biểu tượng cài đặt)
  2. Scraper SettingsFetch schedule time
  3. Chọn giờ (VD: 02:00 AM)
  4. 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:

  1. Chọn sản phẩm → Biểu tượng thùng rác
  2. 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.sql

Khôi phục:

docker-compose exec db mysql -u pricebuddy -p pricebuddy < backup.sql

Cập nhật PriceBuddy

Để cập nhật lên phiên bản mới:

docker-compose pull
docker-compose up -d

Các vấn đề thường gặp và giải pháp

Vấn đềNguyên nhânGiải pháp
Trang web không tải giáCSS selector saiKiểm tra lại selector bằng DevTools
Thông báo không đếnSMTP hoặc dịch vụ chưa cấu hìnhKiểm tra cài đặt thông báo, test email
Container tắt liên tụcLỗi cơ sở dữ liệuKiểm tra log, đảm bảo database chạy
Giá không cập nhậtLịch trình kiểm tra chưa đếnĐợi hoặc chạy fetch thủ công
RAM caoQuá nhiều sản phẩmGiả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:

  1. Cài đặt Docker
  2. Chạy 5 lệnh từ phần “Bước 1-5” ở trên
  3. Truy cập http://localhost:8080
  4. 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!

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất
Phản hồi nội tuyến
Xem tất cả bình luận