# HƯỚNG DẪN CẤU HÌNH DỰ ÁN LUCKY WHEEL - VÒNG QUAY MAY MẮN ## 📋 THÔNG TIN DỰ ÁN **Tên dự án**: Lucky Wheel (Vòng quay may mắn) **Framework**: Laravel 9.52.18 **PHP Version**: 8.1.2 **Database**: MySQL 8.0.44 **Composer**: 2.9.3 **Node.js**: v14.21.3 **NPM**: 6.14.18 --- ## 🔧 CÁC BƯỚC ĐÃ THỰC HIỆN ### 1. CÀI ĐẶT PHP VÀ EXTENSIONS ```bash sudo apt update sudo apt install -y php8.1-cli php8.1-common php8.1-mysql php8.1-xml php8.1-curl php8.1-mbstring php8.1-zip php8.1-bcmath php8.1-gd php8.1-intl php8.1-readline ``` **Kiểm tra phiên bản**: ```bash php -v # Output: PHP 8.1.2-1ubuntu2.22 ``` --- ### 2. CÀI ĐẶT COMPOSER ```bash curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer ``` **Kiểm tra**: ```bash composer --version # Output: Composer version 2.9.3 ``` --- ### 3. CÀI ĐẶT DEPENDENCIES PHP ```bash cd /home/x79/LuckyWheel composer install --optimize-autoloader --no-dev ``` --- ### 4. CÀI ĐẶT MYSQL SERVER ```bash sudo apt install -y mysql-server ``` --- ### 5. CẤU HÌNH DATABASE #### Tạo database và user: ```bash sudo mysql -e "CREATE DATABASE luckywheel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" sudo mysql -e "CREATE USER IF NOT EXISTS 'laravel'@'localhost' IDENTIFIED BY 'laravel123';" sudo mysql -e "GRANT ALL PRIVILEGES ON luckywheel.* TO 'laravel'@'localhost';" sudo mysql -e "FLUSH PRIVILEGES;" ``` #### Chạy migrations: ```bash php artisan migrate php artisan make:migration create_danh_sach_giai_thuong_table php artisan make:migration create_danh_sach_nguoi_dung_table php artisan migrate ``` #### Seed dữ liệu: ```bash php artisan make:seeder DanhSachGiaiThuongSeeder php artisan db:seed --class=DanhSachGiaiThuongSeeder ``` #### Thêm dữ liệu người dùng: ```sql INSERT INTO danh_sach_nguoi_dung (ma_nguoi_dung, ten_nguoi_dung, loai_nguoi_dung, created_at, updated_at) VALUES ('NV001', 'Nguyễn Văn A', 'Nhân viên', NOW(), NOW()), ('NV002', 'Trần Thị B', 'Nhân viên', NOW(), NOW()), ('NV003', 'Lê Văn C', 'Nhân viên', NOW(), NOW()), ('KH001', 'Phạm Thị D', 'Khách hàng', NOW(), NOW()), ('KH002', 'Hoàng Văn E', 'Khách hàng', NOW(), NOW()); ``` #### Tạo admin user: ```bash php artisan tinker --execute="User::create(['name' => 'Admin', 'email' => 'admin@luckywheel.com', 'password' => bcrypt('admin123')]);" ``` --- ### 6. CẤU HÌNH FILE .ENV **File**: `/home/x79/LuckyWheel/.env` ```env APP_NAME=Laravel APP_ENV=local APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=luckywheel DB_USERNAME=laravel DB_PASSWORD=laravel123 BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DISK=local QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 ``` --- ### 7. SỬA ĐỔI FILE INDEX.PHP **Di chuyển file**: ```bash mv index.php public/index.php ``` **Sửa đường dẫn trong file** `public/index.php`: - `require __DIR__.'/vendor/autoload.php'` → `require __DIR__.'/../vendor/autoload.php'` - `require_once __DIR__.'/bootstrap/app.php'` → `require_once __DIR__.'/../bootstrap/app.php'` --- ### 8. SỬA ĐỔI ĐƯỜNG DẪN ASSET TRONG VIEWS **Vấn đề**: Views sử dụng `asset('public/...')` → sai vì Laravel đã tự động trỏ đến thư mục public **Sửa tất cả các file views**: - `resources/views/frontend/index.blade.php` - `resources/views/frontend/prize.blade.php` - `resources/views/frontend/congratulation.blade.php` - `resources/views/frontend/frame_container.blade.php` - `resources/views/backend/index.blade.php` - `resources/views/backend/user.blade.php` - `resources/views/backend/login.blade.php` **Thay đổi**: - `asset('public/css/...')` → `asset('css/...')` - `asset('public/js/...')` → `asset('js/...')` - `asset('public/images/...')` → `asset('images/...')` - `asset('public/libs/...')` → `asset('libs/...')` --- ### 9. CÀI ĐẶT DEPENDENCIES JAVASCRIPT ```bash npm install npm run build ``` --- ### 10. CẤU HÌNH LARAVEL ```bash php artisan storage:link php artisan config:cache php artisan view:clear php artisan cache:clear ``` --- ## 🗄️ CẤU TRÚC DATABASE ### Bảng: danh_sach_giai_thuong | Cột | Kiểu | Mô tả | |-----|------|-------| | ma_giai_thuong | BIGINT (PK) | Mã giải thưởng | | noi_dung | VARCHAR(255) | Tên giải thưởng | | hinh_anh | VARCHAR(255) | Đường dẫn hình ảnh | | so_thu_tu | INT | Thứ tự hiển thị | | ma_so_nhan_giai | VARCHAR(255) | Mã số dự kiến | | ten_nguoi_nhan_giai | VARCHAR(255) | Tên người nhận dự kiến | | phan_loai_khach | VARCHAR(255) | Loại khách hàng | | ma_so_nhan_giai_thuc_te | VARCHAR(255) | Mã số trúng thực tế | | ten_nguoi_nhan_giai_thuc_te | VARCHAR(255) | Tên người trúng thực tế | | da_nhan_giai | TINYINT | 0: Chưa nhận, 1: Đã nhận | | thoi_gian_cho | INT | Thời gian chờ | ### Bảng: danh_sach_nguoi_dung | Cột | Kiểu | Mô tả | |-----|------|-------| | id_nguoi_dung | BIGINT (PK) | ID người dùng | | ma_nguoi_dung | VARCHAR(255) UNIQUE | Mã người dùng | | ten_nguoi_dung | VARCHAR(255) | Tên người dùng | | loai_nguoi_dung | VARCHAR(255) | Loại: Nhân viên/Khách hàng | ### Dữ liệu mẫu đã tạo: - **10 giải thưởng**: Giải Nhất → Giải Mười - **5 người dùng**: 3 nhân viên (NV001-003), 2 khách hàng (KH001-002) - **1 admin**: admin@luckywheel.com --- ## 🚀 CHẠY ỨNG DỤNG ### Khởi động server: ```bash php artisan serve ``` ### Truy cập ứng dụng: - **Frontend (Vòng quay)**: http://127.0.0.1:8000 - **Admin Login**: http://127.0.0.1:8000/login - **Admin Dashboard**: http://127.0.0.1:8000/admin - **Quản lý User**: http://127.0.0.1:8000/user --- ## 🔑 THÔNG TIN ĐĂNG NHẬP ### Admin Account: - **Email**: `admin@luckywheel.com` - **Password**: `admin123` ### Database: - **Host**: `127.0.0.1` - **Port**: `3306` - **Database**: `luckywheel` - **Username**: `laravel` - **Password**: `laravel123` --- ## 📁 CẤU TRÚC QUAN TRỌNG ``` LuckyWheel/ ├── public/ │ ├── index.php ← File entry point (đã sửa đường dẫn) │ ├── css/ │ │ ├── frontend.css │ │ ├── backend.css │ │ └── congratulation.css │ ├── js/ │ │ ├── frontend.js │ │ ├── backend.js │ │ └── fireworks.js │ ├── images/ │ ├── libs/ │ │ ├── bootstrap/ │ │ ├── jquery/ │ │ ├── animejs/ │ │ └── dat-gui/ │ └── storage/ ← Symbolic link ├── app/ │ ├── Models/ │ │ ├── DanhSachGiaiThuong.php │ │ ├── DanhSachNguoiDung.php │ │ └── User.php │ └── Http/Controllers/ │ ├── IndexController.php │ └── AdminController.php ├── resources/views/ │ ├── frontend/ │ │ ├── index.blade.php │ │ ├── prize.blade.php │ │ ├── congratulation.blade.php │ │ └── frame_container.blade.php │ └── backend/ │ ├── index.blade.php │ ├── user.blade.php │ └── login.blade.php ├── database/ │ ├── migrations/ │ └── seeders/ ├── .env ← File cấu hình └── composer.json ``` --- ## 🛠️ CÁC LỆNH HỮU ÍCH ### Clear cache: ```bash php artisan cache:clear php artisan config:clear php artisan view:clear php artisan route:clear ``` ### Rebuild cache: ```bash php artisan config:cache php artisan route:cache php artisan view:cache ``` ### Database: ```bash php artisan migrate # Chạy migrations php artisan migrate:fresh # Reset database php artisan migrate:fresh --seed # Reset và seed php artisan db:seed # Chạy seeders ``` ### Kiểm tra routes: ```bash php artisan route:list ``` ### Xem logs: ```bash tail -f storage/logs/laravel.log ``` --- ## ⚠️ CÁC VẤN ĐỀ ĐÃ KHẮC PHỤC ### 1. Lỗi 404 - Assets không load **Nguyên nhân**: Đường dẫn `asset('public/...')` sai **Giải pháp**: Sửa thành `asset('css/...')`, `asset('js/...')`, etc. ### 2. Lỗi database - Table not found **Nguyên nhân**: Database import sai, thiếu bảng `danh_sach_giai_thuong` **Giải pháp**: Tạo migrations mới cho các bảng đúng với Model ### 3. Lỗi index.php not found **Nguyên nhân**: File `index.php` ở root thay vì trong `public/` **Giải pháp**: Di chuyển vào `public/` và sửa đường dẫn require --- ## 📞 TỔNG KẾT Dự án **Lucky Wheel** đã được cấu hình hoàn chỉnh với: - ✅ PHP 8.1 + tất cả extensions cần thiết - ✅ Composer 2.9.3 - ✅ MySQL 8.0 với database đầy đủ - ✅ Laravel dependencies đã cài đặt - ✅ JavaScript assets đã build - ✅ Database có dữ liệu mẫu - ✅ Admin account để đăng nhập - ✅ Tất cả file views đã sửa đường dẫn asset đúng - ✅ Server chạy thành công tại http://127.0.0.1:8000 **Truy cập**: http://127.0.0.1:8000 để sử dụng ứng dụng!