Архитектура фронтенда CRC на GCP
Браузер → Cloud CDN → Cloud Load Balancer → Cloud Storage bucket
↓
Cloud DNS → External IP (Load Balancer)
Важно: В отличие от AWS и Azure, GCP требует Load Balancer для CDN. Это дороже (~$18/мес), но $300 кредитов покрывают расходы.
Cloud Storage
# Создаём бакет
gsutil mb -p PROJECT_ID -l us-central1 -b on gs://ivan-petrov-resume
# Настраиваем как static website
gsutil web set -m index.html -e error.html gs://ivan-petrov-resume
# Делаем публичным
gsutil iam ch allUsers:objectViewer gs://ivan-petrov-resume
# Загружаем файлы
gsutil -m cp -r ./frontend/* gs://ivan-petrov-resume/
# Устанавливаем Content-Type
gsutil setmeta -h "Content-Type:text/html; charset=utf-8" \
gs://ivan-petrov-resume/index.html
gsutil setmeta -h "Content-Type:text/css" \
gs://ivan-petrov-resume/style.css
gsutil setmeta -h "Cache-Control:max-age=3600" \
gs://ivan-petrov-resume/index.html
Cloud CDN с Load Balancer
# Backend bucket
gcloud compute backend-buckets create crc-backend-bucket \
--gcs-bucket-name=ivan-petrov-resume \
--enable-cdn \
--cache-mode=CACHE_ALL_STATIC
# URL map
gcloud compute url-maps create crc-url-map \
--default-backend-bucket=crc-backend-bucket
# SSL certificate (managed)
gcloud compute ssl-certificates create crc-ssl-cert \
--domains=resume.ivanpetrov.com \
--global
# HTTPS proxy
gcloud compute target-https-proxies create crc-https-proxy \
--url-map=crc-url-map \
--ssl-certificates=crc-ssl-cert \
--global
# Reserved IP
gcloud compute addresses create crc-ip --global
# Forwarding rule
gcloud compute forwarding-rules create crc-https-forwarding \
--target-https-proxy=crc-https-proxy \
--ports=443 \
--address=crc-ip \
--global
# HTTP → HTTPS redirect
gcloud compute target-http-proxies create crc-http-proxy \
--url-map=crc-url-map
gcloud compute forwarding-rules create crc-http-forwarding \
--target-http-proxy=crc-http-proxy \
--ports=80 \
--address=crc-ip \
--global
# Получаем IP
gcloud compute addresses describe crc-ip --global --format='get(address)'
Cloud DNS
# Создаём DNS-зону
gcloud dns managed-zones create ivanpetrov-zone \
--dns-name=ivanpetrov.com \
--description="CRC DNS"
# A-запись на LB IP
gcloud dns record-sets create resume.ivanpetrov.com \
--zone=ivanpetrov-zone \
--type=A \
--ttl=300 \
--rrdatas=34.120.XX.XX
Firebase Hosting (альтернатива)
Для экономии используйте Firebase Hosting вместо LB + CDN:
# Установка Firebase CLI
npm install -g firebase-tools
# Инициализация
firebase init hosting
# Выберите проект, директорию frontend/
# Деплой
firebase deploy --only hosting
# Результат: https://PROJECT_ID.web.app (бесплатно!)
# Custom domain через Firebase Console
Firebase Hosting: бесплатный HTTPS, CDN, custom domain. Для CRC -- оптимальная альтернатива.
Инвалидация кэша
# Cloud CDN
gcloud compute url-maps invalidate-cdn-cache crc-url-map \
--path "/*" \
--async