xây dựng docker
This commit is contained in:
310
DOCKER_README.md
Normal file
310
DOCKER_README.md
Normal file
@@ -0,0 +1,310 @@
|
||||
# 🐳 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`<br>Pass: `laravel123` |
|
||||
| **MySQL** | localhost:3307 | Database: `luckywheel`<br>User: `laravel`<br>Pass: `laravel123`<br>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=<password_mạnh>
|
||||
MYSQL_ROOT_PASSWORD=<password_mạnh>
|
||||
```
|
||||
|
||||
## 🚀 Deploy lên Server
|
||||
|
||||
### 1. Clone repository
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
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! 🎉**
|
||||
Reference in New Issue
Block a user