91 lines
2.9 KiB
Bash
91 lines
2.9 KiB
Bash
# Copyright 2025 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
# IMPORTANT: Before running this script, ensure you have:
|
|
# 1. Authenticated with gcloud: `gcloud auth login`
|
|
# 2. Configured Docker for Artifact Registry: `gcloud auth configure-docker`
|
|
# 3. Replaced [YOUR_PROJECT_ID] and [YOUR_GEMINI_API_KEY] below.
|
|
|
|
# --- Step 1: Build and Push the Container Image ---
|
|
# Replace [YOUR_PROJECT_ID] with your Google Cloud Project ID
|
|
PROJECT_ID=[YOUR_PROJECT_ID]
|
|
|
|
# Generate a unique tag based on the current time (Forces a fresh pull)
|
|
# --- Step 2: Deploy to Cloud Run ---
|
|
|
|
|
|
SERVICE_NAME="gemini-live-health" # Cloud Run service name
|
|
REGION="us-central1" # Cloud Run region
|
|
|
|
SERVICE_URL="" # Will be Updated with your deployed service URL after first deployment
|
|
|
|
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
|
IMAGE_NAME="gcr.io/${PROJECT_ID}/${SERVICE_NAME}:${TIMESTAMP}"
|
|
|
|
echo "Building and pushing container image: ${IMAGE_NAME}"
|
|
gcloud builds submit --tag "${IMAGE_NAME}" --no-cache
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Container build failed. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
|
|
echo "Deploying service ${SERVICE_NAME} to Cloud Run in ${REGION}"
|
|
DEPLOY_OUTPUT=$(gcloud run deploy "${SERVICE_NAME}" \
|
|
--image "${IMAGE_NAME}" \
|
|
--platform managed \
|
|
--region "${REGION}" \
|
|
--allow-unauthenticated \
|
|
--min-instances=1 \
|
|
--timeout=3600 \
|
|
--memory=2Gi \
|
|
--session-affinity \
|
|
--concurrency=1 \
|
|
--cpu=2 \
|
|
--no-cpu-throttling \
|
|
--set-env-vars="SERVICE_URL=${SERVICE_URL}" \
|
|
--format="value(status.url)")
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Cloud Run deployment failed. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Updating service with its own public URL..."
|
|
gcloud run services update "${SERVICE_NAME}" \
|
|
--region "${REGION}" \
|
|
--update-env-vars="SERVICE_URL=${DEPLOY_OUTPUT}"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to update service with its public URL. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# The SERVICE_URL is now directly set in the deployment command.
|
|
# The DEPLOY_OUTPUT still contains the full URL, which is useful for Twilio configuration.
|
|
|
|
echo "Service deployed to: ${DEPLOY_OUTPUT}"
|
|
echo "Deployment script completed successfully!"
|
|
echo "Next steps:"
|
|
echo "1. Copy the Service URL: ${DEPLOY_OUTPUT}"
|
|
echo "2. Go to your Twilio phone number configuration in the Twilio Console."
|
|
echo "3. Set the 'A CALL COMES IN' webhook to: ${DEPLOY_OUTPUT}/twiml (HTTP POST)"
|
|
echo "4. Save the Twilio configuration and make a test call!"
|