7.7 KiB
7.7 KiB
🐳 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:
# 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ị)
./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
# 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: laravelPass: laravel123 |
| MySQL | localhost:3307 | Database: luckywheelUser: laravelPass: laravel123Root 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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:
- Thay đổi tất cả passwords trong
.env.docker - Đặt
APP_DEBUG=false - Đặt
APP_ENV=production - Tắt PHPMyAdmin (comment trong docker-compose.yml)
- Sử dụng HTTPS
- Giới hạn exposed ports
File .env.docker cho Production:
APP_ENV=production
APP_DEBUG=false
DB_PASSWORD=<password_mạnh>
MYSQL_ROOT_PASSWORD=<password_mạnh>
🚀 Deploy lên Server
1. Clone repository
git clone <repository-url>
cd LuckyWheel
2. Chạy setup
./docker-setup.sh
3. Cấu hình reverse proxy (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
- Development nhanh: Code changes tự động reflect, không cần rebuild
- Database GUI: Sử dụng PHPMyAdmin tại http://localhost:8081
- Redis GUI: Có thể cài thêm Redis Commander nếu cần
- Xem real-time logs:
docker compose logs -f app - Quick restart:
docker compose restart appthay vì down/up
🆘 Hỗ Trợ
Nếu gặp vấn đề, kiểm tra:
- Docker và Docker Compose đã được cài đúng phiên bản
- Ports 8080, 8081, 3307, 6380 chưa được sử dụng
- Có đủ dung lượng ổ cứng và RAM
- Logs của containers:
docker compose logs
Chúc bạn deploy thành công! 🎉