# 🐳 HƯỚNG DẪN SỬ DỤNG DOCKER CHO DỰ ÁN LUCKY WHEEL ## 📋 Yêu Cầu Hệ Thống - Docker version 20.10 trở lên - Docker Compose version 2.0 trở lên - Ít nhất 4GB RAM - 10GB dung lượng ổ cứng trống ## 🚀 Cài Đặt Docker (Nếu chưa có) ### Ubuntu/Debian: ```bash # Cài đặt Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Thêm user vào group docker sudo usermod -aG docker $USER # Docker Compose V2 đã được tích hợp sẵn trong Docker # Kiểm tra: docker compose version # Logout và login lại để áp dụng thay đổi ``` ## 🎯 Khởi Động Dự Án ### Cách 1: Sử dụng script tự động (Khuyến nghị) ```bash ./docker-setup.sh ``` Script này sẽ tự động: - ✅ Tạo file .env từ .env.docker - ✅ Build Docker images - ✅ Khởi động containers - ✅ Chạy migrations - ✅ Seed dữ liệu - ✅ Cấu hình storage link - ✅ Optimize ứng dụng ### Cách 2: Thủ công ```bash # 1. Sao chép file .env cp .env.docker .env # 2. Build và khởi động containers docker compose up -d --build # 3. Chờ MySQL khởi động (30 giây) sleep 30 # 4. Chạy migrations docker compose exec app php artisan migrate --force # 5. Seed dữ liệu docker compose exec app php artisan db:seed --class=DanhSachGiaiThuongSeeder --force # 6. Tạo symbolic link docker compose exec app php artisan storage:link # 7. Clear và cache docker compose exec app php artisan config:cache docker compose exec app php artisan route:cache docker compose exec app php artisan view:cache ``` ## 🌐 Truy Cập Ứng Dụng | Dịch vụ | URL | Thông tin đăng nhập | |---------|-----|---------------------| | **Laravel App** | http://localhost:8080 | - | | **PHPMyAdmin** | http://localhost:8081 | User: `laravel`
Pass: `laravel123` | | **MySQL** | localhost:3307 | Database: `luckywheel`
User: `laravel`
Pass: `laravel123`
Root Pass: `root123` | | **Redis** | localhost:6380 | - | ## 📦 Cấu Trúc Docker ``` LuckyWheel/ ├── docker-compose.yml # Cấu hình Docker Compose ├── Dockerfile # Dockerfile cho PHP/Laravel ├── .dockerignore # Loại trừ files khi build ├── .env.docker # Environment cho Docker ├── docker-setup.sh # Script khởi động tự động ├── docker-stop.sh # Script dừng containers └── docker/ ├── nginx/ │ └── default.conf # Cấu hình Nginx ├── supervisor/ │ └── supervisord.conf # Cấu hình Supervisor └── mysql/ └── my.cnf # Cấu hình MySQL ``` ## 🔧 Các Lệnh Docker Hữu Ích ### Quản lý Containers ```bash # Xem trạng thái containers docker compose ps # Xem logs của tất cả services docker compose logs -f # Xem logs của một service cụ thể docker compose logs -f app docker compose logs -f db # Dừng containers (giữ nguyên dữ liệu) docker compose down # Dừng containers và XÓA dữ liệu docker compose down -v # Khởi động lại containers docker compose restart # Khởi động lại một service cụ thể docker compose restart app ``` ### Thao tác với Container App ```bash # Truy cập vào container app docker compose exec app bash # Chạy Artisan commands docker compose exec app php artisan migrate docker compose exec app php artisan db:seed docker compose exec app php artisan tinker docker compose exec app php artisan config:clear docker compose exec app php artisan cache:clear # Cài đặt Composer packages docker compose exec app composer install docker compose exec app composer require package-name # Chạy tests docker compose exec app php artisan test ``` ### Thao tác với Database ```bash # Truy cập MySQL CLI docker compose exec db mysql -u laravel -plaravel123 luckywheel # Backup database docker compose exec db mysqldump -u laravel -plaravel123 luckywheel > backup_$(date +%Y%m%d_%H%M%S).sql # Restore database docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < backup.sql # Reset database docker compose exec app php artisan migrate:fresh --seed ``` ### Quản lý Images ```bash # Xem danh sách images docker images # Rebuild image (không dùng cache) docker compose build --no-cache # Xóa images không sử dụng docker image prune -a ``` ## 🔍 Xử Lý Sự Cố ### Lỗi: Port đã được sử dụng ```bash # Kiểm tra process đang sử dụng port sudo lsof -i :8080 sudo lsof -i :3307 # Hoặc thay đổi port trong docker-compose.yml # Ví dụ: "8080:80" -> "8081:80" ``` ### Lỗi: Permission denied ```bash # Cấp quyền cho thư mục storage và bootstrap docker compose exec app chown -R www-data:www-data /var/www/storage docker compose exec app chown -R www-data:www-data /var/www/bootstrap/cache docker compose exec app chmod -R 775 /var/www/storage docker compose exec app chmod -R 775 /var/www/bootstrap/cache ``` ### Lỗi: Cannot connect to MySQL ```bash # Kiểm tra MySQL đã khởi động chưa docker compose ps # Xem logs MySQL docker compose logs db # Restart MySQL container docker compose restart db # Chờ 30 giây sau khi khởi động MySQL ``` ### Lỗi: Composer dependencies ```bash # Xóa vendor và cài lại docker compose exec app rm -rf vendor docker compose exec app composer install --optimize-autoloader ``` ### Reset hoàn toàn dự án ```bash # Dừng và xóa tất cả (bao gồm volumes) docker compose down -v # Xóa images docker rmi luckywheel_app # Chạy lại setup ./docker-setup.sh ``` ## 📊 Giám sát Resources ```bash # Xem tài nguyên đang sử dụng docker stats # Xem dung lượng đang sử dụng docker system df # Dọn dẹp tài nguyên không sử dụng docker system prune -a ``` ## 🔐 Bảo Mật ### Trong môi trường Production: 1. Thay đổi tất cả passwords trong `.env.docker` 2. Đặt `APP_DEBUG=false` 3. Đặt `APP_ENV=production` 4. Tắt PHPMyAdmin (comment trong docker-compose.yml) 5. Sử dụng HTTPS 6. Giới hạn exposed ports ### File .env.docker cho Production: ```env APP_ENV=production APP_DEBUG=false DB_PASSWORD= MYSQL_ROOT_PASSWORD= ``` ## 🚀 Deploy lên Server ### 1. Clone repository ```bash git clone cd LuckyWheel ``` ### 2. Chạy setup ```bash ./docker-setup.sh ``` ### 3. Cấu hình reverse proxy (Nginx) ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ## 📝 Ghi Chú - Tất cả dữ liệu database được lưu trong Docker volume `dbdata` - Redis data được lưu trong volume `redisdata` - Source code được mount từ host vào container, thay đổi sẽ reflect ngay lập tức - Logs được lưu trong `/var/log/supervisor/` bên trong container ## 💡 Tips & Tricks 1. **Development nhanh**: Code changes tự động reflect, không cần rebuild 2. **Database GUI**: Sử dụng PHPMyAdmin tại http://localhost:8081 3. **Redis GUI**: Có thể cài thêm Redis Commander nếu cần 4. **Xem real-time logs**: `docker compose logs -f app` 5. **Quick restart**: `docker compose restart app` thay vì down/up ## 🆘 Hỗ Trợ Nếu gặp vấn đề, kiểm tra: 1. Docker và Docker Compose đã được cài đúng phiên bản 2. Ports 8080, 8081, 3307, 6380 chưa được sử dụng 3. Có đủ dung lượng ổ cứng và RAM 4. Logs của containers: `docker compose logs` --- **Chúc bạn deploy thành công! 🎉**