#!/bin/bash # Quick Setup Script untuk CKB Laravel Application dengan Auto Import Database # Usage: ./docker-quick-setup.sh [dev|prod] set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Default values ENVIRONMENT="dev" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in dev|development) ENVIRONMENT="dev" shift ;; prod|production|staging) ENVIRONMENT="prod" shift ;; *) echo "Unknown option $1" echo "Usage: $0 [dev|prod]" exit 1 ;; esac done # Function to print colored output print_status() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # Function to check if Docker is running check_docker() { if ! docker info > /dev/null 2>&1; then print_error "Docker is not running. Please start Docker first." exit 1 fi } # Function to setup environment file setup_env() { if [[ ! -f .env ]]; then if [[ $ENVIRONMENT == "dev" ]]; then if [[ -f docker/env.example.local ]]; then print_status "Setting up local development environment file..." cp docker/env.example.local .env print_success "Local environment file created: .env" else print_error "Local environment template not found: docker/env.example.local" exit 1 fi else if [[ -f docker/env.example.production ]]; then print_status "Setting up production environment file..." cp docker/env.example.production .env print_success "Production environment file created: .env" print_warning "⚠️ IMPORTANT: Edit .env and change all CHANGE_THIS_* passwords!" else print_error "Production environment template not found: docker/env.example.production" exit 1 fi fi else print_status "Environment file already exists: .env" fi } # Function to check if database file exists check_db_file() { if [[ ! -f ckb.sql ]]; then print_error "Database backup file 'ckb.sql' not found!" print_status "Please make sure you have the ckb.sql file in the project root." exit 1 fi print_status "Found database backup: ckb.sql ($(du -h ckb.sql | cut -f1))" } # Function to start containers start_containers() { print_status "Starting Docker containers for $ENVIRONMENT environment..." if [[ $ENVIRONMENT == "dev" ]]; then print_status "This will start development environment with:" echo " - MySQL with auto-import from ckb.sql" echo " - Redis for caching" echo " - phpMyAdmin for database management" echo " - MailHog for email testing" echo "" docker-compose up -d --build print_success "Development containers started!" echo "" print_status "Services are starting up... Please wait..." # Wait for MySQL to be ready print_status "Waiting for MySQL to be ready..." sleep 20 # Wait a bit more for MySQL to be fully ready sleep 10 # Check if database was imported automatically if docker-compose exec -T db mysql -u root -proot -e "USE ckb_db; SHOW TABLES;" > /dev/null 2>&1; then table_count=$(docker-compose exec -T db mysql -u root -proot -e "USE ckb_db; SHOW TABLES;" 2>/dev/null | wc -l) if [[ $table_count -gt 1 ]]; then print_success "Database automatically imported from ckb.sql!" else print_warning "Database not imported automatically. Running manual import..." ./docker-import-db.sh dev fi else print_warning "Database not accessible. Running manual import..." sleep 15 ./docker-import-db.sh dev fi else print_status "Starting production environment..." if [[ ! -f .env.production ]]; then print_warning "Creating production environment file..." cp docker/env.example .env.production print_warning "Please edit .env.production with your production settings!" fi docker-compose -f docker-compose.prod.yml up -d --build print_success "Production containers started!" sleep 15 print_status "Importing database for production..." ./docker-import-db.sh prod fi } # Function to generate application key generate_app_key() { print_status "Generating Laravel application key..." if [[ $ENVIRONMENT == "dev" ]]; then docker-compose exec app php artisan key:generate else docker-compose -f docker-compose.prod.yml exec app php artisan key:generate fi } # Function to run Laravel setup commands setup_laravel() { print_status "Setting up Laravel application..." if [[ $ENVIRONMENT == "dev" ]]; then COMPOSE_CMD="docker-compose exec app" else COMPOSE_CMD="docker-compose -f docker-compose.prod.yml exec app" fi # Clear caches $COMPOSE_CMD php artisan cache:clear || true $COMPOSE_CMD php artisan config:clear || true $COMPOSE_CMD php artisan view:clear || true # Set up storage links $COMPOSE_CMD php artisan storage:link || true if [[ $ENVIRONMENT == "prod" ]]; then print_status "Optimizing for production..." $COMPOSE_CMD php artisan config:cache $COMPOSE_CMD php artisan route:cache $COMPOSE_CMD php artisan view:cache fi } # Function to show access information show_access_info() { echo "" print_success "🎉 CKB Laravel Application is now ready!" echo "" if [[ $ENVIRONMENT == "dev" ]]; then print_status "Development Environment Access:" echo " 🌐 Web Application: http://localhost:8000" echo " 📊 phpMyAdmin: http://localhost:8080" echo " - Server: db" echo " - Username: root" echo " - Password: root" echo " - Database: ckb_db" echo "" echo " 📧 MailHog (Email Testing): http://localhost:8025" echo " 🗄️ MySQL Direct: localhost:3306" echo " 🔴 Redis: localhost:6379" echo "" print_status "Useful Commands:" echo " - View logs: docker-compose logs -f" echo " - Access container: docker-compose exec app bash" echo " - Laravel commands: docker-compose exec app php artisan [command]" echo " - Stop containers: docker-compose down" else print_status "Production Environment Access:" echo " 🌐 Web Application: http://localhost (port 80)" echo " 🗄️ Database: localhost:3306" echo "" print_status "Useful Commands:" echo " - View logs: docker-compose -f docker-compose.prod.yml logs -f" echo " - Access container: docker-compose -f docker-compose.prod.yml exec app bash" echo " - Stop containers: docker-compose -f docker-compose.prod.yml down" fi echo "" print_status "Database has been imported from ckb.sql successfully!" } # Main execution echo "================================================" print_status "🚀 CKB Laravel Application Quick Setup" print_status "Environment: $ENVIRONMENT" echo "================================================" echo "" # Check prerequisites check_docker check_db_file # Setup process setup_env start_containers generate_app_key setup_laravel # Show final information show_access_info echo "" print_success "✅ Quick setup completed successfully!"