# Sách Giáo Khoa Việt Nam — sachgiaokhoa.org Website tra cứu sách giáo khoa Việt Nam (lớp 1 → 12) xây dựng bằng **CodeIgniter 4**. ## Tính năng - **Kho sách**: ~1081 đầu sách từ API nguồn, lọc theo lớp / môn học / nhà xuất bản + tìm kiếm, phân trang - **Trang chi tiết**: đầy đủ metadata (tác giả, chủ biên, NXB, số trang, dung lượng, ISBN, giá, phiên bản PDF, ngày tạo) - **Xem trực tuyến**: trình xem PDF (pdf.js) nhúng, stream qua proxy `/media/pdf/{id}` (chế độ inline, không tải) - **Tải xuống có kiểm soát**: trang `/tai-xuong/{id}` với **captcha (GD tự vẽ)** + **đếm ngược 15s** + **token một lần hết hạn 5 phút** - **Pháp lý**: Miễn trừ trách nhiệm, Điều khoản sử dụng, Chính sách bảo mật, Bản quyền & DMCA, Liên hệ/Báo cáo vi phạm (honeypot chống spam) - **MongoDB (mongo-harness)**: cache danh mục sách (TTL 6h), token tải về, thống kê lượt tải, tin nhắn liên hệ ## Yêu cầu - PHP >= 8.1 với các extension: `mongodb`, `gd`, `curl`, `intl` - MongoDB tại `harness-mongo:27017` (cấu hình trong `.env` → `mongo.uri`) - Composer ## Cài đặt ```bash composer install php spark serve # test nhanh tại http://localhost:8080 ``` Cấu hình chính trong `.env`: ```dotenv api.baseUrl / api.token # API sách nguồn (kèm Bearer token) mongo.uri / mongo.db # MongoDB cache download.countdown # số giây đếm ngược trước khi cho tải ``` ## Chạy local với Devilbox (sachgiaokhoaorg.local) 1. Copy (hoặc symlink) project vào thư mục `data/www` của Devilbox: ```bash # ví dụ devilbox ở ~/devilbox ln -s /root/sachgiaokhoaorg ~/devilbox/data/www/sachgiaokhoaorg ``` 2. Trong `.env` giữ: `app.baseURL = 'http://sachgiaokhoaorg.local/'` 3. Thêm vào file hosts trên máy PC: ``` 127.0.0.1 sachgiaokhoaorg.local ``` 4. Vào container PHP của devilbox, đảm bảo extension `mongodb` + `gd` được bật, rồi: ```bash cd /shared/httpd/sachgiaokhoaorg composer install ``` 5. Mở http://sachgiaokhoaorg.local — document root trỏ vào `public/`. > **Lưu ý MongoDB**: site connect tới `harness-mongo:27017`. Khi chạy trên PC cá nhân, đổi `mongo.uri` trong `.env` về MongoDB local của devilbox (`mongodb://mongo:mongo@mongo:27017`) hoặc Mongo Atlas. ## Cấu trúc chính ``` app/ Controllers/Books.php # danh sách + chi tiết + viewer Controllers/Media.php # proxy cover & pdf (inline) Controllers/Download.php # captcha + countdown + token download Controllers/Pages.php # trang tĩnh + contact Libraries/BookApi.php # client API nguồn + MongoDB cache Libraries/Mongo.php # connection mongo-harness Libraries/Captcha.php # captcha GD tự vẽ Views/ # layout + views (tiếng Việt) public/assets/pdfjs/ # pdf.js 3.11.174 (self-hosted) ``` ## Pháp lý Website phi thương mại, chỉ **nhúng/liên kết** nội dung từ API nguồn phục vụ tra cứu. Mọi bản quyền sách thuộc về các Nhà xuất bản & Bộ GD-ĐT. Báo cáo vi phạm: `/lien-he` → gỡ trong 72h (DMCA).