9.5 KiB
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:
# 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:
# Copy environment file
cp docker/env.example .env
# 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
# 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
# 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
# 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
# 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:
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
# 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
# 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
# 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
# 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:
# 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
# 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
# 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):
# 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-devdanpkg-config - gd extension error: Pastikan
libfreetype6-devdanlibjpeg62-turbo-devterinstall - Out of space: Jalankan
docker system prune -a -funtuk cleanup
2. Permission Issues
Laravel Storage Permission Errors (seperti "laravel.log could not be opened"):
# 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:
# 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
# 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
# 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
# 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":
# 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
- Environment Variables: Jangan commit file
.envke repository - Database Passwords: Gunakan password yang kuat
- SSL/TLS: Setup SSL certificate untuk HTTPS
- Firewall: Konfigurasi firewall untuk membatasi akses port
- Updates: Regular update Docker images dan dependencies
Performance Optimization
1. Production Optimizations
# 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:
#!/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
# 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.