add docker for local and production
This commit is contained in:
277
REDIS-FIX-GUIDE.md
Normal file
277
REDIS-FIX-GUIDE.md
Normal file
@@ -0,0 +1,277 @@
|
||||
# 🔴 Redis Fix Guide untuk Laravel Docker
|
||||
|
||||
## 🎯 Masalah yang Diselesaikan
|
||||
|
||||
**Error yang dialami:**
|
||||
```
|
||||
Class "Redis" not found
|
||||
```
|
||||
|
||||
**Root Cause:**
|
||||
- PHP Redis extension tidak terinstall di container
|
||||
- Laravel dikonfigurasi untuk menggunakan Redis tetapi extension tidak tersedia
|
||||
- Container perlu rebuild untuk install Redis extension
|
||||
|
||||
## 🚀 Solusi yang Diimplementasi
|
||||
|
||||
### **1. Updated Dockerfiles**
|
||||
|
||||
**Production (Dockerfile):**
|
||||
```dockerfile
|
||||
# Install Redis extension
|
||||
RUN pecl install redis \
|
||||
&& docker-php-ext-enable redis
|
||||
```
|
||||
|
||||
**Development (Dockerfile.dev):**
|
||||
```dockerfile
|
||||
# Install Redis and Xdebug for development
|
||||
RUN pecl install redis xdebug \
|
||||
&& docker-php-ext-enable redis xdebug
|
||||
```
|
||||
|
||||
### **2. Fix Steps yang Dijalankan**
|
||||
|
||||
```bash
|
||||
# 1. Update Dockerfile dengan Redis extension
|
||||
# 2. Rebuild container
|
||||
docker-compose build --no-cache app
|
||||
|
||||
# 3. Restart container dengan image baru
|
||||
docker-compose up -d app
|
||||
|
||||
# 4. Verify Redis extension installed
|
||||
docker-compose exec app php -m | grep redis
|
||||
|
||||
# 5. Test Redis connection
|
||||
docker-compose exec app php -r "
|
||||
\$redis = new Redis();
|
||||
\$redis->connect('redis', 6379);
|
||||
echo 'Redis connected successfully';
|
||||
"
|
||||
|
||||
# 6. Clear Laravel cache
|
||||
docker-compose exec app php artisan config:clear
|
||||
docker-compose exec app php artisan cache:clear
|
||||
```
|
||||
|
||||
## ✅ Verifikasi Fix Berhasil
|
||||
|
||||
### **1. PHP Redis Extension**
|
||||
```bash
|
||||
# Cek extension terinstall
|
||||
docker-compose exec app php -m | grep redis
|
||||
# Output: redis
|
||||
```
|
||||
|
||||
### **2. Redis Connection Test**
|
||||
```bash
|
||||
# Test koneksi Redis
|
||||
./docker-test-redis.sh dev
|
||||
```
|
||||
|
||||
**Expected Output:**
|
||||
```
|
||||
[SUCCESS] PHP Redis extension is installed
|
||||
[SUCCESS] Redis server is responding
|
||||
[SUCCESS] PHP Redis connection working
|
||||
[SUCCESS] Laravel cache operations working
|
||||
```
|
||||
|
||||
### **3. Web Application**
|
||||
```bash
|
||||
# Test web response
|
||||
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/
|
||||
# Output: 302 (redirect ke login page)
|
||||
```
|
||||
|
||||
### **4. Laravel Cache Operations**
|
||||
```bash
|
||||
# Test Laravel cache dengan Redis
|
||||
docker-compose exec app php artisan tinker --execute="
|
||||
Cache::put('test', 'redis-working', 60);
|
||||
echo Cache::get('test');
|
||||
"
|
||||
# Output: redis-working
|
||||
```
|
||||
|
||||
## 🛠️ Tools dan Scripts
|
||||
|
||||
### **`docker-test-redis.sh`**
|
||||
Comprehensive Redis testing script:
|
||||
- ✅ Test PHP Redis extension
|
||||
- ✅ Test Redis server connection
|
||||
- ✅ Test Laravel cache operations
|
||||
- ✅ Show Redis configuration
|
||||
- ✅ Show server information
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
# Test development environment
|
||||
./docker-test-redis.sh dev
|
||||
|
||||
# Test production environment
|
||||
./docker-test-redis.sh prod
|
||||
```
|
||||
|
||||
### **`docker-rebuild.sh`**
|
||||
Updated untuk include Redis testing:
|
||||
- ✅ Test Redis extension di build process
|
||||
- ✅ Verify Redis connection setelah rebuild
|
||||
- ✅ Comprehensive testing semua extensions
|
||||
|
||||
## 🔧 Laravel Configuration
|
||||
|
||||
### **Environment Variables (.env)**
|
||||
```env
|
||||
# Redis Configuration
|
||||
REDIS_HOST=redis
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
# Cache using Redis
|
||||
CACHE_DRIVER=redis
|
||||
|
||||
# Sessions using Redis
|
||||
SESSION_DRIVER=redis
|
||||
|
||||
# Queue using Redis
|
||||
QUEUE_CONNECTION=redis
|
||||
```
|
||||
|
||||
### **Config Files**
|
||||
Laravel otomatis membaca konfigurasi dari environment variables untuk:
|
||||
- `config/cache.php` - Cache driver
|
||||
- `config/session.php` - Session driver
|
||||
- `config/queue.php` - Queue driver
|
||||
- `config/database.php` - Redis connection
|
||||
|
||||
## 🚨 Common Issues & Solutions
|
||||
|
||||
### **1. Redis Extension Missing**
|
||||
**Symptoms:** `Class "Redis" not found`
|
||||
**Solution:**
|
||||
```bash
|
||||
# Rebuild containers
|
||||
./docker-rebuild.sh dev
|
||||
```
|
||||
|
||||
### **2. Redis Connection Failed**
|
||||
**Symptoms:** `Connection refused`
|
||||
**Solution:**
|
||||
```bash
|
||||
# Check Redis container
|
||||
docker-compose ps | grep redis
|
||||
|
||||
# Restart Redis
|
||||
docker-compose restart redis
|
||||
|
||||
# Test connection
|
||||
./docker-test-redis.sh dev
|
||||
```
|
||||
|
||||
### **3. Laravel Config Not Loading**
|
||||
**Symptoms:** Cache/session tidak menggunakan Redis
|
||||
**Solution:**
|
||||
```bash
|
||||
# Clear Laravel 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
|
||||
```
|
||||
|
||||
### **4. Permission Issues with Redis**
|
||||
**Symptoms:** Cannot write to cache
|
||||
**Solution:**
|
||||
```bash
|
||||
# Fix permissions
|
||||
./docker-fix-permissions.sh dev
|
||||
|
||||
# Clear cache
|
||||
docker-compose exec app php artisan cache:clear
|
||||
```
|
||||
|
||||
## 📋 Best Practices
|
||||
|
||||
### **1. Container Management**
|
||||
- Always rebuild containers setelah update Dockerfile
|
||||
- Use scripts untuk consistent operations
|
||||
- Test functionality setelah changes
|
||||
|
||||
### **2. Development Workflow**
|
||||
```bash
|
||||
# Complete setup dengan Redis
|
||||
./docker-quick-setup.sh dev
|
||||
|
||||
# Test semua functionality
|
||||
./docker-test-redis.sh dev
|
||||
|
||||
# Fix jika ada issues
|
||||
./docker-fix-permissions.sh dev
|
||||
```
|
||||
|
||||
### **3. Production Deployment**
|
||||
```bash
|
||||
# Build production containers
|
||||
./docker-rebuild.sh prod
|
||||
|
||||
# Verify Redis working
|
||||
./docker-test-redis.sh prod
|
||||
|
||||
# Import database
|
||||
./docker-import-db.sh prod
|
||||
```
|
||||
|
||||
## 🔍 Monitoring & Debugging
|
||||
|
||||
### **Redis Monitoring**
|
||||
```bash
|
||||
# Redis logs
|
||||
docker-compose logs redis
|
||||
|
||||
# Redis CLI access
|
||||
docker-compose exec redis redis-cli
|
||||
|
||||
# Redis info
|
||||
docker-compose exec redis redis-cli info
|
||||
|
||||
# Monitor Redis commands
|
||||
docker-compose exec redis redis-cli monitor
|
||||
```
|
||||
|
||||
### **Laravel Debugging**
|
||||
```bash
|
||||
# Check Laravel logs
|
||||
docker-compose exec app tail -f storage/logs/laravel.log
|
||||
|
||||
# Check cache status
|
||||
docker-compose exec app php artisan cache:table
|
||||
|
||||
# Test cache manually
|
||||
docker-compose exec app php artisan tinker
|
||||
# Cache::put('test', 'value', 60);
|
||||
# Cache::get('test');
|
||||
```
|
||||
|
||||
## 📈 Performance Tips
|
||||
|
||||
### **1. Redis Optimization**
|
||||
- Use appropriate data types
|
||||
- Set proper expiration times
|
||||
- Monitor memory usage
|
||||
|
||||
### **2. Laravel Cache Strategy**
|
||||
```bash
|
||||
# Cache configuration
|
||||
php artisan config:cache
|
||||
|
||||
# Cache routes
|
||||
php artisan route:cache
|
||||
|
||||
# Cache views
|
||||
php artisan view:cache
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**✅ Dengan implementasi fix ini, masalah "Class Redis not found" sudah teratasi dan aplikasi Laravel berjalan normal dengan Redis.**
|
||||
Reference in New Issue
Block a user