Uygulama Barındırmayı Yapılandırma

Ortam değişkenleri veya eşzamanlılık, CPU ve bellek sınırları gibi çalışma zamanı ayarları gibi gelişmiş yapılandırmalar için uygulamanızın kök dizininde apphosting.yaml dosyasını oluşturup düzenlemeniz gerekir. Bu dosya, Cloud Secret Manager ile yönetilen gizli anahtarlara yapılan referansları da desteklediğinden kaynak kontrolüne giriş yapmayı güvenli hale getirir.

Arka ucun Cloud Run hizmeti ayarlarını, bazı ortam değişkenlerini ve Cloud Secret Manager tarafından yönetilen gizli anahtar referanslarını içeren tipik bir apphosting.yaml dosyası aşağıdaki gibi görünür:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

Bu kılavuzun geri kalanında, bu örnek ayarlar hakkında daha fazla bilgi ve bağlam sağlanmaktadır.

Cloud Run hizmet ayarlarını yapılandırma

apphosting.yaml ayarlarıyla Cloud Run hizmetinizin sağlanma şeklini yapılandırabilirsiniz. Cloud Run hizmeti için kullanılabilen ayarlar runConfig nesnesinde sağlanır:

  • cpu - Her sunum örneği için kullanılan CPU sayısı (varsayılan 0).
  • memoryMiB - MiB cinsinden her sunum örneğine ayrılan bellek miktarı (varsayılan 512)
  • maxInstances - Aynı anda çalıştırılabilecek maksimum container sayısı (varsayılan olarak 100'dür ve kota ile yönetilir)
  • minInstances – Her zaman etkin kalacak kapsayıcı sayısı (varsayılan 0).
  • concurrency - Her sunma örneğinin alabileceği maksimum istek sayısı (varsayılan olarak 80).

cpu ile memoryMiB arasındaki önemli ilişkiye dikkat edin. Bellek, 128 ile 32768 arasında herhangi bir tam sayı değerine ayarlanabilir ancak bellek sınırını artırmak CPU sınırlarını artırmayı gerektirebilir:

  • 4GiB üzeri bir hız için en az 2 CPU gerekir
  • 8GiB üzeri bir hız için en az 4 CPU gerekir
  • 16 GiB üzeri için en az 6 CPU gerekir
  • 24 GiB üzeri için en az 8 CPU gerekir

Benzer şekilde, cpu değeri eşzamanlılık ayarlarını etkiler. 1'den düşük bir CPU değeri ayarlarsanız eşzamanlılığı 1 olarak ayarlamanız gerekir. CPU yalnızca istek işleme sırasında tahsis edilir.

Derleme ortamını yapılandırma

Bazen derleme işleminiz için üçüncü taraf API anahtarları veya ayarlanabilir ayarlar gibi ek yapılandırmalar kullanmanız gerekir. App Hosting, projenizde bu tür verileri depolamak ve almak için apphosting.yaml uygulamasında ortam yapılandırması sunar.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

Next.js uygulamalarında, ortam değişkenleri içeren alanv dosyaları da Uygulama Barındırma ile çalışır. Herhangi bir çerçeveyle ayrıntılı ortam değişkeni kontrolü için apphosting.yaml kullanmanızı öneririz.

apphosting.yaml ürününde, availability özelliğini kullanarak hangi işlemlerin ortam değişkeninize erişebileceğini belirtebilirsiniz. Bir ortam değişkenini yalnızca derleme ortamı veya yalnızca çalışma zamanı ortamı tarafından kullanılabilecek şekilde kısıtlayabilirsiniz. Varsayılan olarak her iki taraf da kullanılabilir.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Next.js uygulamalarında, bir değişkeni tarayıcıda erişilebilir hale getirmek için NEXT_PUBLIC_ önekini, dotenv dosyanızda kullandığınız şekilde kullanabilirsiniz.

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Geçerli değişken anahtarları A-Z karakter veya alt çizgilerden oluşur. Bazı ortam değişkeni anahtarları dahili kullanım için ayrılmıştır. Yapılandırma dosyalarınızda şu anahtarların hiçbirini kullanmayın:

  • X_FIREBASE_ ile başlayan tüm değişkenler
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

Gizli anahtar parametrelerini depolama ve bunlara erişme

API anahtarları gibi hassas bilgiler, gizli anahtar olarak depolanmalıdır. Hassas bilgilerin kaynak kontrolünde kontrol edilmesini önlemek için apphosting.yaml içindeki gizli anahtarlara referans verebilirsiniz.

secret türündeki parametreler, Cloud Secret Manager'da depolanan bir değere sahip dize parametrelerini temsil eder. Gizli anahtar parametreleri, değeri doğrudan türetmek yerine, Cloud Secret Manager'daki mevcut olup olmadıklarını kontrol eder ve değerleri kullanıma sunma sırasında yükler.

  -   variable: API_KEY
      secret: myApiKeySecret

Cloud Secret Manager'daki gizli anahtarların birden fazla sürümü olabilir. Varsayılan olarak, canlı arka ucunuz tarafından kullanılabilen bir gizli parametrenin değeri, arka uç oluşturulduğu sırada gizli anahtarın mevcut en son sürümüne sabitlenir. Parametrelerin sürüm oluşturma ve yaşam döngüsü yönetimiyle ilgili gereksinimleriniz varsa Cloud Secret Manager ile belirli sürümlere sabitleyebilirsiniz. Örneğin, 5. sürüme sabitlemek için:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

firebase apphosting:secrets:set CLI komutuyla gizli anahtar oluşturabilirsiniz. Gerekli izinleri eklemeniz istenir. Bu akışta, gizli anahtar referansını apphosting.yaml öğesine otomatik olarak ekleme seçeneği sunulur.

Cloud Secret Manager'ın tüm işlevlerinden yararlanmak için Cloud Secret Manager konsolunu kullanabilirsiniz. Bunu yaparsanız firebase apphosting:secrets:grantaccess CLI komutunu kullanarak Uygulama Barındırma arka ucunuza izin vermeniz gerekir.

Firebase Auth durumunu senkronize et

Firebase Auth kullanan uygulamalar, kimlik doğrulama durumunun istemci ve sunucu arasında senkronize edilmesine yardımcı olmak için Firebase Web SDK'sını kullanmayı düşünmelidir. Bu işlemi, bir Service Worker ile FirebaseServerApp uygulayarak kolaylaştırabilirsiniz. Temel görev akışı şöyledir:

  1. Sunucuya yapılan isteklerde uygulamanız için doğru başlıkları ekleyen bir hizmet çalışanı uygulayın.
  2. Sunucudaki istekten üstbilgileri alın ve FirebaseServerApp ile bunu yetkili bir kullanıcıya dönüştürün.