<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FProviders%2FGcp%2FHosting_the_Care_frontend_on_GCS</id>
	<title>Deployment/Providers/Gcp/Hosting the Care frontend on GCS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ohcnwiki.tellmey.fyi/index.php?action=history&amp;feed=atom&amp;title=Deployment%2FProviders%2FGcp%2FHosting_the_Care_frontend_on_GCS"/>
	<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Providers/Gcp/Hosting_the_Care_frontend_on_GCS&amp;action=history"/>
	<updated>2026-07-06T05:43:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.4</generator>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Providers/Gcp/Hosting_the_Care_frontend_on_GCS&amp;diff=383&amp;oldid=prev</id>
		<title>Admin: Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Providers/Gcp/Hosting_the_Care_frontend_on_GCS&amp;diff=383&amp;oldid=prev"/>
		<updated>2026-07-06T04:00:58Z</updated>

		<summary type="html">&lt;p&gt;Add Navbox deployment template before Related (via update-page on MediaWiki MCP Server)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:30, 6 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 324:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 324:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Index|Google Cloud overview]] — choosing between GKE and GCS&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Index|Google Cloud overview]] — choosing between GKE and GCS&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Gke|Deploy on GKE]] — host the Care backend on Kubernetes&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Gke|Deploy on GKE]] — host the Care backend on Kubernetes&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Navbox deployment}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Related}}&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Providers/Gcp/Hosting_the_Care_frontend_on_GCS&amp;diff=210&amp;oldid=prev</id>
		<title>Admin: OHC identity seed</title>
		<link rel="alternate" type="text/html" href="https://ohcnwiki.tellmey.fyi/index.php?title=Deployment/Providers/Gcp/Hosting_the_Care_frontend_on_GCS&amp;diff=210&amp;oldid=prev"/>
		<updated>2026-07-04T23:08:12Z</updated>

		<summary type="html">&lt;p&gt;OHC identity seed&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Doc header&lt;br /&gt;
