CÁC BƯỚC CÀI ĐẶT
Bước 1. Đặt mã nguồn
Giải nén toàn bộ vào thư mục: C:\xampp\htdocs\InternTrack
Bước 2. Bật dịch vụ
Mở XAMPP Control Panel, bấm Start cho Apache và MySQL.
Bước 3. Tạo database
- Vào http://localhost/phpmyadmin
- Tạo database tên: interntrack
- Collation: utf8mb4_unicode_ci
Bước 4. Import dữ liệu
- Chọn database interntrack -> tab Import
- Import file: database/interntrack.sql (bắt buộc, tạo toàn bộ bảng)
- Import tiếp: database/seed.sql (tùy chọn, dữ liệu và tài khoản demo)
Bước 5. Cài thư viện PHP
Mở Terminal / PowerShell tại thư mục dự án và chạy:
composer install
(Bỏ qua bước này nếu gói đã kèm sẵn thư mục vendor.)
Bước 6. Tạo file cấu hình .env
Tạo file tên ".env" (có dấu chấm ở đầu, không có đuôi) ở thư mục gốc dự án,
cùng cấp với index.php, với nội dung sau rồi điền giá trị của bạn:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=interntrack
DB_USER=root
DB_PASSWORD=
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=email-cua-ban@gmail.com
MAIL_PASSWORD=mat-khau-ung-dung-16-ky-tu
MAIL_FROM=email-cua-ban@gmail.com
MAIL_FROM_NAME=InternTrack
GEMINI_API_KEY=
GEMINI_MODEL=gemini-3.8-flash
Nếu dùng XAMPP mặc định thì phần DB_* giữ nguyên (mật khẩu root để trống).
MAIL_* và GEMINI_* có thể để trống, ứng dụng vẫn chạy (xem mục 4 và 5).
Bước 7. Chạy ứng dụng
Mở trình duyệt: http://localhost/InternTrack/
3. TÀI KHOẢN
Tài khoản demo (chỉ có sau khi import seed.sql, chỉ dùng trên máy cá nhân):
Vai trò Tên đăng nhập Mật khẩu
Sinh viên student Student@123
Doanh nghiệp company Company@123
Giảng viên lecturer Lecturer@123
Tài khoản QUẢN TRỊ VIÊN không có mật khẩu mặc định. Tạo như sau:
a) Tạo mật khẩu băm, chạy lệnh (thay MAT_KHAU_CUA_BAN bằng mật khẩu bạn chọn):
C:\xampp\php\php.exe -r "echo password_hash('MAT_KHAU_CUA_BAN', PASSWORD_DEFAULT);"
b) Vào phpMyAdmin, chọn database interntrack, tab SQL, chạy
(thay HASH_VUA_TAO bằng chuỗi nhận được ở bước a):
INSERT INTO users (username, email, password_hash, full_name, role, status)
VALUES ('admin', 'admin@example.com', 'HASH_VUA_TAO', 'Quản trị viên', 'admin', 'active');
Sau khi đăng nhập admin, bạn tạo tài khoản sinh viên, giảng viên, doanh nghiệp
ngay trong trang "Tài khoản".
4. BẬT CHỨC NĂNG AI (TÙY CHỌN)
Các chức năng AI (gợi ý vị trí theo CV, tóm tắt nhật ký và báo cáo, cảnh báo rủi ro,
nhận xét cuối kỳ, chat hỏi đáp) dùng Google Gemini.
- Lấy khóa miễn phí tại: https://aistudio.google.com/apikey
- Dán vào GEMINI_API_KEY trong file .env
- Để trống thì mọi nút AI tự ẩn, các chức năng còn lại vẫn hoạt động bình thường.
5. BẬT GỬI OTP QUÊN MẬT KHẨU (TÙY CHỌN)
- Bật xác minh 2 bước cho tài khoản Gmail dùng để gửi thư.
- Tạo "Mật khẩu ứng dụng" (App Password) 16 ký tự trong phần bảo mật của tài khoản Google.
- Dán vào MAIL_PASSWORD (không dùng mật khẩu đăng nhập Gmail), điền MAIL_USERNAME
và MAIL_FROM bằng địa chỉ Gmail đó.
6. LỖI THƯỜNG GẶP
- Lỗi kết nối cơ sở dữ liệu
MySQL chưa chạy, hoặc DB_* trong .env sai, hoặc chưa tạo database interntrack.
- Trang trắng hoặc báo thiếu thư viện
Chưa chạy "composer install" (thiếu thư mục vendor).
- Không gửi được OTP
Sai App Password, chưa bật xác minh 2 bước, hoặc mạng chặn cổng 587.
- Không thấy nút AI hoặc bong bóng chat
Chưa có GEMINI_API_KEY trong .env, hoặc đang đăng nhập vai trò không có chức năng này
(bong bóng chat chỉ dành cho sinh viên).
- AI báo "chưa phản hồi được"
Sai khóa hoặc tên model, hoặc hết hạn mức miễn phí; thử lại sau ít phút.
- Sinh viên không thấy vị trí tuyển dụng
Công ty chưa được admin xác minh, thiếu địa chỉ, hoặc vị trí thiếu địa điểm làm việc
hoặc đã quá hạn nhận hồ sơ.
- Không tải lên được CV / báo cáo
CV tối đa 5 MB (PDF, DOC, DOCX); ảnh đại diện tối đa 3 MB (JPG, PNG, WebP);
tệp minh chứng nhiệm vụ tối đa 20 MB.
7. LƯU Ý BẢO MẬT
- File .env chứa mật khẩu và khóa API, KHÔNG chia sẻ và không đưa lên Git.
- Tài khoản demo trong seed.sql chỉ dùng để thử trên máy cá nhân; khi triển khai thật
hãy xóa hoặc đổi mật khẩu.
- Khi đưa lên máy chủ thật, hãy dùng HTTPS và tạo mật khẩu mạnh cho tài khoản admin.