add docker for local and production
This commit is contained in:
239
docker-quick-setup.sh
Executable file
239
docker-quick-setup.sh
Executable file
@@ -0,0 +1,239 @@
|
||||
#!/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 [[ -f docker/env.example ]]; then
|
||||
print_status "Setting up environment file..."
|
||||
cp docker/env.example .env
|
||||
print_success "Environment file created: .env"
|
||||
else
|
||||
print_error "No environment template found."
|
||||
exit 1
|
||||
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
|
||||
|
||||
# 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 10
|
||||
./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!"
|
||||
Reference in New Issue
Block a user