Refactor Docker setup for Laravel 5.0 compatibility and optimize deployment process
- Updated Dockerfile configurations for various environments (alpine, basic, cloudrun, minimal, simple, test) to ensure compatibility with Laravel 5.0 and PHP 5.6. - Added PHP compatibility documentation outlining mcrypt requirements and upgrade paths. - Created cloudbuild.yaml for Google Cloud Build integration to streamline deployment to Cloud Run. - Introduced docker-compose.local.yml for local development with MySQL and Redis services. - Enhanced rebuild.sh script for easier local development and migration handling. - Updated Laravel Blade views to correct asset paths. - Added start-local.sh script for quick local setup and service management.
This commit is contained in:
156
cloudbuild.yaml
Normal file
156
cloudbuild.yaml
Normal file
@@ -0,0 +1,156 @@
|
||||
# Google Cloud Build configuration for Laravel 5 application deployment to Cloud Run
|
||||
steps:
|
||||
# Step 1: Build the Docker image
|
||||
- name: 'gcr.io/cloud-builders/docker'
|
||||
args:
|
||||
- 'build'
|
||||
- '-t'
|
||||
- 'gcr.io/$PROJECT_ID/merchbay-laravel:$COMMIT_SHA'
|
||||
- '-t'
|
||||
- 'gcr.io/$PROJECT_ID/merchbay-laravel:latest'
|
||||
- '-f'
|
||||
- 'Dockerfile.simple'
|
||||
- '.'
|
||||
id: 'build-image'
|
||||
|
||||
# Step 2: Push the Docker image to Google Container Registry
|
||||
- name: 'gcr.io/cloud-builders/docker'
|
||||
args:
|
||||
- 'push'
|
||||
- 'gcr.io/$PROJECT_ID/merchbay-laravel:$COMMIT_SHA'
|
||||
id: 'push-image'
|
||||
waitFor: ['build-image']
|
||||
|
||||
# Step 3: Push the latest tag as well
|
||||
- name: 'gcr.io/cloud-builders/docker'
|
||||
args:
|
||||
- 'push'
|
||||
- 'gcr.io/$PROJECT_ID/merchbay-laravel:latest'
|
||||
id: 'push-latest'
|
||||
waitFor: ['build-image']
|
||||
|
||||
# Step 4: Run database migrations (optional - only if you have Cloud SQL configured)
|
||||
# Uncomment and configure if you need to run migrations
|
||||
# - name: 'gcr.io/cloud-builders/gcloud'
|
||||
# entrypoint: 'bash'
|
||||
# args:
|
||||
# - '-c'
|
||||
# - |
|
||||
# gcloud run jobs create laravel-migrate \
|
||||
# --image=gcr.io/$PROJECT_ID/merchbay-laravel:$COMMIT_SHA \
|
||||
# --region=$_REGION \
|
||||
# --set-env-vars="APP_ENV=production,APP_KEY=$_APP_KEY,DB_HOST=$_DB_HOST,DB_DATABASE=$_DB_DATABASE,DB_USERNAME=$_DB_USERNAME,DB_PASSWORD=$_DB_PASSWORD" \
|
||||
# --set-cloudsql-instances=$_CLOUDSQL_INSTANCE \
|
||||
# --command="php" \
|
||||
# --args="artisan,migrate,--force" \
|
||||
# --max-retries=1 \
|
||||
# --replace || true
|
||||
# gcloud run jobs execute laravel-migrate --region=$_REGION --wait
|
||||
# id: 'run-migrations'
|
||||
# waitFor: ['push-image']
|
||||
|
||||
# Step 5: Deploy to Cloud Run
|
||||
- name: 'gcr.io/cloud-builders/gcloud'
|
||||
args:
|
||||
- 'run'
|
||||
- 'deploy'
|
||||
- '$_SERVICE_NAME'
|
||||
- '--image'
|
||||
- 'gcr.io/$PROJECT_ID/merchbay-laravel:$COMMIT_SHA'
|
||||
- '--region'
|
||||
- '$_REGION'
|
||||
- '--platform'
|
||||
- 'managed'
|
||||
- '--allow-unauthenticated'
|
||||
- '--port'
|
||||
- '8080'
|
||||
- '--memory'
|
||||
- '$_MEMORY'
|
||||
- '--cpu'
|
||||
- '$_CPU'
|
||||
- '--timeout'
|
||||
- '$_TIMEOUT'
|
||||
- '--concurrency'
|
||||
- '$_CONCURRENCY'
|
||||
- '--min-instances'
|
||||
- '$_MIN_INSTANCES'
|
||||
- '--max-instances'
|
||||
- '$_MAX_INSTANCES'
|
||||
- '--set-env-vars'
|
||||
- 'APP_ENV=production,APP_DEBUG=false,APP_KEY=$_APP_KEY,DB_HOST=$_DB_HOST,DB_DATABASE=$_DB_DATABASE,DB_USERNAME=$_DB_USERNAME,DB_PASSWORD=$_DB_PASSWORD,CACHE_DRIVER=redis,SESSION_DRIVER=redis,QUEUE_DRIVER=database,PAYPAL_MODE=$_PAYPAL_MODE,PAYPAL_LIVE_CLIENT_ID=$_PAYPAL_LIVE_CLIENT_ID,PAYPAL_LIVE_SECRET=$_PAYPAL_LIVE_SECRET,PAYPAL_SANDBOX_CLIENT_ID=$_PAYPAL_SANDBOX_CLIENT_ID,PAYPAL_SANDBOX_SECRET=$_PAYPAL_SANDBOX_SECRET,MAIL_DRIVER=$_MAIL_DRIVER,MAIL_HOST=$_MAIL_HOST,MAIL_PORT=$_MAIL_PORT,MAIL_USERNAME=$_MAIL_USERNAME,MAIL_PASSWORD=$_MAIL_PASSWORD,GOOGLE_ANALYTICS_VIEW_ID=$_GOOGLE_ANALYTICS_VIEW_ID'
|
||||
- '--set-cloudsql-instances'
|
||||
- '$_CLOUDSQL_INSTANCE'
|
||||
- '--vpc-connector'
|
||||
- '$_VPC_CONNECTOR'
|
||||
- '--add-cloudsql-instances'
|
||||
- '$_CLOUDSQL_INSTANCE'
|
||||
id: 'deploy-service'
|
||||
waitFor: ['push-image']
|
||||
|
||||
# Substitution variables - you can override these in your Cloud Build trigger
|
||||
substitutions:
|
||||
# Service configuration
|
||||
_SERVICE_NAME: 'merchbay-laravel'
|
||||
_REGION: 'us-central1'
|
||||
|
||||
# Resource limits
|
||||
_MEMORY: '1Gi'
|
||||
_CPU: '1000m'
|
||||
_TIMEOUT: '300s'
|
||||
_CONCURRENCY: '80'
|
||||
_MIN_INSTANCES: '0'
|
||||
_MAX_INSTANCES: '10'
|
||||
|
||||
# Database configuration (Cloud SQL)
|
||||
_CLOUDSQL_INSTANCE: 'YOUR_PROJECT_ID:REGION:INSTANCE_NAME'
|
||||
_DB_HOST: '127.0.0.1'
|
||||
_DB_DATABASE: 'merchbay'
|
||||
_DB_USERNAME: 'laravel_user'
|
||||
_DB_PASSWORD: 'YOUR_DB_PASSWORD'
|
||||
|
||||
# VPC configuration (if needed)
|
||||
_VPC_CONNECTOR: 'projects/YOUR_PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME'
|
||||
|
||||
# Application configuration
|
||||
_APP_KEY: 'base64:YOUR_APP_KEY_HERE'
|
||||
|
||||
# PayPal configuration
|
||||
_PAYPAL_MODE: 'live'
|
||||
_PAYPAL_LIVE_CLIENT_ID: 'YOUR_PAYPAL_LIVE_CLIENT_ID'
|
||||
_PAYPAL_LIVE_SECRET: 'YOUR_PAYPAL_LIVE_SECRET'
|
||||
_PAYPAL_SANDBOX_CLIENT_ID: 'YOUR_PAYPAL_SANDBOX_CLIENT_ID'
|
||||
_PAYPAL_SANDBOX_SECRET: 'YOUR_PAYPAL_SANDBOX_SECRET'
|
||||
|
||||
# Mail configuration
|
||||
_MAIL_DRIVER: 'smtp'
|
||||
_MAIL_HOST: 'smtp.gmail.com'
|
||||
_MAIL_PORT: '587'
|
||||
_MAIL_USERNAME: 'your-email@domain.com'
|
||||
_MAIL_PASSWORD: 'your-app-password'
|
||||
|
||||
# Google Analytics
|
||||
_GOOGLE_ANALYTICS_VIEW_ID: 'YOUR_GA_VIEW_ID'
|
||||
|
||||
# Build options
|
||||
options:
|
||||
# Use a more powerful machine for faster builds
|
||||
machineType: 'E2_HIGHCPU_8'
|
||||
|
||||
# Enable detailed logging
|
||||
logging: CLOUD_LOGGING_ONLY
|
||||
|
||||
# Build timeout
|
||||
timeout: '1200s'
|
||||
|
||||
# Store build logs in Cloud Logging
|
||||
logsBucket: 'gs://YOUR_PROJECT_ID_cloudbuild-logs'
|
||||
|
||||
# Available logs for debugging
|
||||
availableSecrets:
|
||||
secretManager:
|
||||
- versionName: 'projects/YOUR_PROJECT_ID/secrets/APP_KEY/versions/latest'
|
||||
env: 'APP_KEY'
|
||||
- versionName: 'projects/YOUR_PROJECT_ID/secrets/DB_PASSWORD/versions/latest'
|
||||
env: 'DB_PASSWORD'
|
||||
- versionName: 'projects/YOUR_PROJECT_ID/secrets/PAYPAL_LIVE_SECRET/versions/latest'
|
||||
env: 'PAYPAL_LIVE_SECRET'
|
||||
Reference in New Issue
Block a user