XCrawler “truyền kì”: Ubuntu, nhiều node, và câu chuyện “setup hoài mệt vl”

July 11, 2022

XCrawler cần gì? (Requirements checklist — nói thẳng cho đỡ quên)

Biết rồi, khỏi giới thiệu lại 😄 Nhưng requirements thì vẫn nên chốt checklist để khỏi thiếu.

Web server

Apache hay Nginx đều được.

Tạm thời không quá quan trọng vì GUI chưa implement nhiều.

PHP + extensions/services liên quan

Ngoài các extension cơ bản ra, thường cần:

  • MongoDB driver/extension
  • Redis
  • Memcached

Anh em dùng script multi-PHP thì tham khảo ở đây:

https://github.com/jooservices/bash/blob/main/services/multi-php.sh

Database

  • MongoDB
  • MariaDB

Supervisor + Horizon: phần “vận hành” cho workers

  • Supervisor: giữ process sống (auto-restart, start/stop/reload)
  • Horizon: quản lý queue/workers, scale worker count theo nhu cầu

Nói đơn giản: muốn worker chạy ổn, đừng trông chờ “mở screen/tmux” — dùng Supervisor cho đàng hoàng.

Mô hình scale cơ bản: n nodes crawling + 1 node UI

Tạm thời chưa implement proxy (hoặc proxy rotation chưa đủ ngon), nên scale kiểu thực dụng:

  • n servers/nodes tương ứng n public IPs để crawling → giảm risk bị block
  • 1 server/node cho web UI

Vấn đề đau đầu nhất: setup n nodes… lặp đi lặp lại, mất thời gian

Nếu làm thủ công đúng bài:

  1. Create VirtualBox
  2. Install Ubuntu
  3. Install required packages
  4. Deploy XCrawler

…thì thật sự mất công.

Và câu hỏi tự nhiên bật ra:

“Có cách nào 1 command line làm hết mọi thứ không?”

Take it easy. Khoan đã. Đừng mơ xa kiểu “bấm 1 phát là xong” ngay. Mình break down bước đầu tiên trước:

Tạo VM bằng command line & install Ubuntu.

VirtualBox CLI: tạo VM bằng command line (VBoxManage)

Cơ bản VirtualBox có CLI chính chủ là VBoxManage, điều khiển được gần như toàn bộ thứ GUI làm được (và hơn).  

Repo script mình dùng để build VM ở đây:

https://github.com/jooservices/ubuntu-autoinstall-virtualbox/blob/master/sources/build_vm

Lấy path chứa VM (Default Machine Folder)

Mình lấy path kiểu:

vmpath=$(VBoxManage list systemproperties | grep -i "default machine folder:" \
  | cut -b 24- | awk '{gsub(/^ +| +$/,"")}1')

VBoxManage có hẳn nhóm lệnh để list/inspect config và quản lý VM.  

Attach ISO để boot cài Ubuntu

Muốn install OS thì phải gắn ISO vào DVD drive. VirtualBox có lệnh storageattach cho đúng mục đích này, và hỗ trợ –type dvddrive + –medium <iso>.  

Ví dụ (giống flow mình đang làm):

VBoxManage storageattach "${vmname}" --storagectl "${idecontrollername}" \
  --port 0 --device 0 --type dvddrive --medium "${build_dir}/${vmname_slug}.iso"

Sau đó startvm là chạy thôi (CLI có đủ).  

Pages: 1 2 3