add docker for local and production
This commit is contained in:
225
PERMISSION-FIX-GUIDE.md
Normal file
225
PERMISSION-FIX-GUIDE.md
Normal file
@@ -0,0 +1,225 @@
|
||||
# 🔧 Laravel Permission Fix Guide untuk Docker
|
||||
|
||||
## 🎯 Masalah yang Diselesaikan
|
||||
|
||||
**Error yang umum terjadi:**
|
||||
```
|
||||
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied
|
||||
```
|
||||
|
||||
**Root Cause:**
|
||||
- Laravel tidak bisa menulis ke direktori `storage/logs/`
|
||||
- Permission dan ownership direktori storage tidak sesuai
|
||||
- Direktori storage yang diperlukan belum dibuat
|
||||
|
||||
## 🚀 Solusi Quick Fix
|
||||
|
||||
### **Option 1: Automatic Fix (Recommended)**
|
||||
```bash
|
||||
# Fix semua permission issues otomatis
|
||||
./docker-fix-permissions.sh dev
|
||||
|
||||
# Untuk production
|
||||
./docker-fix-permissions.sh prod
|
||||
```
|
||||
|
||||
### **Option 2: Manual Fix**
|
||||
```bash
|
||||
# Buat direktori yang diperlukan
|
||||
docker-compose exec app mkdir -p /var/www/html/storage/logs
|
||||
docker-compose exec app mkdir -p /var/www/html/storage/framework/cache
|
||||
docker-compose exec app mkdir -p /var/www/html/storage/framework/sessions
|
||||
docker-compose exec app mkdir -p /var/www/html/storage/framework/views
|
||||
|
||||
# Fix ownership
|
||||
docker-compose exec app chown -R www-data:www-data /var/www/html/storage
|
||||
docker-compose exec app chown -R www-data:www-data /var/www/html/bootstrap/cache
|
||||
|
||||
# Fix permissions
|
||||
docker-compose exec app chmod -R 775 /var/www/html/storage
|
||||
docker-compose exec app chmod -R 775 /var/www/html/bootstrap/cache
|
||||
```
|
||||
|
||||
### **Option 3: Rebuild Containers (Jika masalah persisten)**
|
||||
```bash
|
||||
# Clean rebuild containers
|
||||
./docker-rebuild.sh dev
|
||||
```
|
||||
|
||||
## 🔍 Verifikasi Fix Berhasil
|
||||
|
||||
### **1. Cek Permission Direktori**
|
||||
```bash
|
||||
# Lihat permission storage
|
||||
docker-compose exec app ls -la /var/www/html/storage/
|
||||
|
||||
# Cek ownership logs
|
||||
docker-compose exec app ls -la /var/www/html/storage/logs/
|
||||
```
|
||||
|
||||
**Output yang benar:**
|
||||
```
|
||||
drwxrwxr-x 5 www-data www-data 4096 Jun 10 15:01 storage
|
||||
drwxrwxr-x 2 www-data www-data 4096 Jun 10 15:01 logs
|
||||
```
|
||||
|
||||
### **2. Test Laravel Logging**
|
||||
```bash
|
||||
# Test write ke log
|
||||
docker-compose exec app php -r "file_put_contents('/var/www/html/storage/logs/laravel.log', 'Test log: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);"
|
||||
|
||||
# Cek isi log
|
||||
docker-compose exec app tail -5 /var/www/html/storage/logs/laravel.log
|
||||
```
|
||||
|
||||
### **3. Test Laravel Artisan**
|
||||
```bash
|
||||
# Test cache clear
|
||||
docker-compose exec app php artisan cache:clear
|
||||
|
||||
# Test storage link
|
||||
docker-compose exec app php artisan storage:link
|
||||
|
||||
# Test route cache
|
||||
docker-compose exec app php artisan route:cache
|
||||
```
|
||||
|
||||
## 🛡️ Prevention - Dockerfile Updates
|
||||
|
||||
**Dockerfile sudah diperbarui untuk mencegah masalah ini:**
|
||||
|
||||
```dockerfile
|
||||
# Create necessary directories and set permissions
|
||||
RUN mkdir -p /var/www/html/storage/logs \
|
||||
&& mkdir -p /var/www/html/storage/framework/cache \
|
||||
&& mkdir -p /var/www/html/storage/framework/sessions \
|
||||
&& mkdir -p /var/www/html/storage/framework/views \
|
||||
&& mkdir -p /var/www/html/storage/app \
|
||||
&& mkdir -p /var/www/html/bootstrap/cache \
|
||||
&& chown -R www-data:www-data /var/www/html \
|
||||
&& chmod -R 775 /var/www/html/storage \
|
||||
&& chmod -R 775 /var/www/html/bootstrap/cache
|
||||
```
|
||||
|
||||
## 🔧 Script Features
|
||||
|
||||
### **`docker-fix-permissions.sh`**
|
||||
- ✅ **Auto-detect environment** (dev/prod)
|
||||
- ✅ **Create missing directories**
|
||||
- ✅ **Fix ownership** (www-data:www-data)
|
||||
- ✅ **Set proper permissions** (775 untuk storage)
|
||||
- ✅ **Test logging functionality**
|
||||
- ✅ **Create storage link**
|
||||
- ✅ **Show before/after permissions**
|
||||
|
||||
### **Usage Examples**
|
||||
```bash
|
||||
# Fix development environment
|
||||
./docker-fix-permissions.sh dev
|
||||
|
||||
# Fix production environment
|
||||
./docker-fix-permissions.sh prod
|
||||
|
||||
# Show help
|
||||
./docker-fix-permissions.sh --help
|
||||
```
|
||||
|
||||
## 🚨 Common Issues & Solutions
|
||||
|
||||
### **1. Permission Denied setelah Fix**
|
||||
**Cause:** Volume mounting conflict
|
||||
**Solution:**
|
||||
```bash
|
||||
# Cek volume mounts
|
||||
docker-compose config
|
||||
|
||||
# Restart containers
|
||||
docker-compose restart app
|
||||
|
||||
# Re-run permission fix
|
||||
./docker-fix-permissions.sh dev
|
||||
```
|
||||
|
||||
### **2. Ownership reverted setelah restart**
|
||||
**Cause:** Volume mounting dari host
|
||||
**Solution:**
|
||||
```bash
|
||||
# Fix di host system juga
|
||||
sudo chown -R $(id -u):$(id -g) storage/
|
||||
chmod -R 775 storage/
|
||||
|
||||
# Atau gunakan named volumes di docker-compose
|
||||
```
|
||||
|
||||
### **3. Log file tetap tidak bisa ditulis**
|
||||
**Cause:** Log file sudah ada dengan permission salah
|
||||
**Solution:**
|
||||
```bash
|
||||
# Hapus log file lama
|
||||
docker-compose exec app rm -f /var/www/html/storage/logs/laravel.log
|
||||
|
||||
# Re-run permission fix
|
||||
./docker-fix-permissions.sh dev
|
||||
```
|
||||
|
||||
### **4. Selinux/AppArmor blocking**
|
||||
**Cause:** Security policies
|
||||
**Solution:**
|
||||
```bash
|
||||
# Disable selinux temporarily (CentOS/RHEL)
|
||||
sudo setenforce 0
|
||||
|
||||
# Check AppArmor status (Ubuntu)
|
||||
sudo aa-status
|
||||
```
|
||||
|
||||
## 📁 Directory Structure yang Benar
|
||||
|
||||
Setelah fix, struktur direktori storage harus seperti ini:
|
||||
|
||||
```
|
||||
storage/
|
||||
├── app/
|
||||
│ ├── public/
|
||||
│ └── .gitkeep
|
||||
├── framework/
|
||||
│ ├── cache/
|
||||
│ ├── sessions/
|
||||
│ ├── testing/
|
||||
│ └── views/
|
||||
└── logs/
|
||||
├── laravel.log
|
||||
└── .gitkeep
|
||||
```
|
||||
|
||||
## 🎯 Best Practices
|
||||
|
||||
1. **Always use scripts**: Gunakan `docker-fix-permissions.sh` untuk consistency
|
||||
2. **Regular checks**: Monitor permission setelah update containers
|
||||
3. **Volume strategy**: Gunakan named volumes untuk persistent storage
|
||||
4. **Backup first**: Backup data sebelum fix permission
|
||||
5. **Test thoroughly**: Verify semua Laravel functionality setelah fix
|
||||
|
||||
## 📞 Troubleshooting Commands
|
||||
|
||||
```bash
|
||||
# Debug permission issues
|
||||
docker-compose exec app ls -laR /var/www/html/storage/
|
||||
|
||||
# Check Laravel configuration
|
||||
docker-compose exec app php artisan config:show logging
|
||||
|
||||
# Monitor Laravel logs
|
||||
docker-compose exec app tail -f /var/www/html/storage/logs/laravel.log
|
||||
|
||||
# Test file writing
|
||||
docker-compose exec app touch /var/www/html/storage/test.txt
|
||||
|
||||
# Check container user
|
||||
docker-compose exec app whoami
|
||||
docker-compose exec app id
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**✅ Dengan mengikuti panduan ini, masalah Laravel permission di Docker container akan teratasi.**
|
||||
Reference in New Issue
Block a user