Bắt đầu
Cài đặt FleetHub trên cPanel, Hostinger hoặc VPS riêng trong dưới 10 phút.
Người dùng & Vai trò
5 vai trò đội xe với phân quyền Spatie — admin, quản lý đội xe, trưởng phòng, kế toán, tài xế.
Tính năng sản phẩm
Xe, tài xế, yêu cầu xe, bàn giao, nhật ký nhiên liệu, TCO, tuân thủ, điểm sức khỏe đội xe và hơn thế nữa.
Tùy biến
Trường tùy chỉnh theo loại xe, thương hiệu, ngôn ngữ và giao diện.
Cài đặt Hostinger
Triển khai từng bước trên gói Single chia sẻ rẻ nhất.
Cài đặt cPanel
Triển khai từng bước trên hosting cPanel — không cần Terminal.
Bảo mật & QR
HTTPS, webhook ký HMAC, nhật ký kiểm toán và quét QR nhanh bằng camera.
Báo cáo & Xuất
7 báo cáo đội xe, xuất Excel + PDF, lọc theo ngày.
Cảnh báo email
Nhắc tuân thủ, bảo trì, yêu cầu xe quá hạn và giấy phép lái xe.
Câu hỏi thường gặp
FleetHub có chạy được trên gói Hostinger Single rẻ nhất không?
Có — FleetHub tương thích hoàn toàn với Hostinger Single (~$2.99/tháng). Gói Single có PHP 8.3, MySQL, Cron Jobs và SSL miễn phí. Không cần SSH, Composer hay dòng lệnh. Xem mục Cài đặt Hostinger.
Tôi có cần kỹ năng kỹ thuật để cài đặt không?
Không. Trình cài đặt web xử lý mọi thứ: kiểm tra yêu cầu, cơ sở dữ liệu, migration và tạo tài khoản admin. Chỉ cần upload file, truy cập /install và làm theo hướng dẫn.
Email theo lịch (cảnh báo tuân thủ/bảo trì) hoạt động thế nào?
FleetHub dùng Laravel scheduler. Bạn chỉ cần cấu hình một cron job chạy mỗi phút; Laravel tự chạy từng tác vụ đúng giờ. Trên cPanel: Advanced → Cron Jobs. Trên Hostinger: hPanel → Advanced → Cron Jobs. Nếu host không có cron, dùng Cron URL trong app với cron-job.org.
Hỗ trợ những phương pháp khấu hao nào?
Ba phương pháp: Đường thẳng, Số dư giảm dần và Đơn vị sản xuất (theo km đồng hồ). Giá trị xe cập nhật hàng tháng và đưa vào bảng TCO.
Máy quét QR có hoạt động trên điện thoại không?
Có — tài xế và quản lý quét mã QR xe bằng camera trình duyệt qua html5-qrcode. Thao tác quét nhanh (nhiên liệu, đồng hồ, sự cố) cần đăng nhập. Yêu cầu HTTPS.
Tôi có thể thêm trường riêng mà không cần code không?
Có. Admin → Trường tùy chỉnh cho phép thêm thuộc tính không giới hạn, gắn theo loại xe, đánh dấu bắt buộc và sắp xếp kéo-thả.
FleetHub hỗ trợ bao nhiêu ngôn ngữ?
11 ngôn ngữ: Tiếng Anh, Tiếng Việt, Tây Ban Nha, Pháp, Đức, Trung, Nhật, Bồ Đào Nha (BR), Nga, Ả Rập (RTL) và Hindi. Quản trị bản dịch tại Administration → Translations.
FleetHub có cài được trên hosting cPanel chia sẻ không?
Có — FleetHub chạy trên hosting cPanel chia sẻ với PHP 8.2+, MySQL và Cron Jobs. Không cần Composer hay Node.js trên server. Xem mục Cài đặt cPanel.
Làm sao đổi thương hiệu FleetHub (trang đăng nhập, tiêu đề tab & màu sắc)?
FleetHub có thể đổi thương hiệu hoàn toàn từ admin — không cần sửa code hay npm run build. Logo đăng nhập, footer, badge và tiêu đề tab theo Cài đặt → Branding → App Name. Tab Appearance cho phép tùy chỉnh màu sáng/tối.
auth.login_subtitle theo ngôn ngữ → tùy chỉnh màu tại Cài đặt → Appearance.
Tham chiếu nhanh:
| Mục | Ví dụ | Cách đổi |
|---|---|---|
| Logo & tên | Đội xe ABC | Cài đặt → Branding → App Name |
| Phụ đề đăng nhập | Nhập thông tin để truy cập FleetHub | Administration → Translations → auth.login_subtitle |
| Tiêu đề tab trình duyệt | TênApp | Cài đặt → Branding → App Name |
| Màu app | Bảng màu tùy chỉnh | Cài đặt → Appearance |
1. Logo và tên: Đăng nhập admin → Cài đặt → Branding → cập nhật App Name (và upload logo nếu cần) → Lưu.
2. Phụ đề đăng nhập: Sửa auth.login_subtitle trong Administration → Translations hoặc file lang/{locale}/auth.php.
3. Màu app: Cài đặt → Appearance — cấu hình màu riêng cho sáng và tối. Bấm Save appearance để áp dụng.
Tổng quan
FleetHub là hệ thống quản lý tài sản đội xe doanh nghiệp cho xe công ty nội bộ (50–200 xe). Xây dựng bằng Laravel 11, Vue 3 và Tailwind CSS — bao gồm xe, tài xế, yêu cầu xe, bàn giao có sơ đồ hư hỏng, nhật ký nhiên liệu, chi phí, phân tích TCO, theo dõi tuân thủ và điểm sức khỏe đội xe. Không dành cho taxi hay cho thuê xe.
Quét QR nhanh
Quét QR xe để ghi nhiên liệu, cập nhật đồng hồ hoặc báo sự cố — tối ưu mobile cho tài xế.
Bảng TCO
Tổng chi phí sở hữu theo từng xe và toàn đội xe — mua, nhiên liệu, bảo trì, bảo hiểm và hơn nữa.
Bàn giao xe
Bàn giao xuất/nhập với sơ đồ hư hỏng 2D, checklist, ảnh, chữ ký và báo cáo PDF.
Điểm sức khỏe đội xe
Điểm số hàng ngày kèm chi tiết — bảo trì quá hạn, tuân thủ sắp hết hạn, bất thường nhiên liệu.
Theo dõi tuân thủ
Bảo hiểm, đăng kiểm, thuế đường bộ, giấy phép, bằng lái — cảnh báo 30/14/7/1 ngày.
Báo cáo đội xe
7 báo cáo tích hợp, biểu đồ, xuất Excel và PDF.
Yêu cầu máy chủ
- PHP 8.2 trở lên (khuyến nghị 8.3)
- MySQL 5.7+ hoặc MariaDB 10.3+
- Composer 2.x (chỉ cho phát triển local — không bắt buộc trên shared hosting)
- Node.js 18+ và npm 9+ (chỉ để build frontend local)
- Web server: Apache hoặc Nginx
Extension PHP bắt buộc
- OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo
Dung lượng ổ đĩa
Tối thiểu ~200 MB. Dự phòng thêm cho ảnh xe, biên lai nhiên liệu, ảnh bàn giao và tài liệu tuân thủ.
Cài đặt
Tùy chọn A — Trình cài đặt web (Khuyến nghị)
- Upload file dự án lên web server.
- Trỏ document root tới thư mục
public/. - Phân quyền:
storage/vàbootstrap/cache/phải ghi được (chmod 775). - Sao chép
.env.examplethành.envvà đặtAPP_KEY(chạyphp artisan key:generatenếu có SSH, hoặc xem Cài đặt cPanel → Bước 5). - Truy cập
https://yourdomain.com/installtrên trình duyệt. - Làm theo wizard — Yêu cầu → Cơ sở dữ liệu → Migrate → Tài khoản Admin → Hoàn tất. Chọn Include demo data để nạp dữ liệu mẫu (xem Người dùng & Vai trò).
Tùy chọn B — Cài đặt CLI
# 1. Cài dependency
composer install --no-dev --optimize-autoloader
npm install
npm run build
# 2. Cấu hình môi trường
cp .env.example .env
php artisan key:generate
# 3. Sửa .env để đặt thông tin DB
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD
# 4. Tạo bảng và seed dữ liệu ban đầu
php artisan migrate --seed
# 5. Tạo symlink storage cho upload
php artisan storage:link
# 6. Cache cấu hình cho production
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 7. Đánh dấu đã cài đặt
echo "Installed" > storage/installed.lock
public/. Apache dùng .htaccess có sẵn. Nginx xem hướng dẫn triển khai Laravel.
Wizard Bước 2 — Cấu hình cơ sở dữ liệu
Khi wizard chạy đến Bước 2, bạn cần nhập thông tin kết nối MySQL của cơ sở dữ liệu đã tạo trong bảng điều khiển hosting. Database phải tồn tại sẵn (có thể trống — bước tiếp theo sẽ tạo các bảng).
| Trường | Mặc định / Ví dụ | Ghi chú |
|---|---|---|
| Host | 127.0.0.1 | Đúng cho 99% shared hosting (Hostinger, cPanel, Plesk). Giữ nguyên trừ khi hosting cung cấp hostname MySQL riêng (managed DB như AWS RDS, DigitalOcean Managed Database). |
| Port | 3306 | Cổng MySQL chuẩn. Chỉ đổi nếu provider dùng cổng khác (hiếm). |
| Tên cơ sở dữ liệu | uXXXXXX_fleethub | Tên đầy đủ hiển thị trong bảng điều khiển hosting. Hầu hết shared hosting có prefix theo user ID (ví dụ Hostinger: u287094729_fleethub). |
| Tên đăng nhập | uXXXXXX_fleethub | Tài khoản MySQL có quyền trên database ở trên. KHÔNG dùng root — shared hosting không cho phép. |
| Mật khẩu | (mật khẩu DB của bạn) | Mật khẩu bạn đặt hoặc copy khi tạo user MySQL. Hầu hết hosting chỉ hiện 1 lần lúc tạo — dùng "View / Reset" nếu không lưu lại. |
Tìm thông tin DB ở đâu theo từng loại hosting
- Hostinger: hPanel → Databases → Management → click vào database. Trang chi tiết hiện tên, username và nút "Show password".
- cPanel: cPanel → MySQL Databases. Danh sách database ở trên, danh sách user ở dưới. Dùng "Change Password" nếu cần.
- Plesk: Plesk → Databases → click tên database. Trang chi tiết hiện credentials và có nút reset password.
- DirectAdmin: DirectAdmin → MySQL Management → click vào database. Credentials và reset password nằm ở trang chi tiết.
- DB ngoài / managed: AWS RDS, DigitalOcean Managed Database, v.v. Dùng hostname tùy chỉnh, port (thường là
3306nhưng nên kiểm tra), tên DB, user và password từ cloud console. Đảm bảo IP của server được whitelist trong firewall DB.
Lỗi thường gặp và cách sửa
| Thông báo lỗi | Nguyên nhân và cách sửa |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Sai username hoặc password, hoặc user không có quyền trên database này. Kiểm tra kỹ chính tả (bao gồm cả prefix user trên shared host). Reset password trong bảng điều khiển hosting nếu không chắc. |
SQLSTATE[HY000] [1049] Unknown database | Tên database sai, hoặc bạn chưa tạo database trong bảng điều khiển. Tạo trước, rồi nhập lại tên chính xác (bao gồm prefix). |
SQLSTATE[HY000] [2002] Connection refused | Không kết nối được tới MySQL server. Kiểm tra Host và Port. Trên shared host thử localhost thay vì 127.0.0.1 hoặc ngược lại. Với managed DB, đảm bảo IP server đã được whitelist. |
SQLSTATE[42S02] Base table not found: sessions | Xảy ra khi SESSION_DRIVER=database hoặc CACHE_STORE=database được set trong .env trước khi tables tồn tại. Sửa .env đổi cả 2 sang file, save, rồi reload wizard. Có thể đổi lại database sau khi install xong nếu muốn. |
could not find driver | Thiếu hoặc tắt PHP pdo_mysql extension. Bật trong bảng điều khiển hosting. Trên cPanel: MultiPHP INI Editor → Extensions hoặc Select PHP Version → Extensions. Trên Hostinger: hPanel → Advanced → PHP Configuration → tab PHP Extensions. |
127.0.0.1 và 3306) — giữ nguyên trên shared hosting. Bạn chỉ cần gõ Database name, Username và Password. Bấm Test & Save → để kiểm tra kết nối và sang Bước 3.
Localhost (Phát triển cục bộ)
Hướng dẫn nhanh để chạy FleetHub trên máy tính của bạn cho mục đích kiểm thử hoặc phát triển trước khi triển khai production. Chọn môi trường phù hợp với hệ điều hành của bạn.
Lựa chọn 1 — Laravel Herd (Khuyến nghị, macOS & Windows)
Laravel Herd là môi trường local chính thức từ đội Laravel — miễn phí, native, không Docker. Đi kèm PHP 8.2/8.3/8.4, Nginx, và (trong Herd Pro) MySQL/Redis.
- Tải và cài Laravel Herd từ herd.laravel.com.
- Đặt thư mục dự án FleetHub vào
~/Herd/(macOS) hoặc%USERPROFILE%\Herd\(Windows). Herd tự tạo domain.test— ví dụhttp://fleethub.test. - Mở Herd → Sites và xác nhận phiên bản PHP là 8.2 hoặc 8.3. Chuột phải site → Secure để bật HTTPS (cần cho QR scanner).
- Tạo cơ sở dữ liệu MySQL. Với Herd Pro, vào Services → MySQL → Open in TablePlus. Không có Pro thì cài MySQL Community hoặc dùng SQLite (
DB_CONNECTION=sqlite,touch database/database.sqlite). - Sao chép
.env.examplethành.env, điền thông tin DB, rồi chạyphp artisan key:generateở gốc dự án. - Mở
http://fleethub.test/installtrong trình duyệt và làm theo wizard.
Lựa chọn 2 — XAMPP (Windows, macOS, Linux)
XAMPP gói sẵn Apache, MySQL/MariaDB và PHP. Miễn phí, đa nền tảng. Chú ý chọn phiên bản PHP 8.2 trở lên.
- Tải XAMPP 8.2+ từ apachefriends.org và cài đặt.
- Sao chép dự án FleetHub vào
C:\xampp\htdocs\FleetHub\(Windows) hoặc/Applications/XAMPP/htdocs/FleetHub/(macOS). - Mở XAMPP Control Panel và khởi động Apache và MySQL. Nếu port bị chiếm, vào Config → service.conf để chuyển Apache sang 8080.
- Vào
http://localhost/phpmyadmin→ New → tạo database tênfleethubvới collation utf8mb4. - Trong thư mục dự án: sao chép
.env.examplethành.env, đặtDB_DATABASE=fleethub,DB_USERNAME=root, để trốngDB_PASSWORD(mặc định XAMPP). Chạyphp artisan key:generate. - Truy cập
http://localhost/FleetHub/public/installđể chạy wizard cài đặt.
/public/: tạo virtual host trong C:\xampp\apache\conf\extra\httpd-vhosts.conf trỏ DocumentRoot đến thư mục public/ của dự án, rồi thêm 127.0.0.1 fleethub.local vào file hosts.
Lựa chọn 3 — Laragon (Windows)
Laragon là stack Windows portable thiết kế cho Laravel — tự sinh vhost, URL gọn, MySQL/MariaDB và HeidiSQL đi kèm.
- Tải Laragon Full từ laragon.org và cài đặt.
- Trong Laragon: Menu → PHP → Version — chuyển sang PHP 8.2 hoặc 8.3.
- Sao chép dự án FleetHub vào
C:\laragon\www\FleetHub\. - Bấm Start All. Laragon tự tạo vhost:
http://fleethub.test(trỏ đến thư mụcpublic/). - Mở HeidiSQL (đi kèm) → tạo database
fleethub. Thông tin mặc định: userroot, password để trống. - Sửa
.envvới thông tin DB, chạyphp artisan key:generate, rồi truy cậphttp://fleethub.test/install.
Lựa chọn 4 — Máy chủ PHP có sẵn (không cần web server)
Lựa chọn đơn giản nhất: Laravel đi kèm artisan serve, khởi động một development PHP server. Không cần Apache hay Nginx. Tốt nhất cho test nhanh.
# Cài dependency và cấu hình
cd /path/to/FleetHub
composer install
cp .env.example .env
php artisan key:generate
# Chạy migration và seed dữ liệu ban đầu
php artisan migrate --seed
# Khởi động dev server
php artisan serve
# Rồi truy cập: http://127.0.0.1:8000/install
Các vấn đề thường gặp khi chạy localhost
QR scanner không mở camera trên http://
API camera trình duyệt yêu cầu HTTPS, có một ngoại lệ: http://localhost và http://127.0.0.1 được xem là secure context. Nếu bạn truy cập FleetHub qua IP LAN (ví dụ http://192.168.1.10), camera sẽ bị từ chối. Dùng localhost cho dev, hoặc bật HTTPS qua Herd / mkcert.
Permission denied trên storage (macOS / Linux)
Nếu gặp lỗi khi app ghi log hoặc cache, sửa quyền: chmod -R 775 storage bootstrap/cache. Trên Windows thường không cần.
Port đang được dùng
Nếu port 8000 đã bị app khác chiếm, dùng port khác:
php artisan serve --port=8001
Test email cục bộ
SMTP thật thường không có trên localhost. Hai lựa chọn an toàn: (1) đặt MAIL_MAILER=log trong .env — email được ghi vào storage/logs/laravel.log thay vì gửi; hoặc (2) dùng Mailtrap / MailHog để bắt email gửi đi vào hộp inbox giả.
MAIL_MAILER=log
# Mọi email được ghi vào storage/logs/laravel.log
Frontend assets (Vite / Tailwind)
Frontend Vue/Tailwind của FleetHub đã được build sẵn trong gói. Nếu bạn sửa Vue component hay Tailwind config thì cần Node.js 18+:
npm install
npm run dev # Hot-reload khi phát triển
npm run build # Build production (chạy trước khi deploy)
Triển khai trên Hostinger Single (Shared Hosting)
Đây là cách được khuyến nghị cho người không có VPS hoặc kinh nghiệm kỹ thuật. FleetHub tương thích hoàn toàn với gói Hostinger Single Web Hosting rẻ nhất (~$2.99/tháng). Không cần SSH, Composer hay dòng lệnh — Single đã có cron jobs gốc, PHP 8.3 và SSL miễn phí.
Bước 1 — Chuẩn bị hosting
- Đăng nhập Hostinger hPanel.
- Vào Hosting → Quản lý cho tên miền của bạn.
- Đặt phiên bản PHP thành 8.2 hoặc 8.3 qua Nâng cao → Cấu hình PHP.
- Đảm bảo các PHP extension này được bật (thường mặc định đã có):
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
Bước 2 — Tạo cơ sở dữ liệu MySQL
- Trong hPanel, vào Cơ sở dữ liệu → MySQL Databases.
- Bấm Tạo cơ sở dữ liệu mới.
- Ghi lại 3 giá trị này:
Tên cơ sở dữ liệu— ví dụu123_FleetHubTên đăng nhập— ví dụu123_adminMật khẩu— được tự sinh, giữ kỹ
Bước 3 — Upload file
- Vào Tệp → File Manager trong hPanel.
- Điều hướng tới
public_html/(đây là gốc của tên miền). - Xóa mọi file
index.htmlhoặcdefault.phpmặc định trong thư mục này. - Bấm Upload Files và tải toàn bộ
source.ziptừ gói cài đặt.
Hoặc tải trực tiếp nội dung thư mục/source/qua FTP nếu bạn muốn. - Nếu upload ZIP, chuột phải → Giải nén. Sau khi giải nén, tất cả file phải nằm ở gốc
public_html/. - Xác nhận
public_html/chứa:app/,public/,vendor/,.htaccess,index.php(trongpublic/),.env, v.v.
.htaccess tồn tại ở gốc public_html/. Nó chứa các rule URL rewriting. Nếu File Manager ẩn các file ẩn, bấm Cài đặt → Hiện file ẩn.
Bước 4 — Chạy trình cài đặt
- Mở trình duyệt và truy cập
https://yourdomain.com/install. - Bạn sẽ thấy FleetHub Installer.
- Bước 1: Requirements — Mọi mục phải pass (xanh). Nếu có mục lỗi, liên hệ Hostinger support để bật PHP extension còn thiếu.
- Bước 2: Database — Nhập thông tin từ Bước 2 ở trên:
- Host:
localhost - Port:
3306 - Database:
u123_FleetHub - Username:
u123_admin - Mật khẩu: (do Hostinger tự sinh)
- Host:
- Bước 3: Migrate — Bấm "Run Migrations & Seed". Mất ~10 giây. Đừng refresh.
- Bước 4: Admin — Tạo tài khoản quản trị. Dùng mật khẩu mạnh.
- Xong! — Bạn sẽ thấy URL Cron (lưu lại!) và nút đăng nhập.
Bước 5 — Cài cảnh báo email tự động qua Hostinger Cron
FleetHub dùng Laravel scheduler: cảnh báo tuân thủ, nhắc bảo trì, yêu cầu quá hạn, bằng lái, cập nhật giá trị xe và tính lại điểm sức khỏe đội xe. Cấu hình một cron trên hPanel.
- Trong hPanel, vào Nâng cao → Công việc định kỳ.
- Bấm Tạo Cron job.
- Chọn loại: Custom (không phải "PHP" — vì cần truyền tham số).
- Nhập lệnh sau (thay
uXXXXXXbằng username Hostinger của bạn):
Mẹo: mở File Manager, tìm file/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(gốc dự án), chuột phải → Thuộc tính để sao chép đường dẫn đầy đủ. - Đặt lịch Mỗi phút — cả năm trường (Minute, Hour, Day, Month, Day of week) đặt thành
*. - Bấm Lưu.
FleetHub sẽ gửi nhắc yêu cầu quá hạn, cảnh báo bảo trì, tuân thủ và bằng lái, cập nhật khấu hao và tính lại điểm sức khỏe đội xe tự động.
public_html/public/? Không sao — code Laravel vẫn nằm ở gốc public_html/ nên đường dẫn cron giữ là /home/uXXXX/public_html/artisan (đừng thêm /public/).
- Đăng nhập admin → Cài đặt → tab Hệ thống → sao chép Cron URL.
- Đăng ký miễn phí tại cron-job.org.
- Tạo cronjob, dán URL, đặt Mỗi 15 phút, lưu.
Bước 6 — Cấu hình email (SMTP)
Hostinger cung cấp tài khoản email kèm theo từng gói. Để dùng cho thông báo của FleetHub:
- Trong hPanel, vào Email → Tài khoản email và tạo một tài khoản (ví dụ
noreply@yourdomain.com). - Chỉnh sửa file
.envtrongpublic_html/qua File Manager:MAIL_MAILER=smtp MAIL_HOST=smtp.hostinger.com MAIL_PORT=587 MAIL_USERNAME=noreply@yourdomain.com MAIL_PASSWORD=your_email_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@yourdomain.com MAIL_FROM_NAME="Your Company Name" - Lưu file.
- Đăng nhập FleetHub → Cài đặt → tab Email → Gửi Test Email. Nếu bạn nhận được là xong.
Sự cố thường gặp trên Hostinger Single
"500 Internal Server Error" sau khi upload
- Xác nhận
.htaccesstồn tại ở gốcpublic_html/và chứa các rule rewrite. - Xác nhận phiên bản PHP được đặt thành 8.2 hoặc 8.3 trong hPanel.
- Kiểm tra
storage/logs/laravel.logqua File Manager để xem lỗi thật.
"Permission denied" khi upload
Hostinger thường tự đặt quyền đúng, nhưng nếu không:
- Chuột phải
storage/trong File Manager → Quyền → đặt thành755đệ quy. - Tương tự với
bootstrap/cache/.
Trình quét QR không mở được camera
API camera của trình duyệt yêu cầu HTTPS. Hostinger cung cấp SSL miễn phí qua Let's Encrypt — bật trong hPanel ở mục SSL → Quản lý.
Email theo lịch không được gửi
- Trong hPanel → Cron Jobs → kiểm tra cột Last run ở entry cron. Nếu trống, cron chưa chạy — xác nhận đường dẫn artisan đúng.
- Test lệnh thủ công: mở Terminal trong hPanel (nếu có) và chạy lệnh cron. Nếu lỗi, thông báo lỗi sẽ chỉ rõ vấn đề (sai phiên bản PHP, sai đường dẫn, v.v.).
- Xác nhận SMTP được cấu hình đúng (Cài đặt → Email → Gửi Test).
- Kiểm tra
storage/logs/laravel.logtìm lỗi scheduler.
Hiệu năng chậm
Hostinger Single dùng chung CPU/RAM. Nếu nhóm bạn hơn 20 người, cân nhắc:
- Nâng cấp lên Premium (~$3.99/tháng) — server nhanh hơn, nhiều tài nguyên hơn, nhiều cơ sở dữ liệu.
- Hoặc Business (~$5.99/tháng) — tài nguyên riêng, backup hàng ngày, môi trường staging.
Triển khai trên cPanel (Shared Hosting)
Hướng dẫn này dành cho cPanel shared hosting tiêu chuẩn (Namecheap, Bluehost, GoDaddy và hầu hết host giá rẻ). FleetHub đã có sẵn vendor/ và frontend build — không cần Composer, npm hay Terminal trên server. Nếu cPanel không có Terminal, dùng SSH Access hoặc các cách trong File Manager bên dưới.
/home/CPANELUSER/ — xem sidebar cPanel ở General Information.
Bước 1 — Đặt phiên bản PHP và extensions
- Đăng nhập cPanel.
- Mở MultiPHP Manager (hoặc Select PHP Version) và chọn PHP 8.2 hoặc 8.3 cho domain.
- Mở MultiPHP INI Editor hoặc PHP Extensions và xác nhận các extension sau đã bật:
- OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
- Nếu thiếu extension, bật trong danh sách hoặc liên hệ support host.
Bước 2 — Bật SSL (HTTPS)
- Vào SSL/TLS Status (hoặc Let's Encrypt SSL / AutoSSL).
- Chạy AutoSSL hoặc cài chứng chỉ miễn phí cho domain.
- HTTPS bắt buộc để trình quét QR mở camera trình duyệt.
https://yourdomain.com và kiểm tra biểu tượng ổ khóa.
Bước 3 — Tạo database và user MySQL
- Mở Manage My Databases (trong mục Databases).
- Ở Create New Database, nhập tên (vd.
fleethub) và Create. cPanel tự thêm prefix — tên đầy đủ dạngcpaneluser_fleethub. - Ở MySQL Users, tạo user với mật khẩu mạnh. Copy username có prefix.
- Ở Add User To Database, chọn user và database, Add, rồi cấp ALL PRIVILEGES. Bước này dễ bỏ sót — thiếu sẽ lỗi
Access denied (1045). - Ghi chính xác 3 giá trị hiển thị trong cPanel:
Tên cơ sở dữ liệu— ví dụu123_FleetHubTên đăng nhập— ví dụu123_adminMật khẩu— được tự sinh, giữ kỹ
Bước 4 — Upload file
- Mở File Manager, vào
public_html/(document root). - Bật Settings → Show Hidden Files để thấy
.htaccessvà.env. - Xóa
index.htmlmặc định trongpublic_html/nếu có. - Upload
source.zipvà Extract, hoặc upload nội dung thư mục/source/qua FTP. - Sau giải nén,
public_html/phải cóapp/,public/,vendor/,.htaccessgốc vàartisancùng cấp.
.htaccess gốc chuyển mọi request sang public/ — thường không cần đổi document root thủ công.
Bước 5 — Chuẩn bị .env trước khi chạy installer
Hoàn thành bước này trước khi mở /install. Laravel cần APP_KEY hợp lệ và cấu hình DB đúng trong .env.
- Trong File Manager, copy
.env.examplethành.env(cùng thư mục vớiartisan). - Sửa
.envvà đặt tối thiểu:APP_NAME=FleetHub APP_ENV=production APP_DEBUG=false APP_URL=https://yourdomain.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=cpaneluser_fleethub DB_USERNAME=cpaneluser_admin DB_PASSWORD="your_password" SESSION_DRIVER=file CACHE_STORE=file - Đặt
DB_CONNECTION=mysql—.env.examplemặc định dùng SQLite; shared hosting cần MySQL. - Đặt
SESSION_DRIVER=filevàCACHE_STORE=filetrước migration đầu (tránh lỗi bảng sessions). - Bọc
DB_PASSWORDtrong dấu ngoặc kép nếu mật khẩu có ký tự đặc biệt (#,$,!, v.v.).
Tạo APP_KEY (không cần Terminal)
Nhiều gói cPanel không có Terminal web. Dùng một trong các cách:
- SSH Access (cPanel → Security → SSH Access): kết nối PuTTY/PowerShell, chạy
cd ~/public_html && php artisan key:generate. - File Manager — tạo tạm
public/genkey.php, mở trình duyệt, copy kết quả vàoAPP_KEY=, rồi xóa file ngay.<?php echo 'base64:' . base64_encode(random_bytes(32)); - Trên máy PC — nếu có PHP local:
php -r "echo 'base64:'.base64_encode(random_bytes(32));"rồi dán vào.env.
genkey.php ngay sau khi copy key. Không để script helper trên production.
- Đặt quyền
storage/vàbootstrap/cache/là 755 (recursive) nếu installer báo lỗi ghi.
Bước 6 — Chạy web installer
- Mở
https://yourdomain.com/installtrong trình duyệt. - Bước 1: Requirements — tất cả phải ĐẠT (xanh). Sửa extension PHP ở Bước 1 nếu thiếu.
- Bước 2: Database — nhập tên có prefix từ Bước 3:
- Host:
127.0.0.1orlocalhost - Port:
3306 - Database:
cpaneluser_fleethub - Username:
cpaneluser_admin - Password: (your MySQL password)
- Host:
- Bước 3: Migrate — bấm "Run Migrations & Seed". ~10 giây. Không refresh trang.
- Bỏ tick Include demo data nếu cài production sạch.
- Bước 4: Admin — tạo tài khoản quản trị.
- Xong! — lưu Cron URL ở màn hình cuối.
Bước 7 — Cấu hình Cron Jobs cho email cảnh báo
FleetHub cần một cron chạy mỗi phút để Laravel gửi cảnh báo tuân thủ, nhắc bảo trì, yêu cầu quá hạn và email theo lịch khác.
- Trong cPanel, vào Advanced → Cron Jobs.
- Ở Add New Cron Job, đặt lịch Every minute (
* * * * *). - Nhập lệnh (thay
CPANELUSERbằng username cPanel trong General Information):
Mẹo: đường dẫn PHP có thể là/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run/usr/local/bin/phphoặc/usr/bin/php. Đường dẫn artisan thường là/home/CPANELUSER/public_html/artisan. - Bấm Add New Cron Job để lưu.
public_html/public/? Cron vẫn trỏ /home/CPANELUSER/public_html/artisan — không thêm /public/.
- Đăng nhập admin → Settings → System → copy Cron URL.
- Đăng ký miễn phí tại cron-job.org.
- Tạo job gọi URL đó mỗi 15 phút.
Bước 8 — Cấu hình email (SMTP)
Tạo tài khoản email cPanel cho thông báo gửi đi:
- Vào Email Accounts → tạo vd.
noreply@yourdomain.com. - Sửa
.envtrong File Manager:MAIL_MAILER=smtp MAIL_HOST=mail.yourdomain.com MAIL_PORT=587 MAIL_USERNAME=noreply@yourdomain.com MAIL_PASSWORD=your_email_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@yourdomain.com MAIL_FROM_NAME="Your Company Name" - Lưu, rồi trong FleetHub: Settings → Email → Send Test Email.
Sự cố thường gặp trên cPanel
"Access denied for user" (SQLSTATE 1045)
- Copy tên database và username chính xác từ cPanel — kể cả prefix.
- Xác nhận đã Add User To Database với ALL PRIVILEGES.
- Reset mật khẩu MySQL trong cPanel và cập nhật
.env— dùng dấu ngoặc quanhDB_PASSWORDnếu có ký tự đặc biệt.
Migration fail sau khi bước Database đã pass
- Wizard test từ form, nhưng Migrate đọc
.env. Đảm bảo khớp nhau. - Xóa
bootstrap/cache/config.phpnếu có, rồi thử lại. - Đảm bảo
DB_CONNECTION=mysqltrong.env(không phải sqlite).
"Invalid default value" khi migration (1067)
Chế độ strict của MySQL trên shared hosting có thể từ chối default value một số cột. Xem storage/logs/laravel.log và đảm bảo PHP 8.2+ với đủ extension.
"500 Internal Server Error" sau upload
- Kiểm tra
.htaccessgốc và PHP 8.2+. - Xem
storage/logs/laravel.logđể biết lỗi thực. - Xác nhận
APP_KEYđã set trong.env— key trống gây lỗi 500.
Không có Terminal trong cPanel
Bình thường trên nhiều gói shared. Dùng SSH Access (nếu bật), genkey.php tạm ở Bước 5, hoặc tạo key trên PC local.
Trình quét QR không mở camera
Bật SSL qua SSL/TLS Status → AutoSSL và truy cập bằng https://.
Cấu hình
Tệp .env
| Khóa | Mô tả | Ví dụ |
|---|---|---|
APP_NAME | Tên ứng dụng hiển thị trên thanh tiêu đề | FleetHub |
APP_URL | URL công khai của bản cài đặt | https://fleet.example.com |
APP_DEBUG | Đặt false trên production | false |
DB_* | Thông tin kết nối cơ sở dữ liệu | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Mail driver | smtp, log, mailgun |
MAIL_HOST | Hostname máy chủ SMTP | smtp.gmail.com |
MAIL_PORT | Port SMTP | 587 |
MAIL_USERNAME | Username SMTP | your@email.com |
MAIL_PASSWORD | Mật khẩu SMTP hoặc app token | ********** |
MAIL_FROM_ADDRESS | Địa chỉ From mặc định | noreply@example.com |
Cài đặt trong app
Hầu hết tùy chọn không nhạy cảm cấu hình tại Admin → Settings:
- Chung: tên/email/điện thoại công ty, thương hiệu
- Đội xe: tiền tố mã xe, mẫu checklist bàn giao, mặc định bảo trì, chế độ trang xe công khai
- Email: gửi email thử để kiểm tra SMTP
- Thông báo: bật/tắt cảnh báo tuân thủ, bảo trì, yêu cầu xe, bằng lái
- Đa ngôn ngữ: múi giờ, định dạng ngày, tiền tệ — áp dụng toàn app
- Tuân thủ: quản lý preset loại tuân thủ (bảo hiểm, đăng kiểm, thuế đường bộ...)
- Thương hiệu: tên app và logo — cập nhật đăng nhập, footer, tiêu đề tab
- Giao diện: tùy chỉnh màu thương hiệu, trạng thái và chữ cho sáng/tối — xem hướng dẫn đổi thương hiệu trong FAQ
Hỗ trợ đa ngôn ngữ
FleetHub đi kèm sẵn 11 ngôn ngữ, bao gồm Ả Rập (RTL) và Hindi. Người dùng đổi ngôn ngữ qua dropdown cờ ở góc trên bên phải.
Các ngôn ngữ có sẵn
| Mã | Ngôn ngữ | Hướng |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
hi | हिन्दी | LTR |
Cách chuyển ngôn ngữ
- Click vào icon cờ ở góc trên bên phải để mở dropdown.
- Chọn ngôn ngữ từ danh sách.
- Trang sẽ reload; toàn bộ nhãn UI, ngày tháng và định dạng tiền tệ chuyển theo.
- Lựa chọn được lưu cả vào tài khoản người dùng và cookie (1 năm).
/locale/{code}, chỉ hoạt động khi có PHP server đang chạy. Luôn truy cập qua domain thật (production) hoặc http://localhost:8000 (dev với php artisan serve). File documentation như file này thì hoàn toàn standalone, mở trực tiếp được.
Thêm ngôn ngữ tùy chỉnh (admin)
Vào Administration → Translations (admin có quyền manage translations):
- Click "Add Locale" — nhập mã (vd
mkcho tiếng Macedonia), tên hiển thị, tên bản ngữ, tên file cờ SVG, hướng (LTR/RTL), và locale gốc để copy bản dịch. - Locale mới xuất hiện trong language switcher và danh sách ngôn ngữ mặc định ở Settings → Localization.
- Bản dịch DB tự động override file trong
lang/{code}/.
Translation Editor
Editor liệt kê mọi key bản dịch theo file (assets, nav, settings…). Mỗi key hiển thị baseline file và override DB (nếu có).
- Lọc theo locale, nhóm bản dịch, hoặc tìm kiếm text.
- Click giá trị để sửa inline; lưu vào DB ngay.
- Reset key để quay về baseline file.
- Locale built-in (en, vi, es…) có thể sửa; locale tùy chỉnh hoàn toàn từ DB.
- Chỉ user có quyền manage translations mới truy cập được trang này.
CSV import / export
- Export — tải mọi key của một locale dạng CSV (
group,key,value). - Import — upload CSV cùng cột; override DB được cập nhật, key mới được thêm.
Locale mặc định theo người dùng
Mỗi user có cột locale. Email thông báo tự động gửi theo ngôn ngữ người nhận nhờ contract HasLocalePreference của Laravel.
Ngôn ngữ mặc định site đặt tại Settings → Localization → Default Language. User cá nhân override qua language switcher trên header.
Danh sách tính năng (15 nhóm module)
Quản lý xe
- Mã xe tự sinh (tiền tố VH)
- Biển số, VIN, hãng, model, loại nhiên liệu
- Tạo mã QR & in hàng loạt
- Trạng thái, tình trạng, theo dõi đồng hồ
- Import/export Excel hàng loạt
- Nhân bản xe khi mua nhiều xe giống nhau
- Trang chi tiết 7 tab kèm timeline vòng đời
Yêu cầu & Bàn giao
- Quy trình yêu cầu → duyệt → trả
- Lịch & phát hiện trùng lịch
- Sơ đồ hư hỏng 2D + chữ ký số
- Xuất báo cáo bàn giao PDF
Bảo trì
- Lên lịch phòng ngừa & khắc phục
- Lịch theo mức ưu tiên
- Tự lên lịch bảo trì phòng ngừa tiếp theo
- Theo dõi chi phí → đồng bộ chi phí tự động
- Email nhắc trước ngày đến hạn
Tuân thủ & Nhiên liệu
- Mục tuân thủ (bảo hiểm, đăng kiểm, giấy phép)
- Theo dõi hết hạn bằng lái tài xế
- Nhật ký nhiên liệu, upload biên lai & nén ảnh
- Kiểm tra chống gian lận đồng hồ
TCO & Khấu hao
- 3 phương pháp khấu hao, gồm đơn vị sản xuất (km)
- Bảng TCO với chỉ số chi phí/km
- Tự đồng bộ nhiên liệu & bảo trì sang chi phí
- Biểu đồ đường cong khấu hao
Báo cáo
- 7 loại báo cáo đội xe
- Xuất Excel + PDF
- Dashboard ApexCharts
- Lọc theo khoảng thời gian
Vận hành đội xe
- Điểm sức khỏe đội xe, tính lại hàng ngày
- Quản lý tài xế, đồng bộ bằng lái
- Chi phí xe (bảo hiểm, phí cầu đường, đỗ xe...)
- Quét QR nhanh cho tài xế (nhiên liệu, đồng hồ, sự cố)
Đa ngôn ngữ
- 11 ngôn ngữ UI + locale tùy chỉnh
- Trình soạn bản dịch, tìm kiếm & sửa inline
- Import/export CSV cập nhật hàng loạt
- Múi giờ & tiền tệ áp dụng toàn app
Thương hiệu & Giao diện
- Tiêu đề tab trình duyệt từ Cài đặt → Branding → App Name
- Tùy chỉnh màu trong Cài đặt → Appearance (sáng & tối)
Người dùng & Vai trò
FleetHub có 5 vai trò sẵn cho vận hành đội xe nội bộ:
| Vai trò | Quyền hạn |
|---|---|
| Admin | Toàn quyền hệ thống — người dùng, phòng ban, cài đặt, nhật ký kiểm toán, webhooks, bản dịch |
| Quản lý đội xe | Quản lý xe, tài xế, yêu cầu, bàn giao, bảo trì, nhật ký nhiên liệu; duyệt yêu cầu; báo cáo đầy đủ |
| Kế toán | Bảng TCO, chi phí, khấu hao, báo cáo tuân thủ — tập trung tài chính, chủ yếu xem |
| Trưởng phòng | Duyệt yêu cầu phòng mình, xem xe và báo cáo phòng ban |
| Tài xế | Xem xe đang giữ, ghi nhật ký nhiên liệu, quét QR nhanh, xem yêu cầu của mình |
Tài khoản demo (mật khẩu: password): admin@fleethub.test, manager@fleethub.test, dept@fleethub.test, accountant@fleethub.test, driver@fleethub.test. Bật dữ liệu demo khi cài đặt hoặc seed. Phân quyền Spatie — admin có thể tinh chỉnh từng quyền.
Quản lý xe
Tạo xe mới
- Điều hướng tới Xe → Xe mới.
- Điền biển số, hãng, model, năm, loại nhiên liệu, danh mục và phòng ban.
- Thêm ngày mua và giá (bắt buộc cho khấu hao và TCO).
- Upload ảnh (nhiều tệp, tối đa 5 MB mỗi tệp — tự nén trên mobile).
- Lưu — mã xe và mã QR được tự sinh.
Định dạng mã xe
Mặc định: {PREFIX}-{YEAR}-{NNNN}, ví dụ VH-2026-0001. Cấu hình tại Cài đặt → Đội xe → Tiền tố mã xe.
Import hàng loạt
- Bấm Import trên trang Xe.
- Tải template Excel.
- Điền dữ liệu — cột bắt buộc:
license_plate,make,model,category_name. - Upload tệp.
Mã QR & Quét nhanh
Mỗi xe tự động có mã QR khi tạo. Quét mở trang xe công khai hoặc thao tác nhanh trong app cho tài xế đã đăng nhập.
In nhãn QR
- Nhãn đơn: Bấm biểu tượng máy in trên dòng xe.
- In hàng loạt: Chọn nhiều xe → In nhãn QR. Khổ A4, 2 nhãn/hàng.
Quét trong app
Bấm Quét QR trên trang Xe. Cho phép camera. Hoạt động trên trình duyệt hiện đại với HTTPS hoặc localhost.
Trang xe công khai
Mỗi xe có URL công khai tại /v/{vehicle_code} — hữu ích khi nhận diện nhanh không cần đăng nhập.
- Cấu hình tại Cài đặt → Đội xe → Trang xe công khai: Công khai, Yêu cầu đăng nhập hoặc Tắt.
- Chế độ khách chỉ xem thông tin cơ bản (biển số, hãng/model). Thao tác nhanh cần đăng nhập.
- Sau khi đổi
APP_URL, bấm Tạo lại tất cả mã QR trong Cài đặt.
Quy trình
Yêu cầu xe
Nhân viên gửi yêu cầu xe cần dùng. Luồng: requested → approved → returned (hoặc rejected). Quản lý đội xe hoặc Trưởng phòng duyệt. Lịch hiển thị đặt xe toàn đội. Trả xe quá hạn gửi email cảnh báo.
Bàn giao xe
- Khi yêu cầu được duyệt, tạo Bàn giao xuất trước khi tài xế nhận xe.
- Ghi đồng hồ, hoàn thành checklist, đánh dấu hư hỏng trên sơ đồ 2D, đính ảnh và chữ ký số.
- Lưu và tải báo cáo bàn giao PDF để lưu hồ sơ.
- Khi trả xe, tạo Bàn giao nhập — so sánh tình trạng, cập nhật đồng hồ, xóa gán tài xế.
- Hoàn tất bàn giao nhập đánh dấu yêu cầu đã trả và đặt trạng thái xe về sẵn sàng.
Khấu hao & TCO
FleetHub tính khấu hao xe bằng một trong ba phương pháp. Khấu hao đưa vào bảng TCO cùng nhật ký nhiên liệu và chi phí.
| Phương pháp | Công thức | Trường hợp dùng |
|---|---|---|
| Đường thẳng | (Cost - Salvage) / Useful Life | Phổ biến nhất; khấu hao đều hàng năm |
| Số dư giảm dần | 2 / Useful Life × Book Value | Khấu hao nhanh; mục đích thuế |
| Đơn vị sản xuất | (km kỳ này / tổng km dự kiến) × (Giá mua − Giá trị thanh lý) | Xe có tổng km dự kiến (theo đồng hồ) |
Mặc định kế thừa từ danh mục xe. current_value tự cập nhật hàng tháng qua fleethub:update-vehicle-values. TCO = giá mua + tổng chi phí xe trong kỳ đã chọn.
Trường tùy chỉnh
Admin → Trường tùy chỉnh cho phép thêm thuộc tính không giới hạn cho xe:
- Loại: văn bản, số, ngày, lựa chọn, vùng văn bản, tệp, hộp kiểm
- Phạm vi: áp dụng mọi danh mục hoặc danh mục xe cụ thể
- Sắp xếp: kéo-thả tay nắm
- Trường bắt buộc được kiểm tra khi lưu xe
Báo cáo
Bảy báo cáo đội xe tích hợp, truy cập từ menu Báo cáo:
- Tổng hợp TCO — tổng chi phí sở hữu theo xe và toàn đội xe
- Lịch khấu hao — mất giá theo xe, có xuất file
- Chi phí bảo trì — chi tiêu theo xe, loại và tháng
- Tiêu thụ & Chi phí nhiên liệu — xu hướng km/l, đánh dấu bất thường
- Sử dụng yêu cầu xe — tỷ lệ đặt xe theo thời gian
- Hết hạn tuân thủ — giấy tờ xe và bằng lái tài xế sắp hết hạn
- Phân bổ xe theo phòng ban — xe và mức sử dụng theo phòng ban
Mọi báo cáo hỗ trợ xuất Excel và PDF qua nút trên đầu trang.
Tích hợp Webhook
FleetHub có thể thông báo dịch vụ bên ngoài khi có sự kiện đội xe quan trọng.
Sự kiện khả dụng
vehicle.created,vehicle.updated,vehicle.deletedrequisition.approved,requisition.rejected,requisition.overdue,requisition.returnedhandover.completedcompliance.expiring,compliance.expiredmaintenance.due,maintenance.overdue,maintenance.completedfleet_health_score.dropped
Định dạng payload
{
"event": "handover.completed",
"timestamp": "2026-06-23T08:00:00+00:00",
"data": {
"vehicle_id": 1,
"vehicle_code": "VH-2026-0001",
"license_plate": "51A-12345",
"handover_id": 12,
"direction": "outgoing",
"driver_id": 4
}
}
Xác minh chữ ký
Nếu cấu hình secret, request có header X-FleetHub-Signature chứa HMAC-SHA256 của body. Xác minh phía bạn:
$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-FleetHub-Signature'))) {
// hợp lệ
}
Chính sách thử lại
Giao thất bại thử lại 3 lần, cách 200 ms. Sau 10 lần liên tiếp thất bại, webhook tự tắt.
Tác vụ theo lịch
FleetHub dùng Laravel scheduler cho tác vụ nền. Chỉ cần một cron — Laravel chạy từng lệnh fleethub: đúng giờ.
Shared hosting (Cron Jobs cPanel / Hostinger)
Xem Cài đặt cPanel → Bước 7 hoặc Cài đặt Hostinger → Bước 5. Tóm lại: Advanced → Cron Jobs, lệnh:
/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
Lịch: mỗi phút (* ở cả năm trường).
Lệnh cron cPanel
Thay CPANELUSER bằng username cPanel của bạn:
/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
VPS / máy chủ riêng (crontab)
Chạy crontab -e với user web và thêm:
* * * * * cd /path/to/FleetHub && php artisan schedule:run >> /dev/null 2>&1
Dự phòng: ping URL bên ngoài
Nếu host không có cron, dùng Cron URL trong app (Cài đặt → System) với cron-job.org (miễn phí, 15 phút/lần).
Tác vụ chạy tự động
| Thời gian | Lệnh | Mục đích |
|---|---|---|
| Hàng ngày 08:00 | fleethub:send-requisition-overdue-alerts | Yêu cầu đã duyệt nhưng chưa trả quá ngày kết thúc |
| Hàng ngày 08:30 | fleethub:send-maintenance-reminders | Nhắc bảo trì sắp đến hạn |
| Hàng ngày 09:00 | fleethub:send-compliance-expiry-alerts | Tuân thủ hết hạn trong 30/14/7/1 ngày |
| Hàng ngày 09:30 | fleethub:send-driver-license-alerts | Cảnh báo bằng lái tài xế sắp hết hạn |
| Ngày 1 hàng tháng 02:00 | fleethub:update-vehicle-values | Cập nhật current_value xe từ khấu hao |
| Hàng ngày 03:00 | fleethub:recalculate-fleet-health-score | Tính lại và cache Điểm sức khỏe đội xe |
Hướng dẫn nâng cấp
FleetHub v1.0.0 là bản phát hành đầu tiên trên CodeCanyon.
Xử lý sự cố
"Permission denied" trên storage
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
Trình quét QR không mở camera
API camera trình duyệt yêu cầu HTTPS. Cài SSL hoặc dùng localhost khi thử.
Email không nhận được
Kiểm tra storage/logs/laravel.log tìm lỗi. Dùng Cài đặt → Email → Gửi Test Email để xác nhận thông tin SMTP. Đảm bảo máy chủ SMTP cho phép IP gửi.
Database "Access denied" (1045) trên cPanel
Sai user/mật khẩu, chưa gán user vào database, hoặc ký tự đặc biệt trong mật khẩu làm hỏng .env. Xem Cài đặt cPanel → Sự cố thường gặp.
Lỗi migration 1067 (Invalid default value)
MySQL strict mode trên shared hosting từ chối nhiều cột timestamp NOT NULL. Đã sửa từ v2.1.0+. Cập nhật gói hoặc đổi yêu cầu xe_date / expected_return_date sang dateTime trong migration yêu cầu xes.
Thiếu APP_KEY / lỗi 500 trước khi cài
Laravel cần APP_KEY trong .env trước khi app chạy. Nếu cPanel không có Terminal, xem Cài đặt cPanel → Bước 5 (SSH, genkey.php hoặc tạo trên PC).
Reset cài đặt
Xóa storage/installed.lock và truy cập /install lại. Dữ liệu hiện có sẽ bị xóa nếu chạy migration lại.
Hiệu năng — danh sách xe chậm
Chạy php artisan optimize. Đảm bảo index MySQL trên vehicles.vehicle_code, vehicles.license_plate, vehicles.status.
Nhật ký thay đổi
v1.0.0 — Phát hành đầu tiên (2026-06)
- CRUD xe với mã QR tự sinh và trang công khai
/v/{vehicle_code} - 5 vai trò (Admin, Quản lý đội xe, Trưởng phòng, Kế toán, Tài xế)
- Quản lý tài xế, đồng bộ hết hạn bằng lái sang mục tuân thủ
- Quy trình yêu cầu xe với lịch và cảnh báo quá hạn
- Bàn giao xe với sơ đồ hư hỏng 2D, checklist, chữ ký và PDF
- Nhật ký nhiên liệu, chống gian lận đồng hồ, đồng bộ chi phí tự động
- Chi phí xe và bảng TCO với phân tích chi phí/km
- Khấu hao — đường thẳng, số dư giảm dần, đơn vị sản xuất (km)
- Mục tuân thủ với cảnh báo hết hạn 30/14/7/1 ngày
- Lên lịch bảo trì, tự gia hạn phòng ngừa, theo dõi chi phí
- Điểm sức khỏe đội xe, tính lại hàng ngày và modal chi tiết
- 7 báo cáo đội xe, xuất Excel và PDF
- Trường tùy chỉnh (7 loại) theo danh mục xe
- Webhooks ký HMAC (
X-FleetHub-Signature) và tự thử lại - Nhật ký kiểm toán Spatie Activitylog với diff
- UI đa ngôn ngữ: 11 locale gồm Ả Rập RTL và Hindi
- Cài đặt công ty, đội xe, email, thông báo, preset tuân thủ
- Trình cài đặt web với seeder dữ liệu demo
- Dark mode, UI mobile-first, nén ảnh khi upload
Ghi nhận
Thư viện mã nguồn mở đã dùng
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT