Files
CKB/DOCKER-README.md

9.6 KiB
Executable File

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

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:

# 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

# Build dan jalankan containers
docker-compose up -d --build

# Atau tanpa rebuild
docker-compose up -d

3. Akses Aplikasi

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-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"):

# 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

  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

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