xây dựng docker
This commit is contained in:
28
.dockerignore
Normal file
28
.dockerignore
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
node_modules/
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
|
vendor/
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.gitattributes
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.docker
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
*.log
|
||||||
|
storage/logs/*
|
||||||
|
storage/framework/cache/*
|
||||||
|
storage/framework/sessions/*
|
||||||
|
storage/framework/views/*
|
||||||
|
bootstrap/cache/*
|
||||||
|
.phpunit.result.cache
|
||||||
|
coverage/
|
||||||
|
*.sql
|
||||||
|
*.csv
|
||||||
|
*.backup
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
23
.env
23
.env
@@ -1,30 +1,32 @@
|
|||||||
APP_NAME=Laravel
|
APP_NAME=LuckyWheel
|
||||||
APP_ENV=local
|
APP_ENV=local
|
||||||
APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU=
|
APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU=
|
||||||
APP_DEBUG=true
|
APP_DEBUG=true
|
||||||
APP_URL=http://localhost
|
APP_URL=http://localhost:8080
|
||||||
|
|
||||||
LOG_CHANNEL=stack
|
LOG_CHANNEL=stack
|
||||||
LOG_DEPRECATIONS_CHANNEL=null
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
LOG_LEVEL=debug
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# Database Configuration for Docker
|
||||||
DB_CONNECTION=mysql
|
DB_CONNECTION=mysql
|
||||||
DB_HOST=127.0.0.1
|
DB_HOST=db
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=luckywheel
|
DB_DATABASE=luckywheel
|
||||||
DB_USERNAME=laravel
|
DB_USERNAME=laravel
|
||||||
DB_PASSWORD=laravel123
|
DB_PASSWORD=laravel123
|
||||||
|
|
||||||
BROADCAST_DRIVER=log
|
BROADCAST_DRIVER=log
|
||||||
CACHE_DRIVER=file
|
CACHE_DRIVER=redis
|
||||||
FILESYSTEM_DISK=local
|
FILESYSTEM_DISK=local
|
||||||
QUEUE_CONNECTION=sync
|
QUEUE_CONNECTION=sync
|
||||||
SESSION_DRIVER=file
|
SESSION_DRIVER=redis
|
||||||
SESSION_LIFETIME=120
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
MEMCACHED_HOST=127.0.0.1
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
|
||||||
REDIS_HOST=127.0.0.1
|
# Redis Configuration for Docker
|
||||||
|
REDIS_HOST=redis
|
||||||
REDIS_PASSWORD=null
|
REDIS_PASSWORD=null
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
|
|
||||||
@@ -48,7 +50,7 @@ PUSHER_APP_KEY=
|
|||||||
PUSHER_APP_SECRET=
|
PUSHER_APP_SECRET=
|
||||||
PUSHER_HOST=
|
PUSHER_HOST=
|
||||||
PUSHER_PORT=443
|
PUSHER_PORT=443
|
||||||
PUSHER_SCHEME=https
|
PUSHER_SCHEME=http
|
||||||
PUSHER_APP_CLUSTER=mt1
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
@@ -56,10 +58,3 @@ VITE_PUSHER_HOST="${PUSHER_HOST}"
|
|||||||
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
||||||
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
||||||
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
||||||
BROADCAST_DRIVER=pusher
|
|
||||||
|
|
||||||
PUSHER_APP_ID=1909415
|
|
||||||
PUSHER_APP_KEY=242f238ba1f5a0a20de3
|
|
||||||
PUSHER_APP_SECRET=5afc35e0dddb385d586f
|
|
||||||
PUSHER_APP_CLUSTER=ap1
|
|
||||||
|
|||||||
65
.env.backup.20260114_125203
Normal file
65
.env.backup.20260114_125203
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
APP_NAME=Laravel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://localhost
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=luckywheel
|
||||||
|
DB_USERNAME=laravel
|
||||||
|
DB_PASSWORD=laravel123
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
FILESYSTEM_DISK=local
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_MAILER=smtp
|
||||||
|
MAIL_HOST=mailpit
|
||||||
|
MAIL_PORT=1025
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
MAIL_FROM_ADDRESS="hello@example.com"
|
||||||
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_HOST=
|
||||||
|
PUSHER_PORT=443
|
||||||
|
PUSHER_SCHEME=https
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
VITE_PUSHER_HOST="${PUSHER_HOST}"
|
||||||
|
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
||||||
|
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
||||||
|
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=pusher
|
||||||
|
|
||||||
|
PUSHER_APP_ID=1909415
|
||||||
|
PUSHER_APP_KEY=242f238ba1f5a0a20de3
|
||||||
|
PUSHER_APP_SECRET=5afc35e0dddb385d586f
|
||||||
|
PUSHER_APP_CLUSTER=ap1
|
||||||
60
.env.backup.20260114_140612
Normal file
60
.env.backup.20260114_140612
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
APP_NAME=LuckyWheel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://localhost:8080
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# Database Configuration for Docker
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=db
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=luckywheel
|
||||||
|
DB_USERNAME=laravel
|
||||||
|
DB_PASSWORD=laravel123
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=redis
|
||||||
|
FILESYSTEM_DISK=local
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=redis
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
|
||||||
|
# Redis Configuration for Docker
|
||||||
|
REDIS_HOST=redis
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_MAILER=smtp
|
||||||
|
MAIL_HOST=mailpit
|
||||||
|
MAIL_PORT=1025
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
MAIL_FROM_ADDRESS="hello@example.com"
|
||||||
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_HOST=
|
||||||
|
PUSHER_PORT=443
|
||||||
|
PUSHER_SCHEME=http
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
VITE_PUSHER_HOST="${PUSHER_HOST}"
|
||||||
|
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
||||||
|
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
||||||
|
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
60
.env.docker
Normal file
60
.env.docker
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
APP_NAME=LuckyWheel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:BR0ZC/fPxHWU2+eytLLj9pYdxn5QhyDm1sS+qeaA1OU=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://localhost:8080
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
LOG_DEPRECATIONS_CHANNEL=null
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
# Database Configuration for Docker
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=db
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=luckywheel
|
||||||
|
DB_USERNAME=laravel
|
||||||
|
DB_PASSWORD=laravel123
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=redis
|
||||||
|
FILESYSTEM_DISK=local
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=redis
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
|
||||||
|
# Redis Configuration for Docker
|
||||||
|
REDIS_HOST=redis
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_MAILER=smtp
|
||||||
|
MAIL_HOST=mailpit
|
||||||
|
MAIL_PORT=1025
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
MAIL_FROM_ADDRESS="hello@example.com"
|
||||||
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_HOST=
|
||||||
|
PUSHER_PORT=443
|
||||||
|
PUSHER_SCHEME=http
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
VITE_PUSHER_HOST="${PUSHER_HOST}"
|
||||||
|
VITE_PUSHER_PORT="${PUSHER_PORT}"
|
||||||
|
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
|
||||||
|
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
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! 🎉**
|
||||||
60
Dockerfile
Normal file
60
Dockerfile
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
FROM php:8.1-fpm
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
libpng-dev \
|
||||||
|
libonig-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libicu-dev \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
nginx \
|
||||||
|
supervisor
|
||||||
|
|
||||||
|
# Clear cache
|
||||||
|
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install PHP extensions
|
||||||
|
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd intl
|
||||||
|
|
||||||
|
# Install Redis extension
|
||||||
|
RUN pecl install redis && docker-php-ext-enable redis
|
||||||
|
|
||||||
|
# Get latest Composer
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /var/www
|
||||||
|
|
||||||
|
# Copy existing application directory contents
|
||||||
|
COPY . /var/www
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN composer install --optimize-autoloader --no-dev
|
||||||
|
|
||||||
|
# Create required directories and set permissions
|
||||||
|
RUN mkdir -p /var/www/storage/framework/sessions \
|
||||||
|
/var/www/storage/framework/views \
|
||||||
|
/var/www/storage/framework/cache \
|
||||||
|
/var/www/storage/framework/testing \
|
||||||
|
/var/www/storage/logs \
|
||||||
|
/var/www/storage/app/public \
|
||||||
|
/var/www/bootstrap/cache
|
||||||
|
|
||||||
|
# Set ownership and permissions
|
||||||
|
RUN chown -R www-data:www-data /var/www
|
||||||
|
RUN chmod -R 775 /var/www/storage /var/www/bootstrap/cache
|
||||||
|
|
||||||
|
# Copy nginx configuration
|
||||||
|
COPY docker/nginx/default.conf /etc/nginx/sites-available/default
|
||||||
|
|
||||||
|
# Copy supervisor configuration
|
||||||
|
COPY docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||||
|
|
||||||
|
# Expose port 80
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Start supervisor
|
||||||
|
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
|
||||||
163
HUONG_DAN_DOCKER.md
Normal file
163
HUONG_DAN_DOCKER.md
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
# 🎡 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`<br>Password: `laravel123` |
|
||||||
|
| **MySQL** | localhost:3307 | Database: `luckywheel`<br>User: `laravel`<br>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
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 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ẻ! 🎉**
|
||||||
0
bootstrap/cache/.gitignore
vendored
Normal file → Executable file
0
bootstrap/cache/.gitignore
vendored
Normal file → Executable file
90
docker-compose.yml
Normal file
90
docker-compose.yml
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
services:
|
||||||
|
# PHP & Nginx Application
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: luckywheel_app
|
||||||
|
restart: unless-stopped
|
||||||
|
working_dir: /var/www
|
||||||
|
volumes:
|
||||||
|
- ./:/var/www
|
||||||
|
- ./docker/nginx/default.conf:/etc/nginx/sites-available/default
|
||||||
|
- ./docker/supervisor/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||||
|
ports:
|
||||||
|
- "8080:80"
|
||||||
|
networks:
|
||||||
|
- luckywheel
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
- redis
|
||||||
|
environment:
|
||||||
|
- APP_ENV=local
|
||||||
|
- APP_DEBUG=true
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=3306
|
||||||
|
- DB_DATABASE=luckywheel
|
||||||
|
- DB_USERNAME=laravel
|
||||||
|
- DB_PASSWORD=laravel123
|
||||||
|
- REDIS_HOST=redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
|
||||||
|
# MySQL Database
|
||||||
|
db:
|
||||||
|
image: mysql:8.0
|
||||||
|
container_name: luckywheel_db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: luckywheel
|
||||||
|
MYSQL_USER: laravel
|
||||||
|
MYSQL_PASSWORD: laravel123
|
||||||
|
MYSQL_ROOT_PASSWORD: root123
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: 0
|
||||||
|
volumes:
|
||||||
|
- dbdata:/var/lib/mysql
|
||||||
|
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
|
||||||
|
ports:
|
||||||
|
- "3307:3306"
|
||||||
|
networks:
|
||||||
|
- luckywheel
|
||||||
|
command: --default-authentication-plugin=mysql_native_password
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: luckywheel_redis
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "6380:6379"
|
||||||
|
networks:
|
||||||
|
- luckywheel
|
||||||
|
volumes:
|
||||||
|
- redisdata:/data
|
||||||
|
|
||||||
|
# PHPMyAdmin (Optional - for database management)
|
||||||
|
phpmyadmin:
|
||||||
|
image: phpmyadmin/phpmyadmin
|
||||||
|
container_name: luckywheel_phpmyadmin
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8081:80"
|
||||||
|
environment:
|
||||||
|
PMA_HOST: db
|
||||||
|
PMA_PORT: 3306
|
||||||
|
PMA_USER: laravel
|
||||||
|
PMA_PASSWORD: laravel123
|
||||||
|
UPLOAD_LIMIT: 100M
|
||||||
|
networks:
|
||||||
|
- luckywheel
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
|
||||||
|
networks:
|
||||||
|
luckywheel:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
dbdata:
|
||||||
|
driver: local
|
||||||
|
redisdata:
|
||||||
|
driver: local
|
||||||
99
docker-setup.sh
Executable file
99
docker-setup.sh
Executable file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script khởi động Docker cho dự án Lucky Wheel
|
||||||
|
echo "🎡 Lucky Wheel - Docker Setup Script"
|
||||||
|
echo "===================================="
|
||||||
|
|
||||||
|
# Kiểm tra Docker và Docker Compose
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo "❌ Docker chưa được cài đặt. Vui lòng cài đặt Docker trước."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v docker compose &> /dev/null; then
|
||||||
|
echo "❌ Docker Compose chưa được cài đặt. Vui lòng cài đặt Docker Compose trước."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Docker và Docker Compose đã được cài đặt"
|
||||||
|
|
||||||
|
# Sao chép file .env.docker thành .env
|
||||||
|
echo ""
|
||||||
|
echo "📋 Cấu hình file .env..."
|
||||||
|
if [ -f .env ]; then
|
||||||
|
echo "⚠️ File .env đã tồn tại. Tạo backup..."
|
||||||
|
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
|
||||||
|
fi
|
||||||
|
cp .env.docker .env
|
||||||
|
echo "✅ Đã sao chép .env.docker thành .env"
|
||||||
|
|
||||||
|
# Dừng và xóa các container cũ (nếu có)
|
||||||
|
echo ""
|
||||||
|
echo "🛑 Dừng và xóa các container cũ..."
|
||||||
|
docker compose down -v
|
||||||
|
|
||||||
|
# Build và khởi động containers
|
||||||
|
echo ""
|
||||||
|
echo "🔨 Building Docker images..."
|
||||||
|
docker compose build --no-cache
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🚀 Khởi động containers..."
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Chờ MySQL khởi động hoàn toàn
|
||||||
|
echo ""
|
||||||
|
echo "⏳ Chờ MySQL khởi động (30 giây)..."
|
||||||
|
sleep 30
|
||||||
|
|
||||||
|
# Chạy migrations và seeders
|
||||||
|
echo ""
|
||||||
|
echo "📊 Chạy database migrations..."
|
||||||
|
docker compose exec app php artisan migrate --force
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🌱 Chạy database seeders..."
|
||||||
|
docker compose exec app php artisan db:seed --class=DanhSachGiaiThuongSeeder --force || true
|
||||||
|
|
||||||
|
# Tạo symbolic link cho storage
|
||||||
|
echo ""
|
||||||
|
echo "🔗 Tạo symbolic link cho storage..."
|
||||||
|
docker compose exec app php artisan storage:link
|
||||||
|
|
||||||
|
# Clear cache
|
||||||
|
echo ""
|
||||||
|
echo "🧹 Clear cache..."
|
||||||
|
docker compose exec app php artisan config:clear
|
||||||
|
docker compose exec app php artisan cache:clear
|
||||||
|
docker compose exec app php artisan view:clear
|
||||||
|
docker compose exec app php artisan route:clear
|
||||||
|
|
||||||
|
# Optimize
|
||||||
|
echo ""
|
||||||
|
echo "⚡ Optimize application..."
|
||||||
|
docker compose exec app php artisan config:cache
|
||||||
|
docker compose exec app php artisan route:cache
|
||||||
|
docker compose exec app php artisan view:cache
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Hoàn tất!"
|
||||||
|
echo ""
|
||||||
|
echo "📌 Thông tin dịch vụ:"
|
||||||
|
echo " - Ứng dụng Laravel: http://localhost:8080"
|
||||||
|
echo " - PHPMyAdmin: http://localhost:8081"
|
||||||
|
echo " - MySQL: localhost:3307"
|
||||||
|
echo " - Redis: localhost:6380"
|
||||||
|
echo ""
|
||||||
|
echo "📝 Thông tin đăng nhập MySQL:"
|
||||||
|
echo " - Database: luckywheel"
|
||||||
|
echo " - Username: laravel"
|
||||||
|
echo " - Password: laravel123"
|
||||||
|
echo " - Root Password: root123"
|
||||||
|
echo ""
|
||||||
|
echo "🔧 Các lệnh hữu ích:"
|
||||||
|
echo " - Xem logs: docker compose logs -f"
|
||||||
|
echo " - Xem logs app: docker compose logs -f app"
|
||||||
|
echo " - Vào container app: docker compose exec app bash"
|
||||||
|
echo " - Dừng services: docker compose down"
|
||||||
|
echo " - Khởi động lại: docker compose restart"
|
||||||
|
echo ""
|
||||||
11
docker-stop.sh
Executable file
11
docker-stop.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script dừng Docker cho dự án Lucky Wheel
|
||||||
|
echo "🛑 Dừng Lucky Wheel Docker Containers..."
|
||||||
|
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
echo "✅ Đã dừng tất cả containers"
|
||||||
|
echo ""
|
||||||
|
echo "💡 Để khởi động lại, chạy: ./docker-setup.sh"
|
||||||
|
echo "💡 Để xóa tất cả dữ liệu (bao gồm database), chạy: docker compose down -v"
|
||||||
13
docker/mysql/my.cnf
Normal file
13
docker/mysql/my.cnf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
[mysqld]
|
||||||
|
character-set-server=utf8mb4
|
||||||
|
collation-server=utf8mb4_unicode_ci
|
||||||
|
default-authentication-plugin=mysql_native_password
|
||||||
|
|
||||||
|
max_allowed_packet=100M
|
||||||
|
innodb_buffer_pool_size=256M
|
||||||
|
|
||||||
|
[client]
|
||||||
|
default-character-set=utf8mb4
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
default-character-set=utf8mb4
|
||||||
45
docker/nginx/default.conf
Normal file
45
docker/nginx/default.conf
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
root /var/www/public;
|
||||||
|
|
||||||
|
index index.php index.html index.htm;
|
||||||
|
|
||||||
|
charset utf-8;
|
||||||
|
|
||||||
|
# Increase upload size
|
||||||
|
client_max_body_size 100M;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /favicon.ico { access_log off; log_not_found off; }
|
||||||
|
location = /robots.txt { access_log off; log_not_found off; }
|
||||||
|
|
||||||
|
error_page 404 /index.php;
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_read_timeout 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.(?!well-known).* {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Disable access to hidden files
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
access_log off;
|
||||||
|
log_not_found off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Security headers
|
||||||
|
add_header X-Frame-Options "SAMEORIGIN";
|
||||||
|
add_header X-Content-Type-Options "nosniff";
|
||||||
|
add_header X-XSS-Protection "1; mode=block";
|
||||||
|
}
|
||||||
19
docker/supervisor/supervisord.conf
Normal file
19
docker/supervisor/supervisord.conf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
[supervisord]
|
||||||
|
nodaemon=true
|
||||||
|
user=root
|
||||||
|
logfile=/var/log/supervisor/supervisord.log
|
||||||
|
pidfile=/var/run/supervisord.pid
|
||||||
|
|
||||||
|
[program:php-fpm]
|
||||||
|
command=/usr/local/sbin/php-fpm -F
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
stdout_logfile=/var/log/supervisor/php-fpm.log
|
||||||
|
stderr_logfile=/var/log/supervisor/php-fpm-error.log
|
||||||
|
|
||||||
|
[program:nginx]
|
||||||
|
command=/usr/sbin/nginx -g "daemon off;"
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
stdout_logfile=/var/log/supervisor/nginx.log
|
||||||
|
stderr_logfile=/var/log/supervisor/nginx-error.log
|
||||||
@@ -1 +1 @@
|
|||||||
/home/x79/LuckyWheel/storage/app/public
|
/var/www/storage/app/public
|
||||||
0
storage/app/.gitignore
vendored
Normal file → Executable file
0
storage/app/.gitignore
vendored
Normal file → Executable file
0
storage/app/public/.gitignore
vendored
Normal file → Executable file
0
storage/app/public/.gitignore
vendored
Normal file → Executable file
0
storage/framework/.gitignore
vendored
Normal file → Executable file
0
storage/framework/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/data/.gitignore
vendored
Normal file → Executable file
0
storage/framework/cache/data/.gitignore
vendored
Normal file → Executable file
0
storage/framework/sessions/.gitignore
vendored
Normal file → Executable file
0
storage/framework/sessions/.gitignore
vendored
Normal file → Executable file
0
storage/framework/testing/.gitignore
vendored
Normal file → Executable file
0
storage/framework/testing/.gitignore
vendored
Normal file → Executable file
0
storage/framework/views/.gitignore
vendored
Normal file → Executable file
0
storage/framework/views/.gitignore
vendored
Normal file → Executable file
0
storage/logs/.gitignore
vendored
Normal file → Executable file
0
storage/logs/.gitignore
vendored
Normal file → Executable file
Reference in New Issue
Block a user