#!/bin/bash # Script untuk setup environment file # Usage: ./docker-setup-env.sh [local|production] 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 environment ENVIRONMENT="local" # Parse arguments while [[ $# -gt 0 ]]; do case $1 in local|dev|development) ENVIRONMENT="local" shift ;; prod|production) ENVIRONMENT="production" shift ;; *) echo "Unknown option $1" echo "Usage: $0 [local|production]" 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 backup existing .env backup_existing_env() { if [[ -f .env ]]; then local backup_name=".env.backup.$(date +%Y%m%d_%H%M%S)" print_status "Backing up existing .env to $backup_name" cp .env "$backup_name" print_success "Backup created: $backup_name" fi } # Function to setup local environment setup_local_env() { print_status "Setting up LOCAL development environment..." if [[ -f docker/env.example.local ]]; then backup_existing_env cp docker/env.example.local .env print_success "✅ Local environment file created!" echo "" print_status "Local Development Configuration:" echo " 🌐 App URL: http://localhost:8000" echo " 🗄️ Database: ckb_db (MySQL)" echo " 📧 Mail: MailHog (http://localhost:8025)" echo " 🔴 Redis: Session & Cache" echo " 🐛 Debug: Enabled" echo "" print_status "Services will be available at:" echo " - Web App: http://localhost:8000" echo " - phpMyAdmin: http://localhost:8080" echo " - MailHog: http://localhost:8025" echo "" print_success "Ready for local development! Run: ./docker-quick-setup.sh dev" else print_error "Local environment template not found: docker/env.example.local" exit 1 fi } # Function to setup production environment setup_production_env() { print_status "Setting up PRODUCTION environment..." if [[ -f docker/env.example.production ]]; then backup_existing_env cp docker/env.example.production .env print_success "✅ Production environment file created!" echo "" print_warning "🚨 SECURITY CONFIGURATION REQUIRED!" echo "" print_status "You MUST change these settings in .env file:" echo " 🔐 DB_PASSWORD=CHANGE_THIS_SECURE_PASSWORD" echo " 🔐 DB_ROOT_PASSWORD=CHANGE_THIS_ROOT_PASSWORD" echo " 🔐 REDIS_PASSWORD=CHANGE_THIS_REDIS_PASSWORD" echo "" print_status "Optional but recommended configurations:" echo " 📧 MAIL_HOST, MAIL_USERNAME, MAIL_PASSWORD" echo " ☁️ AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY (for S3)" echo " 📡 PUSHER_* settings (for real-time features)" echo "" print_status "Production Configuration:" echo " 🌐 App URL: https://bengkel.digitaloasis.xyz" echo " 🗄️ Database: ckb_production (MySQL)" echo " 📧 Mail: SMTP (configure in .env)" echo " 🔴 Redis: Session, Cache & Queue" echo " 🐛 Debug: Disabled" echo " 🔒 SSL: Let's Encrypt" echo "" print_warning "Next steps:" echo "1. Edit .env file and change all CHANGE_THIS_* values" echo "2. Run: ./docker-deploy-prod.sh deploy" echo "3. Run: ./docker-deploy-prod.sh ssl" else print_error "Production environment template not found: docker/env.example.production" exit 1 fi } # Function to show current environment info show_current_env() { if [[ -f .env ]]; then print_status "Current Environment Information:" echo "" # Detect environment type local app_env=$(grep "^APP_ENV=" .env | cut -d '=' -f2) local app_url=$(grep "^APP_URL=" .env | cut -d '=' -f2) local app_debug=$(grep "^APP_DEBUG=" .env | cut -d '=' -f2) local db_host=$(grep "^DB_HOST=" .env | cut -d '=' -f2) local db_name=$(grep "^DB_DATABASE=" .env | cut -d '=' -f2) echo " Environment: $app_env" echo " App URL: $app_url" echo " Debug Mode: $app_debug" echo " Database Host: $db_host" echo " Database Name: $db_name" echo "" # Check for security issues in production if [[ "$app_env" == "production" ]]; then print_status "Security Check:" if grep -q "CHANGE_THIS" .env; then print_error "❌ Found CHANGE_THIS_* values in production .env!" print_warning "Please update all CHANGE_THIS_* values with secure passwords." else print_success "✅ No CHANGE_THIS_* values found." fi if [[ "$app_debug" == "true" ]]; then print_error "❌ Debug mode is enabled in production!" print_warning "Set APP_DEBUG=false for production." else print_success "✅ Debug mode is disabled." fi fi else print_status "No .env file found." fi } # Function to validate environment file validate_env() { if [[ ! -f .env ]]; then print_error "No .env file found!" return 1 fi print_status "Validating environment file..." # Required variables local required_vars=("APP_NAME" "APP_ENV" "APP_URL" "DB_HOST" "DB_DATABASE" "DB_USERNAME" "DB_PASSWORD") local missing_vars=() for var in "${required_vars[@]}"; do if ! grep -q "^${var}=" .env; then missing_vars+=("$var") fi done if [[ ${#missing_vars[@]} -gt 0 ]]; then print_error "Missing required environment variables:" for var in "${missing_vars[@]}"; do echo " - $var" done return 1 fi print_success "✅ Environment file validation passed!" return 0 } # Main execution echo "================================================" print_status "🔧 CKB Environment Setup Helper" print_status "Target Environment: $ENVIRONMENT" echo "================================================" echo "" case $ENVIRONMENT in local) setup_local_env ;; production) setup_production_env ;; esac echo "" print_status "Environment file setup completed!" echo "" # Show current environment info show_current_env echo "" print_status "Available commands:" echo " - Show current env: ./docker-setup-env.sh" echo " - Setup local: ./docker-setup-env.sh local" echo " - Setup production: ./docker-setup-env.sh production" echo " - Quick local setup: ./docker-quick-setup.sh dev" echo " - Production deploy: ./docker-deploy-prod.sh deploy"