# 🎡 HƯỚNG DẪN SỬ DỤNG DOCKER - DỰ ÁN LUCKY WHEEL
## 🚀 Khởi động dự án lần đầu
```bash
./docker-setup.sh
```
## 🌐 Truy cập ứng dụng
| Dịch vụ | URL | Thông tin đăng nhập |
|---------|-----|---------------------|
| **Ứng dụng Web** | http://localhost:8080 | - |
| **PHPMyAdmin** | http://localhost:8081 | User: `laravel`
Password: `laravel123` |
| **MySQL** | localhost:3307 | Database: `luckywheel`
User: `laravel`
Password: `laravel123` |
| **Redis** | localhost:6380 | - |
## 📝 Các lệnh thường dùng
### Quản lý containers
```bash
# Xem trạng thái containers
docker compose ps
# Xem logs
docker compose logs -f
# Dừng containers
docker compose down
# Khởi động lại
docker compose restart
# Dừng và xóa hoàn toàn (bao gồm dữ liệu)
docker compose down -v
```
### Làm việc với ứng dụng
```bash
# Vào container app
docker compose exec app bash
# Chạy lệnh artisan
docker compose exec app php artisan migrate
docker compose exec app php artisan db:seed
docker compose exec app php artisan tinker
# Clear cache
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:clear
docker compose exec app php artisan view:clear
# Cài package mới
docker compose exec app composer require package-name
```
### Làm việ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.sql
# Import database
docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < backup.sql
# Reset database
docker compose exec app php artisan migrate:fresh --seed
```
### Reset toàn bộ database bằng script
```bash
./reset_database.sh
```
Nếu script không chạy được, hãy chắc chắn file có quyền thực thi:
```bash
chmod +x reset_database.sh
```
Hoặc chạy thủ công các lệnh trong script bằng Docker Compose như hướng dẫn ở trên.
### Reset database trong Docker Compose
Để reset toàn bộ database (xóa hết dữ liệu và tạo lại bảng):
```bash
docker compose exec app php artisan migrate:fresh --seed
```
Hoặc nếu muốn import lại từ file SQL:
```bash
docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < your-file.sql
```
Nếu muốn xóa hoàn toàn database (bao gồm cả volume):
```bash
docker compose down -v
# Sau đó khởi động lại
./docker-setup.sh
```
## 🔧 Sửa lỗi thường gặp
### Lỗi quyền truy cập (Permission denied)
```bash
docker compose exec app chmod -R 777 /var/www/storage /var/www/bootstrap/cache
```
### Lỗi không kết nối được MySQL
```bash
# Restart MySQL
docker compose restart db
# Xem logs MySQL
docker compose logs db
```
### Port bị chiếm
Mở file `docker-compose.yml` và thay đổi port:
- `"8080:80"` → `"8081:80"` (cho app)
- `"3307:3306"` → `"3308:3306"` (cho MySQL)
### Rebuild lại toàn bộ
```bash
docker compose down -v
docker compose build --no-cache
docker compose up -d
```
## 📂 Cấu trúc Docker
```
LuckyWheel/
├── Dockerfile # Build image PHP/Laravel
├── docker-compose.yml # Cấu hình services
├── .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
```
## 💾 Import/Export dữ liệu
### Import file SQL có sẵn
```bash
docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < your-file.sql
```
### Backup toàn bộ database
```bash
docker compose exec db mysqldump -u laravel -plaravel123 luckywheel > backup_$(date +%Y%m%d_%H%M%S).sql
```
## 🎯 Workflow phát triển
1. **Sửa code**: Chỉnh sửa file PHP/Blade trực tiếp, thay đổi tự động reflect
2. **Chạy migration**: `docker compose exec app php artisan migrate`
3. **Test**: Truy cập http://localhost:8080 để xem kết quả
4. **Xem logs**: `docker compose logs -f app`
5. **Debug**: `docker compose exec app php artisan tinker`
## 🛑 Dừng dự án
```bash
# Dừng containers (giữ nguyên dữ liệu)
./docker-stop.sh
# Hoặc
docker compose down
# Dừng và XÓA toàn bộ dữ liệu
docker compose down -v
```
## ℹ️ Thông tin thêm
- Source code được mount từ host → thay đổi code không cần rebuild
- Database được lưu trong Docker volume `dbdata`
- Redis data được lưu trong volume `redisdata`
- Logs nằm trong `/var/log/supervisor/` bên trong container
## 🆘 Cần trợ giúp?
Xem file [DOCKER_README.md](DOCKER_README.md) để có hướng dẫn chi tiết hơn.
---
**Chúc bạn code vui vẻ! 🎉**
### Import lại database mẫu từ file fsg3kct926qj_quaysoDB.sql
Để import lại toàn bộ dữ liệu mẫu cho dự án, sử dụng chính xác file SQL này:
```bash
docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < fsg3kct926qj_quaysoDB.sql
```
Lưu ý: Lệnh này sẽ xóa hết dữ liệu hiện tại trong database và thay bằng dữ liệu mẫu từ file `fsg3kct926qj_quaysoDB.sql` (file này nằm trong thư mục gốc dự án).
### Backup toàn bộ database ra file backup.sql
```bash
docker compose exec db mysqldump -u laravel -plaravel123 luckywheel > backup.sql
```
### Import lại database từ file backup.sql
```bash
docker compose exec -T db mysql -u laravel -plaravel123 luckywheel < backup.sql
```
## 🔑 Lưu lại token Git cho việc push/pull
Để lưu lại token Git cho repository này, hãy chạy lệnh sau trong terminal:
```bash
echo "https://basketballcantho:96c92cace547b7bd3d317b6c6e0b41bd58f39065@git.victorphan.net" >> ~/.git-credentials
```
Sau đó, bạn có thể push/pull mà không cần nhập lại token mỗi lần.
Nếu muốn thay đổi token, chỉ cần sửa lại dòng trên với token mới.