Налаштування деплою сайту на Google Cloud (GCE/Cloud Run)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування деплою сайту на Google Cloud (GCE/Cloud Run)
Складна
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування розгортання сайту на Google Cloud (GCE/Cloud Run)

Google Cloud пропонує два основні шляхи для веб-додатків: Compute Engine (GCE) — віртуальні машини, Cloud Run — serverless-контейнери з автоскейлингом до нуля.

Cloud Run — рекомендований варіант

Cloud Run запускає Docker-контейнер і масштабує його від 0 до N екземплярів. Платите тільки за фактичний час обробки запросів.

# Настройка проекту
gcloud config set project myproject-123456

# Складання і розгортання однією командою
gcloud run deploy myapp \
    --source . \
    --region europe-west3 \
    --platform managed \
    --allow-unauthenticated \
    --port 8080 \
    --min-instances 1 \         # не масштабувати до нуля (уникнути cold start)
    --max-instances 10 \
    --memory 512Mi \
    --cpu 1 \
    --set-env-vars APP_ENV=production \
    --set-secrets DB_PASSWORD=db-password:latest

Dockerfile для Cloud Run

FROM php:8.3-fpm-alpine

WORKDIR /app

COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-scripts

COPY . .
RUN php artisan config:cache && php artisan route:cache

# Cloud Run вимагає PORT зі змінної окружения
ENV PORT=8080
EXPOSE 8080

CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8080"]

Terraform для Cloud Run

# main.tf
resource "google_cloud_run_v2_service" "myapp" {
  name     = "myapp"
  location = "europe-west3"

  template {
    scaling {
      min_instance_count = 1
      max_instance_count = 20
    }

    containers {
      image = "gcr.io/myproject/myapp:latest"

      resources {
        limits = {
          cpu    = "1"
          memory = "512Mi"
        }
        cpu_idle = false
      }

      env {
        name  = "APP_ENV"
        value = "production"
      }

      env {
        name = "DB_PASSWORD"
        value_source {
          secret_key_ref {
            secret  = google_secret_manager_secret.db_password.secret_id
            version = "latest"
          }
        }
      }

      startup_probe {
        http_get { path = "/health" }
        initial_delay_seconds = 5
        timeout_seconds       = 3
      }
    }
  }
}

resource "google_cloud_run_v2_service_iam_member" "noauth" {
  name   = google_cloud_run_v2_service.myapp.name
  role   = "roles/run.invoker"
  member = "allUsers"
}

Google Compute Engine (GCE)

# Створити VM
gcloud compute instances create myapp-vm \
    --machine-type=e2-medium \
    --zone=europe-west3-a \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --tags=http-server,https-server \
    --metadata-from-file startup-script=startup.sh

# Правила firewall
gcloud compute firewall-rules create allow-http \
    --allow tcp:80,tcp:443 \
    --target-tags=http-server

Cloud Build CI/CD

# cloudbuild.yaml
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA', '.']

  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA']

  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - run
      - deploy
      - myapp
      - '--image=gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA'
      - '--region=europe-west3'
      - '--platform=managed'

timeout: '900s'

GitHub Actions + Google Cloud

- uses: google-github-actions/auth@v2
  with:
    credentials_json: ${{ secrets.GCP_CREDENTIALS }}

- uses: google-github-actions/setup-gcloud@v2

- name: Build and push
  run: |
    gcloud builds submit --tag gcr.io/$PROJECT_ID/myapp:$GITHUB_SHA

- name: Deploy to Cloud Run
  run: |
    gcloud run deploy myapp \
      --image gcr.io/$PROJECT_ID/myapp:$GITHUB_SHA \
      --region europe-west3 \
      --platform managed

Статичний сайт: GCS + Cloud CDN

# Створити бакет
gsutil mb -l EUROPE-WEST3 gs://myapp-static

# Дозволити публічний доступ
gsutil iam ch allUsers:objectViewer gs://myapp-static

# Загрузити
gsutil -m rsync -r -d ./dist gs://myapp-static

# Настроїти як website
gsutil web set -m index.html -e index.html gs://myapp-static

Терміни реалізації

Варіант Термін
Cloud Run (перший деплой) 1–2 дні
Cloud Run + Terraform 3–4 дні
GCE з Load Balancer 4–6 днів
GCS static + Cloud CDN 1 день