Spaces:
Sleeping
Sleeping
| # 1. Login to gcloud (this will open a browser window) | |
| echo "Logging in to Google Cloud..." | |
| gcloud auth login | |
| # 2. Set project | |
| echo "Setting project to mlops-cs4..." | |
| gcloud config set project mlops-cs4 | |
| # 3. Enable required APIs | |
| echo "Enabling required APIs..." | |
| gcloud services enable compute.googleapis.com | |
| # 4. Create compute instance | |
| echo "Creating compute instance..." | |
| gcloud compute instances create mlops-cs4 \ | |
| --image-family=ubuntu-2004-lts \ | |
| --image-project=ubuntu-os-cloud \ | |
| --machine-type=e2-medium \ | |
| --zone=us-central1-a \ | |
| --boot-disk-size=30GB \ | |
| --tags=http-server \ | |
| --metadata=startup-script='#!/bin/bash | |
| apt-get update | |
| apt-get install -y apt-transport-https ca-certificates curl software-properties-common | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - | |
| add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | |
| apt-get update | |
| apt-get install -y docker-ce | |
| # Install prerequisites | |
| apt-get install -y \ | |
| apt-transport-https \ | |
| ca-certificates \ | |
| curl \ | |
| gnupg \ | |
| lsb-release | |
| # Add Docker official GPG key | |
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg | |
| # Add Docker repository | |
| echo \ | |
| "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ | |
| $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null | |
| # Update apt and install Docker | |
| apt-get update | |
| apt-get install -y docker-ce docker-ce-cli containerd.io | |
| # Add current user to docker group | |
| usermod -aG docker ubuntu | |
| # Verify Docker is running | |
| systemctl status docker | |
| apt-get update | |
| apt-get install -y docker.io | |
| systemctl start docker | |
| systemctl enable docker | |
| # Add the default user to docker group | |
| usermod -aG docker venkateshroshan95 | |
| # Create the docker group if it doesnt exist | |
| groupadd -f docker | |
| # Set proper permissions for Docker socket | |
| chmod 666 /var/run/docker.sock' | |
| # 5. Create firewall rule | |
| echo "Creating firewall rule..." | |
| gcloud compute firewall-rules create allow-ports \ | |
| --direction=INGRESS \ | |
| --priority=1000 \ | |
| --network=default \ | |
| --action=ALLOW \ | |
| --rules=tcp:7860,tcp:8000,tcp:9100 \ | |
| --source-ranges=0.0.0.0/0 \ | |
| --target-tags=http-server | |
| # Wait for instance to be ready and Docker to be installed | |
| echo "Waiting for instance to be ready..." | |
| sleep 180 | |
| # Get the external IP | |
| EXTERNAL_IP=$(gcloud compute instances describe mlops-cs4 --zone=us-central1-a \ | |
| --format='get(networkInterfaces[0].accessConfigs[0].natIP)') | |
| # 7. Pull Docker image | |
| echo "Pulling Docker image..." | |
| gcloud compute ssh mlops-cs4 --zone=us-central1-a --command="docker pull venkateshroshan/mlops-cs4:latest" | |
| # 8. Run Docker container | |
| echo "Running Docker container..." | |
| gcloud compute ssh mlops-cs4 --zone=us-central1-a --command="docker run -d -p 7860:7860 -p 8000:8000 -p 9100:9100 venkateshroshan/mlops-cs4:latest" | |
| # 9 & 10. Get and print external IP | |
| echo "External IP address: $EXTERNAL_IP" | |
| echo "Deployment complete!" | |
| echo "Your application is accessible at:" | |
| echo "http://$EXTERNAL_IP:7860" | |
| echo "http://$EXTERNAL_IP:8000" | |
| echo "http://$EXTERNAL_IP:9100" |