For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /tr/docs/web/deploy-google-cloud.md (or send Accept: text/markdown).
Google Cloud'a dağıtın
Kitin Docker imajını Cloud Build'de derleyin, yönetilen sırlarla Cloud Run'da çalıştırın ve alan adınıza koyun.
Başlangıç seviyesinde izlenecek yol
Ön koşullar: uygulama yerelde çalışıyor, internetten erişebileceğiniz gerçek bir veritabanı (Veritabanını kurun) ve yayınladığınız özellikler için sağlayıcı hesapları. Bir Google hesabı gerekiyor; hafif kullanım ücretsiz katmanda kalsa da faturalandırma kurulumu bir kart ister.
Kısa terimler: konteyner imajı, herhangi bir ana bilgisayarın çalıştırabileceği paketlenmiş bir uygulama kopyasıdır. Artifact Registry, Google'ın imaj deposudur. Cloud Build imajı Google'ın makinelerinde derler — yerel Docker gerekmez. Cloud Run imajı bir HTTPS servisi olarak çalıştırır ve ölçekler. Secret Manager şifreleri ve anahtarları tutar. Revizyon, servisin dağıtılmış bir sürümüdür.
İnşa ettiğiniz şey: bir Google Cloud projesi, imajınızı tutan bir Artifact Registry deposu, uygulamayı HTTPS üzerinden sunan bir Cloud Run servisi, Secret Manager'da sırlar ve yönetilen bir Postgres. Kitin kök Dockerfile'ı zaten 8080 numaralı bağlantı noktasında dinleyen bağımsız bir Next.js sunucusu üretir — tam olarak Cloud Run'ın beklediği.
Dürüst maliyet notu: Cloud Run'ın ücretsiz katmanı hafif trafiği karşılar, ancak Cloud SQL — Google'ın yönetilen Postgres'i — ücretsiz katmana sahip değildir. Supabase veya Neon ücretsiz katman veritabanı başlamanın en ucuz yoludur; bu kılavuz o yolu kullanır. Denemeden önce Billing → Budgets & alerts altına bir bütçe uyarısı eklemeyi düşünün.
Hesabı oluşturun ve CLI'yi kurun
1. console.cloud.google.com adresini açın, Google hesabınızla oturum açın ve koşulları kabul edin.
2. İstendiğinde faturalandırmayı ekleyin: Billing → Link a billing account → Create billing account. Hesabı etkinleştirmek için kart gerekir; deneme kredisi ilk denemeleri karşılar.
3. Proje açılır menüsüne → New Project'e tıklayın, adlandırın ve Create — veya Google ile giriş için oluşturduğunuz projeyi yeniden kullanın; tek proje yeterlidir.
4. Google Cloud CLI'yi cloud.google.com/sdk adresinden kurun: işletim sisteminiz için yükleyiciyi indirin, tamamlayın, ardından gcloud komutunun kullanılabilir olması için yeni bir terminal açın.
5. Aşağıdaki iki komutu çalıştırın. İlki CLI'yi yetkilendirmek için bir tarayıcı açar; ikincisi projenizi seçer — konsol panosunda gösterilen ve her zaman adla aynı olmayan proje kimliğini kullanın.
Beklenen: gcloud config list hesabınızı ve projenizi gösterir. gcloud tanınmıyorsa terminali yeniden açın veya önce yükleyiciyi bitirin.
gcloud auth login
gcloud config set project YOUR_PROJECT_IDÜretim veritabanını oluşturun
Yeni başlayan yolu — Google dışında yönetilen Postgres. supabase.com adresinde: New project → bir ad, veritabanı şifresi ve bölge seçin → hazırlanmasını bekleyin → Project Settings → Database. Supabase iki bağlantı dizesi sunar: 5432 numaralı bağlantı noktasındaki oturum havuzu / doğrudan bağlantı ve 6543 numaralı bağlantı noktasındaki işlem havuzu — 5432 dizesi geçişler ve uzun ömürlü istemciler içindir, 6543 dizesi sunucusuz uygulama içindir. neon.tech adresinde: New project → gösterdiği bağlantı dizesini kopyalayın. İkisi de işe yarar; şifre kısmını bozulmadan tutun.
Doğrudan/oturum dizesini kök .env içindeki DATABASE_URL'ye koyun — geçiş aracı kök dosyayı okur ve oturum bağlantısına ihtiyaç duyar — ve yerel geliştirme sunucusu için apps/web/.env.local içine. Ardından kitin tablolarını yeni veritabanında oluşturmak için depo kökünden geçiş komutunu bir kez çalıştırın. Dağıtılan uygulamanın kullandığı DATABASE_URL sırrı bunun yerine havuzlanmış 6543 dizesi olabilir.
Google yerel alternatifi, aynı proje içinde yönetilen bir Postgres olan Cloud SQL'dir. Ücretsiz katmanı yoktur ve özel IP bağlantıları bir VPC konektörü gerektirir — onu bir başlangıç noktası değil, sonraki bir yükseltme olarak görün.
# DATABASE_URL=<the direct/session Postgres string, port 5432> in .env + apps/web/.env.local, then:
corepack pnpm --filter @supastack/db db:migrateServisleri etkinleştirin ve imajı gönderin
Aşağıdaki komutları depo kökünden çalıştırın. Bu dağıtımın kullandığı dört Google servisini etkinleştirir, Artifact Registry'de bir Docker deposu oluşturur ve depoyu Cloud Build'e gönderir — kök Dockerfile'ı uzaktan derler, bu yüzden Docker Desktop gerekmez.
YOUR_PROJECT_ID yerine kendi değerinizi yazın ve bir bölge seçin — aşağıda us-central1 — ve onu depo ve servis için yeniden kullanın. Beklenen: derleme günlüğü birkaç dakika akar ve DONE / STATUS: SUCCESS ile biter. İmaj ardından konsolda Artifact Registry → supastack → web altında görünür.
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com secretmanager.googleapis.com
gcloud artifacts repositories create supastack --repository-format=docker --location=us-central1
gcloud builds submit --tag us-central1-docker.pkg.dev/YOUR_PROJECT_ID/supastack/web:latestSırları Secret Manager'da saklayın
Sırlar asla --set-env-vars'a veya imaja girmemelidir — ikisi de düz metin olarak saklanır ve servis yapılandırmasını okuyabilen herkese görünür. Secret Manager onları şifreli tutar ve çalışma zamanında enjekte eder.
1. Konsolda Security → Secret Manager → Create Secret'i açın.
2. DATABASE_URL'yi tam Postgres bağlantı dizesiyle — havuzlanmış sunucusuz dize uygulama için uygundur — AUTH_SECRET'ı en az 32 rastgele karakterle (openssl rand -hex 32 bir tane üretir) ve CREDENTIAL_ENCRYPTION_KEY'i Base64 kodlu 32 baytlık bir anahtarla (openssl rand -base64 32) oluşturun; çalışma alanlarının uygulamada sakladığı sağlayıcı anahtarlarını şifreler.
3. Etkinleştirdiğiniz her sağlayıcı için bir sır oluşturun — örneğin STRIPE_SECRET_KEY artı STRIPE_WEBHOOK_SECRET, RESEND_API_KEY, GOOGLE_CLIENT_SECRET, GITHUB_CLIENT_SECRET. EMAIL_PROVIDER=resend gibi gizli olmayan ayarlar sır değil, düz ortam değişkenleri olarak kalır.
Bir servis ilk kez bir sırra başvurduğunda, çalışma zamanı servis hesabının onu okuma iznine ihtiyacı vardır — konsolun servis düzenleyicisi aracılığıyla sır eklediğinizde Google bu izni otomatik olarak önerir; CLI'de dağıtım hatası, verilmesi gereken eksik Secret Manager rolünü adlandırır.
# Secrets to create in Secret Manager:
DATABASE_URL # Postgres connection string — the pooled serverless string is fine
AUTH_SECRET # openssl rand -hex 32
CREDENTIAL_ENCRYPTION_KEY # openssl rand -base64 32
# plus one per enabled provider, e.g.:
STRIPE_SECRET_KEY
STRIPE_WEBHOOK_SECRET
RESEND_API_KEY
GOOGLE_CLIENT_SECRET
GITHUB_CLIENT_SECRETCloud Run servisini dağıtın
Konsol yolu: Cloud Run → Create service → Deploy one revision from an existing container image → gönderilen …/supastack/web:latest imajını seçin → aynı bölgeyi seçin → Authentication altında Allow unauthenticated invocations'ı seçin (herkese açık bir uygulamadır) → Create.
Aşağıdaki CLI eşdeğeri ortam bağlantısını aynı adımda ekler. Düz metin yapılandırma --set-env-vars'a gider; sırlar --set-secrets içinde Secret Manager adlarıyla başvurulur. Sağlayıcı bayraklarınızı (EMAIL_PROVIDER, BILLING_PROVIDER, AI_PROVIDER, JOB_PROVIDER) APP_URL yanında düz env değişkenleri olarak ekleyin.
APP_ENV=production gereklidir — onsuz uygulama local modunda açılır: üretim yapılandırma doğrulaması atlanır, güvenli çerez önekleri kapalı kalır ve yalnızca geliştirmeye özel /mail-preview sayfası herkese açık erişilebilir kalır (EMAIL_PROVIDER=local iken yerel e-posta giden kutusunu sızdırır). Üretim ardından açılışta dört değer daha gerektirir: EXPO_PUBLIC_API_URL, mobil uygulamanın API'ye ulaşmak için kullandığı genel https URL'sidir — servis URL'sine ayarlayın (yalnızca web dağıtımında APP_URL ile aynı); EXPO_PUBLIC_APP_SCHEME mobil derin bağlantı şemasıdır — mobil uygulama yayınlamıyorsanız supastack gibi herhangi bir geçerli değer işe yarar; MOBILE_ALLOWED_ORIGINS, sunucunun güvendiği tam https kökenlerinin virgülle ayrılmış listesidir — uygulama URL'niz doğru başlangıçtır ve joker karakterler reddedilir; CREDENTIAL_ENCRYPTION_KEY saklanan sağlayıcı kimlik bilgilerini şifreler ve Secret Manager'da kalır.
Cloud Run ilk dağıtımda bir https://….run.app URL'si atar ve kimlik doğrulama geri çağrılarının ve bağlantıların çalışması için uygulamanın APP_URL'si gerçek genel URL'sine eşit olmalıdır. Bu yüzden önce yer tutucuyla bir kez dağıtın, servis sayfasından *.run.app URL'sini kopyalayın, ardından servisi (konsol: Edit & deploy new revision veya komutu yeniden çalıştırın) APP_URL — ve eşleşen EXPO_PUBLIC_API_URL / MOBILE_ALLOWED_ORIGINS değerleri — ona ayarlanmış şekilde güncelleyin. Konteyner bağlantı noktası 8080'de kalır — Cloud Run varsayılanı zaten Dockerfile'ın PORT'uyla eşleşir.
gcloud run deploy supastack --image us-central1-docker.pkg.dev/YOUR_PROJECT_ID/supastack/web:latest --region us-central1 --allow-unauthenticated --set-env-vars "APP_ENV=production,APP_URL=https://YOUR_SERVICE_URL,EXPO_PUBLIC_API_URL=https://YOUR_SERVICE_URL,EXPO_PUBLIC_APP_SCHEME=supastack,MOBILE_ALLOWED_ORIGINS=https://YOUR_SERVICE_URL" --set-secrets "DATABASE_URL=DATABASE_URL:latest,AUTH_SECRET=AUTH_SECRET:latest,CREDENTIAL_ENCRYPTION_KEY=CREDENTIAL_ENCRYPTION_KEY:latest"Kendi alan adınızı bağlayın (isteğe bağlı)
Test ederken bunu atlayın — *.run.app URL'si zaten HTTPS sunar. Hazır olduğunuzda: Cloud Run → servisiniz → Custom Domains / Domain Mappings → Add mapping → servisi seçin ve alan adınızı girin.
İstenirse alan adı sahipliğini doğrulayın (Google size yol gösterir), ardından eşleme ekranının listelediği DNS kayıtlarını kayıt şirketinizde oluşturun. Yönetilen HTTPS sertifikası, kayıtlar yayıldıktan sonra otomatik olarak verilir — genellikle dakikalar, en fazla bir gün.
Alan adı trafik sunduktan sonra APP_URL'yi https://yourdomain.com olarak güncelleyin ve eşleşen OAuth redirect URI'lerini (https://yourdomain.com/api/auth/callback/…) kaydedin — giriş kılavuzları nereyi kapsadığını anlatır.
Dağıtımı doğrulayın
https://YOUR_SERVICE_URL/api/health adresini açın — ok bekleyin. Ardından uygulamayı uçtan uca deneyin: URL'yi açın, kaydolun, bir e-posta kodu isteyin, gelen kutusuna ulaştığını doğrulayın (bu EMAIL_PROVIDER=resend, RESEND_API_KEY ve doğrulanmış bir gönderen gerektirir — yerel adaptör asla gerçek gelen kutularına ulaşmaz), oturum açın ve etkinleştirdiğiniz bir özelliği kullanın.
Cloud Run → servisiniz → Logs istek ve hata çıktısını gösterir. Bir dağıtım ters giderse Revisions sekmesi önceki revizyona tek tıkla geri dönüş sunar.
Mobil ve masaüstü istemciler bu HTTPS arka ucunu işaret etmelidir: Expo için apps/mobile/.env.local içindeki EXPO_PUBLIC_API_URL, masaüstü kabuğu için SUPASTACK_APP_URL.