Files
luckywheel/DOCKER_README.md
2026-01-14 14:51:03 +07:00

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: 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

# 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:

  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:

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

  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! 🎉