# 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 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 # 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 ```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.