# Deploy a static site with Caddy V2 on Google Cloud Run - gem-cloud-run-caddy-website

### Activate Cloud Shell

Cloud Shell is a virtual machine that is loaded with development tools. It offers a persistent 5GB home directory and runs on the Google Cloud. Cloud Shell provides command-line access to your Google Cloud resources.

1. Click **Activate Cloud Shell**
    
    ![Activate Cloud Shell icon](https://cdn.qwiklabs.com/ep8HmqYGdD%2FkUncAAYpV47OYoHwC8%2Bg0WK%2F8sidHquE%3D align="left")
    
    at the top of the Google Cloud console.
    

When you are connected, you are already authenticated, and the project is set to your **PROJECT\_ID**. The output contains a line that declares the **PROJECT\_ID** for this session:

```apache
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
```

`gcloud` is the command-line tool for Google Cloud. It comes pre-installed on Cloud Shell and supports tab-completion.

2. (Optional) You can list the active account name with this command:
    

```apache
gcloud auth list
```

3. Click **Authorize**.
    
4. Your output should now look like this:
    

**Output:**

```apache
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
```

5. (Optional) You can list the project ID with this command:
    

```apache
gcloud config list project
```

**Output:**

```apache
[core]
project = <project_ID>
```

**Example output:**

```apache
[core]
project = qwiklabs-gcp-44776a13dea667a6
```

**Note:** For full documentation of `gcloud`, in Google Cloud, refer to [the gcloud CLI overview guide](https://cloud.google.com/sdk/gcloud).

## Overview

In this lab, you'll learn how to deploy a static website using Caddy V2 on Google Cloud Run. Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS. We'll containerize Caddy with your static website and deploy it to Cloud Run using Artifact Registry for container image storage.

## Task 1. Set up your environment

Configure your Google Cloud environment for this lab.

1. Set your Project ID. Replace `qwiklabs-gcp-04-0ab4f70ed2ff` with your Project ID.
    

```apache
gcloud config set project qwiklabs-gcp-04-0ab4f70ed2ff
```

**Note:**  
This command sets your active project identity.

2. Set your default region. Replace `us-west1` with your desired region (e.g., `us-central1`).
    

```apache
gcloud config set run/region us-west1
```

**Note:**  
This command sets your active cloud run region.

3. Enable the Cloud Run, Artifact Registry, and Cloud Build APIs.
    

```apache
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
```

**Note:**  
This command enables the necessary APIs for this lab.

## Task 2. Create an Artifact Registry repository

Create a Docker repository in Artifact Registry to store the Caddy container image.

1. Create a Docker repository named 'caddy-repo' in Artifact Registry. Replace `us-west1` with your desired region.
    

```apache
gcloud artifacts repositories create caddy-repo --repository-format=docker --location=us-west1 --description="Docker repository for Caddy images"
```

**Note:**  
This command creates an Artifact Registry repository.

## Task 3. Create the static website and Caddyfile

Create a simple static website and configure Caddy to serve it.

1. Create an `index.html` file with the following content:
    

```xml
<html>
<head>
  <title>My Static Website</title>
</head>
<body>
  <div>Hello from Caddy on Cloud Run!</div>
  <p>This website is served by Caddy running in a Docker container on Google Cloud Run.</p>
</body>
</html>
```

**Note:**  
This is the HTML content for your static website.

2. Create a `Caddyfile` with the following content:
    

```apache
:8080
root * /usr/share/caddy
file_server
```

**Note:**  
This Caddyfile configures Caddy to serve files from the `/usr/share/caddy` directory on port 8080.

## Task 4. Create the Dockerfile

Define the Docker image for Caddy and your static website.

1. Create a `Dockerfile` with the following content:
    

```apache
FROM caddy:2-alpine

WORKDIR /usr/share/caddy

COPY index.html .
COPY Caddyfile /etc/caddy/Caddyfile
```

**Note:**  
This Dockerfile uses the official Caddy Alpine image, sets the working directory, and copies your website and Caddyfile.

## Task 5. Build and push the Docker image

Build the Docker image and push it to Artifact Registry.

1. Build the Docker image. Replace `us-west1` and `qwiklabs-gcp-04-0ab4f70ed2ff` with your region and project ID.
    

```apache
docker build -t us-west1-docker.pkg.dev/qwiklabs-gcp-04-0ab4f70ed2ff/caddy-repo/caddy-static:latest .
```

**Note:**  
This command builds the Docker image and tags it with the Artifact Registry repository URL.

2. Push the Docker image to Artifact Registry.
    

```apache
docker push us-west1-docker.pkg.dev/qwiklabs-gcp-04-0ab4f70ed2ff/caddy-repo/caddy-static:latest
```

**Note:**  
This command pushes the Docker image to Artifact Registry.

## Task 6. Deploy to Cloud Run

Deploy the container image to Cloud Run.

1. Deploy the service to Cloud Run. Replace `us-west1` and `qwiklabs-gcp-04-0ab4f70ed2ff` with your region and project ID.
    

```apache
gcloud run deploy caddy-static --image us-west1-docker.pkg.dev/qwiklabs-gcp-04-0ab4f70ed2ff/caddy-repo/caddy-static:latest --platform managed --allow-unauthenticated
```

**Note:**  
This command deploys the Docker image to Cloud Run and allows unauthenticated access.

2. When prompted, confirm the service name as `caddy-static` and allow unauthenticated invocations.
    

**Note:**  
This configures the service name and permissions.

3. Note the service URL provided by Cloud Run.
    

**Note:**  
This is the URL where your static website is accessible.

## Task 7. Access your website

Access the deployed website through the Cloud Run service URL.

1. Open the Cloud Run service URL in your web browser.
    

**Note:**  
Verify that your static website is displayed correctly.

---

## Solution of Lab

%[https://youtu.be/AkgJgpiwRY0] 

```apache
curl -LO raw.githubusercontent.com/Techcps/Google-Cloud-Skills-Boost/master/Deploy%20a%20static%20site%20with%20Caddy%20V2%20on%20Google%20Cloud%20Run/techcps.sh
sudo chmod +x techcps.sh
./techcps.sh
```