|type=guide&lt;br /&gt;
|domain=deployment&lt;br /&gt;
|title=Hosting the Care frontend on GCS&lt;br /&gt;
|order=3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This guide covers hosting the Care static frontend (a built &amp;lt;code&amp;gt;care_fe&amp;lt;/code&amp;gt;) on Google Cloud Storage (GCS), fronted by Cloud CDN and a global external load balancer with managed SSL/TLS, Cloud DNS, and Cloud Monitoring.&lt;br /&gt;
&lt;br /&gt;
{{Info|1=GCS hosts &amp;#039;&amp;#039;&amp;#039;only the static frontend&amp;#039;&amp;#039;&amp;#039; — the compiled output of [&amp;lt;nowiki/&amp;gt;https://github.com/ohcnetwork/care_fe &amp;lt;code&amp;gt;care_fe&amp;lt;/code&amp;gt;]. The Care backend/API is a separate service and must be deployed elsewhere (for example on [[Gke|GKE]] or another provider). Point the frontend&amp;#039;s API configuration at wherever that backend is reachable.}}&lt;br /&gt;
&lt;br /&gt;
== Architecture components ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Google Cloud Storage&amp;#039;&amp;#039;&amp;#039; — static file hosting for the built frontend&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cloud CDN&amp;#039;&amp;#039;&amp;#039; — global content delivery and edge caching&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Global load balancer&amp;#039;&amp;#039;&amp;#039; — external traffic management&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Managed SSL/TLS&amp;#039;&amp;#039;&amp;#039; — secure HTTPS termination&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cloud DNS&amp;#039;&amp;#039;&amp;#039; — domain management&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
# A GCP project with billing enabled&lt;br /&gt;
# A domain name managed in Cloud DNS&lt;br /&gt;
# The Google Cloud SDK (&amp;lt;code&amp;gt;gcloud&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gsutil&amp;lt;/code&amp;gt;) installed and authenticated&lt;br /&gt;
# The required IAM permissions to create buckets, load balancers, certificates, and DNS records&lt;br /&gt;
&lt;br /&gt;
== Infrastructure ==&lt;br /&gt;
&lt;br /&gt;
=== GCS bucket configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Create bucket in specified region&lt;br /&gt;
gsutil mb -l asia-south1 gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Set public access permissions&lt;br /&gt;
gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Enable bucket versioning&lt;br /&gt;
gsutil versioning set on gs://[BUCKET_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== CDN and load balancer setup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Create backend bucket with CDN&lt;br /&gt;
gcloud compute backend-buckets create [BACKEND_BUCKET_NAME] \&lt;br /&gt;
  --gcs-bucket-name=[BUCKET_NAME] \&lt;br /&gt;
  --enable-cdn&lt;br /&gt;
&lt;br /&gt;
# Configure URL map&lt;br /&gt;
gcloud compute url-maps create [URL_MAP_NAME] \&lt;br /&gt;
  --default-backend-bucket=[BACKEND_BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Create HTTP proxy&lt;br /&gt;
gcloud compute target-http-proxies create [HTTP_PROXY_NAME] \&lt;br /&gt;
  --url-map=[URL_MAP_NAME]&lt;br /&gt;
&lt;br /&gt;
# Reserve global IP&lt;br /&gt;
gcloud compute addresses create [IP_ADDRESS_NAME] --global&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== SSL/TLS and forwarding rules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Create SSL certificate&lt;br /&gt;
gcloud compute ssl-certificates create [SSL_CERT_NAME] \&lt;br /&gt;
  --domains=[DOMAIN_NAME]&lt;br /&gt;
&lt;br /&gt;
# Create HTTPS proxy&lt;br /&gt;
gcloud compute target-https-proxies create [HTTPS_PROXY_NAME] \&lt;br /&gt;
  --url-map=[URL_MAP_NAME] \&lt;br /&gt;
  --ssl-certificates=[SSL_CERT_NAME]&lt;br /&gt;
&lt;br /&gt;
# Create forwarding rules&lt;br /&gt;
gcloud compute forwarding-rules create [HTTP_FORWARDING_RULE] \&lt;br /&gt;
  --load-balancing-scheme=EXTERNAL \&lt;br /&gt;
  --global \&lt;br /&gt;
  --address=[IP_ADDRESS_NAME] \&lt;br /&gt;
  --target-http-proxy=[HTTP_PROXY_NAME] \&lt;br /&gt;
  --ports=80&lt;br /&gt;
&lt;br /&gt;
gcloud compute forwarding-rules create [HTTPS_FORWARDING_RULE] \&lt;br /&gt;
  --load-balancing-scheme=EXTERNAL \&lt;br /&gt;
  --global \&lt;br /&gt;
  --address=[IP_ADDRESS_NAME] \&lt;br /&gt;
  --target-https-proxy=[HTTPS_PROXY_NAME] \&lt;br /&gt;
  --ports=443&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== CORS setup ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;gsutil cors set &amp;#039;[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;origin&amp;quot;: [&amp;quot;https://[DOMAIN_NAME]&amp;quot;],&lt;br /&gt;
    &amp;quot;method&amp;quot;: [&amp;quot;GET&amp;quot;, &amp;quot;HEAD&amp;quot;, &amp;quot;POST&amp;quot;, &amp;quot;PUT&amp;quot;, &amp;quot;DELETE&amp;quot;, &amp;quot;OPTIONS&amp;quot;, &amp;quot;PATCH&amp;quot;],&lt;br /&gt;
    &amp;quot;responseHeader&amp;quot;: [&amp;quot;Content-Type&amp;quot;, &amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;Access-Control-Allow-Methods&amp;quot;, &amp;quot;Access-Control-Allow-Headers&amp;quot;],&lt;br /&gt;
    &amp;quot;maxAgeSeconds&amp;quot;: 3600&lt;br /&gt;
  }&lt;br /&gt;
]&amp;#039; gs://[BUCKET_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Bucket security ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Set uniform bucket-level access&lt;br /&gt;
gsutil bucketiam set bucketpolicyonly:on gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Configure bucket encryption&lt;br /&gt;
gsutil bucketencryption set on gs://[BUCKET_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== DNS configuration ===&lt;br /&gt;
&lt;br /&gt;
# Get the load balancer IP:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;gcloud compute addresses describe [IP_ADDRESS_NAME] --global --format=&amp;quot;get(address)&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Configure DNS records:&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A record&amp;#039;&amp;#039;&amp;#039; — point to the load balancer IP&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AAAA record&amp;#039;&amp;#039;&amp;#039; — for IPv6 support&lt;br /&gt;
&lt;br /&gt;
=== Verification ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Verify bucket setup&lt;br /&gt;
gsutil ls -L gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Check SSL certificate&lt;br /&gt;
gcloud compute ssl-certificates describe [SSL_CERT_NAME]&lt;br /&gt;
&lt;br /&gt;
# Test load balancer&lt;br /&gt;
curl -I https://[DOMAIN_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Deployment ==&lt;br /&gt;
&lt;br /&gt;
=== Build the frontend ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Clone the repository&lt;br /&gt;
git clone https://github.com/ohcnetwork/care_fe.git&lt;br /&gt;
cd care_fe&lt;br /&gt;
&lt;br /&gt;
# Install dependencies (a postinstall script runs automatically to&lt;br /&gt;
# install platform deps and generate headers)&lt;br /&gt;
npm install&lt;br /&gt;
&lt;br /&gt;
# Build the application for production&lt;br /&gt;
npm run build&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Note|1=The &amp;lt;code&amp;gt;care_fe&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; has no &amp;lt;code&amp;gt;setup&amp;lt;/code&amp;gt; script. Running &amp;lt;code&amp;gt;npm install&amp;lt;/code&amp;gt; automatically triggers the &amp;lt;code&amp;gt;postinstall&amp;lt;/code&amp;gt; script, so no separate setup step is required. The production build is written to the &amp;lt;code&amp;gt;dist/&amp;lt;/code&amp;gt; directory — that is the directory you upload in the next step.}}&lt;br /&gt;
&lt;br /&gt;
=== Upload build files ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Upload all build files&lt;br /&gt;
gsutil -m cp -r dist/* gs://[BUCKET_NAME]/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Cache-control configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Dynamic content (no cache)&lt;br /&gt;
gsutil -m setmeta -h &amp;quot;Cache-Control:no-cache, no-store, must-revalidate&amp;quot; \&lt;br /&gt;
  gs://[BUCKET_NAME]/service-worker.js \&lt;br /&gt;
  gs://[BUCKET_NAME]/*.js.map&lt;br /&gt;
&lt;br /&gt;
# HTML files (1 hour cache)&lt;br /&gt;
gsutil -m setmeta -h &amp;quot;Cache-Control:public, max-age=3600&amp;quot; \&lt;br /&gt;
  gs://[BUCKET_NAME]/index.html \&lt;br /&gt;
  gs://[BUCKET_NAME]/robots.txt&lt;br /&gt;
&lt;br /&gt;
# Manifest files (1 day cache)&lt;br /&gt;
gsutil -m setmeta -h &amp;quot;Cache-Control:public, max-age=86400&amp;quot; \&lt;br /&gt;
  gs://[BUCKET_NAME]/manifest.* \&lt;br /&gt;
  gs://[BUCKET_NAME]/favicon.ico&lt;br /&gt;
&lt;br /&gt;
# Static assets (1 year cache)&lt;br /&gt;
gsutil -m setmeta -h &amp;quot;Cache-Control:public, max-age=31536000&amp;quot; \&lt;br /&gt;
  gs://[BUCKET_NAME]/static/* \&lt;br /&gt;
  gs://[BUCKET_NAME]/assets/* \&lt;br /&gt;
  gs://[BUCKET_NAME]/*.{js,css,png,svg,jpg}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Cache strategy ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Content Type&lt;br /&gt;
! Cache Duration&lt;br /&gt;
! Cache-Control Header&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic&lt;br /&gt;
| No cache&lt;br /&gt;
| &amp;lt;code&amp;gt;no-cache, no-store, must-revalidate&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HTML&lt;br /&gt;
| 1 hour&lt;br /&gt;
| &amp;lt;code&amp;gt;public, max-age=3600&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Manifests&lt;br /&gt;
| 1 day&lt;br /&gt;
| &amp;lt;code&amp;gt;public, max-age=86400&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Static&lt;br /&gt;
| 1 year&lt;br /&gt;
| &amp;lt;code&amp;gt;public, max-age=31536000&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rollback ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# 1. List available versions&lt;br /&gt;
gsutil ls -a gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# 2. Restore specific version&lt;br /&gt;
gsutil cp -r gs://[BUCKET_NAME]@[TIMESTAMP]/* gs://[BUCKET_NAME]/&lt;br /&gt;
&lt;br /&gt;
# 3. Invalidate CDN cache&lt;br /&gt;
gcloud compute url-maps invalidate-cdn-cache [URL_MAP_NAME] \&lt;br /&gt;
  --path &amp;quot;/*&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Post-deployment verification ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Check website accessibility&lt;br /&gt;
curl -I https://[DOMAIN_NAME]&lt;br /&gt;
&lt;br /&gt;
# Verify cache headers&lt;br /&gt;
curl -I https://[DOMAIN_NAME]/index.html&lt;br /&gt;
curl -I https://[DOMAIN_NAME]/static/js/main.js&lt;br /&gt;
&lt;br /&gt;
# Check CDN status&lt;br /&gt;
gcloud compute backend-buckets describe [BACKEND_BUCKET_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Monitoring &amp;amp;amp; operations ==&lt;br /&gt;
&lt;br /&gt;
=== Cloud Monitoring configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Enable monitoring service&lt;br /&gt;
gcloud services enable monitoring.googleapis.com&lt;br /&gt;
&lt;br /&gt;
# Create monitoring workspace&lt;br /&gt;
gcloud monitoring workspaces create [WORKSPACE_NAME] \&lt;br /&gt;
  --display-name=&amp;quot;GCS Website Monitoring&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Key metrics ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Component&lt;br /&gt;
! Metrics to Monitor&lt;br /&gt;
|-&lt;br /&gt;
| CDN&lt;br /&gt;
| Cache hit ratio, Edge latency&lt;br /&gt;
|-&lt;br /&gt;
| Load Balancer&lt;br /&gt;
| Request count, Response latency&lt;br /&gt;
|-&lt;br /&gt;
| Storage&lt;br /&gt;
| Storage usage, Egress costs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
==== SSL/certificate issues ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Check certificate status&lt;br /&gt;
gcloud compute ssl-certificates describe [SSL_CERT_NAME]&lt;br /&gt;
&lt;br /&gt;
# Verify domain mapping&lt;br /&gt;
gcloud compute target-https-proxies describe [HTTPS_PROXY_NAME]&lt;br /&gt;
&lt;br /&gt;
# Update certificate&lt;br /&gt;
gcloud compute ssl-certificates create [SSL_CERT_NAME]-new \&lt;br /&gt;
  --domains=[DOMAIN_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== CDN/cache issues ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Check object metadata&lt;br /&gt;
gsutil stat gs://[BUCKET_NAME]/path/to/file&lt;br /&gt;
&lt;br /&gt;
# Invalidate specific path&lt;br /&gt;
gcloud compute url-maps invalidate-cdn-cache [URL_MAP_NAME] \&lt;br /&gt;
  --path &amp;quot;/static/*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Invalidate all cache&lt;br /&gt;
gcloud compute url-maps invalidate-cdn-cache [URL_MAP_NAME] \&lt;br /&gt;
  --path &amp;quot;/*&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Access issues ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Check bucket permissions&lt;br /&gt;
gsutil iam get gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Update permissions&lt;br /&gt;
gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]&lt;br /&gt;
&lt;br /&gt;
# Test access&lt;br /&gt;
curl -I https://[DOMAIN_NAME]&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Maintenance cadence ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Daily&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Monitor error rates&lt;br /&gt;
* Check CDN performance&lt;br /&gt;
* Review access logs&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Weekly&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Review cost metrics&lt;br /&gt;
* Check SSL certificate status&lt;br /&gt;
* Analyze traffic patterns&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Monthly&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Review IAM permissions&lt;br /&gt;
* Update security policies&lt;br /&gt;
* Optimize cache settings&lt;br /&gt;
&lt;br /&gt;
=== Cost management ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Get current month&amp;#039;s cost&lt;br /&gt;
gcloud billing accounts list&lt;br /&gt;
&lt;br /&gt;
# View CDN usage&lt;br /&gt;
gcloud compute backend-buckets describe [BACKEND_BUCKET_NAME] \&lt;br /&gt;
  --format=&amp;quot;get(cdnPolicy)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Optimize storage class&lt;br /&gt;
gsutil rewrite -s STANDARD gs://[BUCKET_NAME]/**&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Backup configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# Create backup script&lt;br /&gt;
cat &amp;gt; backup.sh &amp;lt;&amp;lt;EOF&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
BACKUP_DATE=\$(date +%Y%m%d)&lt;br /&gt;
gsutil -m cp -r gs://[BUCKET_NAME] gs://[BACKUP_BUCKET]/\$BACKUP_DATE&lt;br /&gt;
gsutil lifecycle set lifecycle.json gs://[BACKUP_BUCKET]&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
# Configure retention policy&lt;br /&gt;
cat &amp;gt; lifecycle.json &amp;lt;&amp;lt;EOF&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;rule&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;action&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;Delete&amp;quot;},&lt;br /&gt;
      &amp;quot;condition&amp;quot;: {&amp;quot;age&amp;quot;: 30}&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
EOF&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Index|Google Cloud overview]] — choosing between GKE and GCS&lt;br /&gt;
* [[Gke|Deploy on GKE]] — host the Care backend on Kubernetes&lt;br /&gt;
&lt;br /&gt;
{{Related}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>