405 lines
9.6 KiB
Markdown
405 lines
9.6 KiB
Markdown
# Docker Setup untuk CKB Laravel Application
|
|
|
|
Dokumentasi ini menjelaskan cara menjalankan aplikasi CKB menggunakan Docker untuk environment local development dan staging/production.
|
|
|
|
## Struktur File Docker
|
|
|
|
```
|
|
├── Dockerfile # Production/Staging Docker image
|
|
├── Dockerfile.dev # Development Docker image
|
|
├── docker-compose.yml # Local development setup
|
|
├── docker-compose.prod.yml # Production/Staging setup
|
|
├── .dockerignore # Files to exclude from build
|
|
└── docker/
|
|
├── env.example # Environment variables template
|
|
├── nginx.conf # Production Nginx config
|
|
├── nginx.dev.conf # Development Nginx config
|
|
├── supervisord.conf # Production supervisor config
|
|
├── supervisord.dev.conf # Development supervisor config
|
|
├── xdebug.ini # Xdebug configuration
|
|
├── php.ini # PHP configuration
|
|
└── mysql.cnf # MySQL configuration
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
- Docker Engine 20.10+
|
|
- Docker Compose 2.0+
|
|
- Git
|
|
|
|
## Setup untuk Local Development
|
|
|
|
### 1. Quick Setup (Recommended)
|
|
|
|
Untuk setup cepat dengan auto-import database:
|
|
|
|
```bash
|
|
# Clone repository
|
|
git clone <your-repo-url>
|
|
cd CKB
|
|
|
|
# Pastikan file ckb.sql ada di root project
|
|
ls ckb.sql
|
|
|
|
# Jalankan quick setup
|
|
./docker-quick-setup.sh dev
|
|
```
|
|
|
|
Script ini akan otomatis:
|
|
|
|
- Setup environment file
|
|
- Start semua containers
|
|
- Import database dari ckb.sql
|
|
- Generate application key
|
|
- Setup Laravel application
|
|
|
|
### 2. Manual Setup
|
|
|
|
Jika Anda ingin setup manual:
|
|
|
|
```bash
|
|
# Setup local environment
|
|
./docker-setup-env.sh local
|
|
|
|
# Start containers
|
|
docker-compose up -d --build
|
|
|
|
# Import database
|
|
./docker-import-db.sh dev
|
|
|
|
# Generate Laravel application key
|
|
docker-compose exec app php artisan key:generate
|
|
```
|
|
|
|
### 2. Menjalankan Development Environment
|
|
|
|
```bash
|
|
# Build dan jalankan containers
|
|
docker-compose up -d --build
|
|
|
|
# Atau tanpa rebuild
|
|
docker-compose up -d
|
|
```
|
|
|
|
### 3. Akses Aplikasi
|
|
|
|
- **Web Application**: http://localhost:8000
|
|
- **Database (phpMyAdmin)**: http://localhost:8080
|
|
- **Mail Testing (MailHog)**: http://localhost:8025
|
|
- **MySQL Direct**: localhost:3306
|
|
- **Redis**: localhost:6379
|
|
|
|
### 4. Menjalankan Laravel Commands
|
|
|
|
```bash
|
|
# Masuk ke container aplikasi
|
|
docker-compose exec app bash
|
|
|
|
# Atau jalankan command langsung
|
|
docker-compose exec app php artisan migrate
|
|
docker-compose exec app php artisan db:seed
|
|
docker-compose exec app php artisan cache:clear
|
|
```
|
|
|
|
### 5. Development dengan Hot Reload
|
|
|
|
```bash
|
|
# Install dependencies
|
|
docker-compose exec app npm install
|
|
|
|
# Jalankan webpack dev server
|
|
docker-compose exec app npm run hot
|
|
```
|
|
|
|
## Setup untuk Staging/Production
|
|
|
|
### 1. Persiapan Environment
|
|
|
|
```bash
|
|
# Copy dan edit environment file production
|
|
cp docker/env.example .env.production
|
|
|
|
# Edit file .env.production sesuai kebutuhan production
|
|
vim .env.production
|
|
```
|
|
|
|
Contoh konfigurasi production:
|
|
|
|
```env
|
|
APP_ENV=production
|
|
APP_DEBUG=false
|
|
APP_URL=https://your-domain.com
|
|
|
|
DB_HOST=db
|
|
DB_DATABASE=ckb_production
|
|
DB_USERNAME=your_db_user
|
|
DB_PASSWORD=your_secure_password
|
|
DB_ROOT_PASSWORD=your_root_password
|
|
|
|
REDIS_PASSWORD=your_redis_password
|
|
```
|
|
|
|
### 2. Menjalankan Production Environment
|
|
|
|
```bash
|
|
# Build dan jalankan dengan konfigurasi production
|
|
docker-compose -f docker-compose.prod.yml up -d --build
|
|
|
|
# Atau menggunakan environment file spesifik
|
|
docker-compose -f docker-compose.prod.yml --env-file .env.production up -d --build
|
|
```
|
|
|
|
### 3. Database Migration dan Seeding
|
|
|
|
```bash
|
|
# Jalankan migrations
|
|
docker-compose -f docker-compose.prod.yml exec app php artisan migrate --force
|
|
|
|
# Jalankan seeders (jika diperlukan)
|
|
docker-compose -f docker-compose.prod.yml exec app php artisan db:seed --force
|
|
|
|
# Optimize aplikasi untuk production
|
|
docker-compose -f docker-compose.prod.yml exec app php artisan config:cache
|
|
docker-compose -f docker-compose.prod.yml exec app php artisan route:cache
|
|
docker-compose -f docker-compose.prod.yml exec app php artisan view:cache
|
|
```
|
|
|
|
## Monitoring dan Debugging
|
|
|
|
### 1. Melihat Logs
|
|
|
|
```bash
|
|
# Semua services
|
|
docker-compose logs -f
|
|
|
|
# Service specific
|
|
docker-compose logs -f app
|
|
docker-compose logs -f db
|
|
docker-compose logs -f redis
|
|
|
|
# Production
|
|
docker-compose -f docker-compose.prod.yml logs -f
|
|
```
|
|
|
|
### 2. Debugging dengan Xdebug (Development)
|
|
|
|
Xdebug sudah dikonfigurasi untuk development environment:
|
|
|
|
- Port: 9003
|
|
- IDE Key: PHPSTORM
|
|
- Host: host.docker.internal
|
|
|
|
### 3. Monitoring Resources
|
|
|
|
```bash
|
|
# Lihat resource usage
|
|
docker stats
|
|
|
|
# Lihat containers yang berjalan
|
|
docker-compose ps
|
|
```
|
|
|
|
## Database Management
|
|
|
|
### 1. Import Database dari Backup
|
|
|
|
Untuk mengimport database dari file backup ckb.sql:
|
|
|
|
```bash
|
|
# Import ke development environment
|
|
./docker-import-db.sh dev
|
|
|
|
# Import ke production environment
|
|
./docker-import-db.sh prod
|
|
|
|
# Import file SQL khusus
|
|
./docker-import-db.sh dev my-backup.sql
|
|
```
|
|
|
|
Script import akan otomatis:
|
|
|
|
- Backup database yang sudah ada (safety)
|
|
- Drop dan recreate database
|
|
- Import data dari file SQL
|
|
- Jalankan migrations jika diperlukan
|
|
- Clear cache Laravel
|
|
|
|
### 2. Backup Database
|
|
|
|
```bash
|
|
# Backup database development
|
|
docker-compose exec db mysqldump -u root -proot ckb_db > backup_$(date +%Y%m%d).sql
|
|
|
|
# Backup database production
|
|
docker-compose -f docker-compose.prod.yml exec db mysqldump -u root -p ckb_production > backup_prod_$(date +%Y%m%d).sql
|
|
```
|
|
|
|
### 3. Manual Restore Database
|
|
|
|
```bash
|
|
# Restore database development
|
|
docker-compose exec -T db mysql -u root -proot ckb_db < backup.sql
|
|
|
|
# Restore database production
|
|
docker-compose -f docker-compose.prod.yml exec -T db mysql -u root -p ckb_production < backup.sql
|
|
```
|
|
|
|
### 4. Auto Import saat Pertama Kali Setup
|
|
|
|
File `ckb.sql` di root project akan otomatis diimport saat pertama kali menjalankan containers baru. Ini terjadi karena MySQL menggunakan `/docker-entrypoint-initdb.d/` untuk auto-import.
|
|
|
|
## Troubleshooting
|
|
|
|
### 1. Docker Build Issues
|
|
|
|
Jika mengalami error saat build (seperti PHP extension compilation errors):
|
|
|
|
```bash
|
|
# Clean rebuild dengan script otomatis
|
|
./docker-rebuild.sh dev
|
|
|
|
# Atau manual cleanup dan rebuild
|
|
docker-compose down
|
|
docker system prune -a -f
|
|
docker-compose build --no-cache --pull
|
|
```
|
|
|
|
**Common Build Errors:**
|
|
|
|
- **curl extension error**: Fixed dengan menambah `libcurl4-openssl-dev` dan `pkg-config`
|
|
- **gd extension error**: Pastikan `libfreetype6-dev` dan `libjpeg62-turbo-dev` terinstall
|
|
- **Out of space**: Jalankan `docker system prune -a -f` untuk cleanup
|
|
|
|
### 2. Permission Issues
|
|
|
|
**Laravel Storage Permission Errors** (seperti "laravel.log could not be opened"):
|
|
|
|
```bash
|
|
# Quick fix dengan script otomatis
|
|
./docker-fix-permissions.sh dev
|
|
|
|
# Atau manual fix
|
|
docker-compose exec app chown -R www-data:www-data /var/www/html/storage
|
|
docker-compose exec app chmod -R 775 /var/www/html/storage
|
|
docker-compose exec app mkdir -p /var/www/html/storage/logs
|
|
```
|
|
|
|
**Host Permission Issues:**
|
|
|
|
```bash
|
|
# Fix permission di host system
|
|
sudo chown -R $(id -u):$(id -g) storage/
|
|
sudo chown -R $(id -u):$(id -g) bootstrap/cache/
|
|
chmod -R 775 storage/
|
|
chmod -R 775 bootstrap/cache/
|
|
```
|
|
|
|
### 3. Reset Containers
|
|
|
|
```bash
|
|
# Stop dan remove containers
|
|
docker-compose down
|
|
|
|
# Remove volumes (HATI-HATI: akan menghapus data database)
|
|
docker-compose down -v
|
|
|
|
# Rebuild dari awal
|
|
docker-compose up -d --build --force-recreate
|
|
```
|
|
|
|
### 4. Cache Issues
|
|
|
|
```bash
|
|
# Clear semua cache Laravel
|
|
docker-compose exec app php artisan optimize:clear
|
|
|
|
# Clear Docker build cache
|
|
docker system prune -f
|
|
|
|
# Clean rebuild everything
|
|
./docker-rebuild.sh dev
|
|
```
|
|
|
|
### 5. Database Import Issues
|
|
|
|
```bash
|
|
# Jika auto-import gagal
|
|
./docker-import-db.sh dev
|
|
|
|
# Jika database corrupt
|
|
docker-compose down -v
|
|
docker-compose up -d
|
|
./docker-import-db.sh dev
|
|
```
|
|
|
|
### 6. Redis Connection Issues
|
|
|
|
Jika mengalami error "Class Redis not found":
|
|
|
|
```bash
|
|
# Test Redis functionality
|
|
./docker-test-redis.sh dev
|
|
|
|
# Rebuild containers dengan Redis extension
|
|
./docker-rebuild.sh dev
|
|
|
|
# Manual fix: Clear cache dan config
|
|
docker-compose exec app php artisan config:clear
|
|
docker-compose exec app php artisan cache:clear
|
|
```
|
|
|
|
**Common Redis Errors:**
|
|
|
|
- **Class Redis not found**: Fixed dengan install `pecl install redis`
|
|
- **Connection refused**: Pastikan Redis container berjalan
|
|
- **Config not loaded**: Jalankan `php artisan config:clear`
|
|
|
|
## Security Notes untuk Production
|
|
|
|
1. **Environment Variables**: Jangan commit file `.env` ke repository
|
|
2. **Database Passwords**: Gunakan password yang kuat
|
|
3. **SSL/TLS**: Setup SSL certificate untuk HTTPS
|
|
4. **Firewall**: Konfigurasi firewall untuk membatasi akses port
|
|
5. **Updates**: Regular update Docker images dan dependencies
|
|
|
|
## Performance Optimization
|
|
|
|
### 1. Production Optimizations
|
|
|
|
```bash
|
|
# Laravel optimizations
|
|
docker-compose exec app php artisan config:cache
|
|
docker-compose exec app php artisan route:cache
|
|
docker-compose exec app php artisan view:cache
|
|
docker-compose exec app composer install --optimize-autoloader --no-dev
|
|
```
|
|
|
|
### 2. Docker Optimizations
|
|
|
|
- Gunakan multi-stage builds untuk image yang lebih kecil
|
|
- Leverage Docker layer caching
|
|
- Optimize .dockerignore untuk build speed
|
|
|
|
## Backup Strategy
|
|
|
|
### 1. Automated Backups
|
|
|
|
Buat script backup otomatis:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# backup.sh
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
docker-compose exec db mysqldump -u root -p${DB_ROOT_PASSWORD} ckb_production > "backup_${DATE}.sql"
|
|
tar -czf "backup_${DATE}.tar.gz" backup_${DATE}.sql storage/
|
|
```
|
|
|
|
### 2. Volume Backups
|
|
|
|
```bash
|
|
# Backup Docker volumes
|
|
docker run --rm -v ckb_mysql_data:/data -v $(pwd):/backup alpine tar czf /backup/mysql_backup.tar.gz /data
|
|
```
|
|
|
|
Untuk pertanyaan lebih lanjut atau issues, silakan buat issue di repository ini.
|