{"id":37621,"date":"2026-01-10T19:00:45","date_gmt":"2026-01-10T16:00:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/"},"modified":"2026-01-10T19:00:45","modified_gmt":"2026-01-10T16:00:45","slug":"minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/","title":{"rendered":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom"},"content":{"rendered":"<h2>Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom<\/h2>\n<p>Geli\u015ftirici olarak dijital d\u00fcnyadaki varl\u0131\u011f\u0131m\u0131z, bir nevi kartvizitimiz olan portfolyo sitelerimizle \u015fekillenir. Ancak bu sitelerin geli\u015ftirilmesi, bak\u0131m\u0131 ve performans\u0131 \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilir. Ben de bu makalede, minimalist, h\u0131zl\u0131 ve maliyet etkin bir geli\u015ftirici portfolyosunu Google Cloud Run \u00fczerinde nas\u0131l hayata ge\u00e7irdi\u011fimi ad\u0131m ad\u0131m anlataca\u011f\u0131m. Bu yakla\u015f\u0131m, hem geli\u015ftirici kimli\u011fimi en iyi \u015fekilde yans\u0131t\u0131yor hem de ziyaret\u00e7ilerime e\u015fsiz bir kullan\u0131c\u0131 deneyimi sunuyor.<\/p>\n<h3>Neden Minimalist ve H\u0131zl\u0131 Bir Portfolyo?<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital ortam\u0131nda, bir geli\u015ftiricinin \u00e7evrimi\u00e7i varl\u0131\u011f\u0131, potansiyel i\u015fverenler, i\u015f arkada\u015flar\u0131 ve topluluk \u00fcyeleri \u00fczerinde kal\u0131c\u0131 bir ilk izlenim b\u0131rakman\u0131n anahtar\u0131d\u0131r. Bu ba\u011flamda, portfolyo sitenizin minimalist ve h\u0131zl\u0131 olmas\u0131, sadece bir tercih de\u011fil, ayn\u0131 zamanda bir zorunluluktur.<\/p>\n<h4>\u0130lk \u0130zlenimin \u00d6nemi<\/h4>\n<p>Bir web sitesinin y\u00fcklenme h\u0131z\u0131, ziyaret\u00e7inin siteyle etkile\u015fimini do\u011frudan etkileyen en kritik fakt\u00f6rlerden biridir. Yap\u0131lan ara\u015ft\u0131rmalar, kullan\u0131c\u0131lar\u0131n yava\u015f y\u00fcklenen siteleri terk etme e\u011filiminde oldu\u011funu g\u00f6stermektedir. Minimalist bir tasar\u0131m, gereksiz \u00f6\u011felerden ar\u0131nd\u0131r\u0131lm\u0131\u015f, sade ve anla\u015f\u0131l\u0131r bir yap\u0131 sunarak ziyaret\u00e7inin dikkatini da\u011f\u0131tmaz ve i\u00e7eri\u011fe odaklanmas\u0131n\u0131 sa\u011flar. Bu, projelerinizi ve yeteneklerinizi net bir \u015fekilde sergilemenize olanak tan\u0131r ve profesyonel bir imaj \u00e7izer.<\/p>\n<h4>Geli\u015ftirici Kimli\u011fi ve Markala\u015fma<\/h4>\n<p>Bir geli\u015ftirici olarak, kendi web sitenizin performans\u0131 ve tasar\u0131m\u0131, kodlama yeteneklerinizin ve estetik anlay\u0131\u015f\u0131n\u0131z\u0131n bir yans\u0131mas\u0131d\u0131r. H\u0131zl\u0131 ve minimalist bir portfolyo, sadece teknik bilginizi de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimine verdi\u011finiz \u00f6nemi ve temiz kod prensiplerine ba\u011fl\u0131l\u0131\u011f\u0131n\u0131z\u0131 da g\u00f6sterir. Bu, ki\u015fisel markan\u0131z\u0131 g\u00fc\u00e7lendirir ve sizi di\u011fer adaylardan ay\u0131r\u0131r.<\/p>\n<h4>Maliyet ve Bak\u0131m Kolayl\u0131\u011f\u0131<\/h4>\n<p>Karma\u015f\u0131k ve kaynak yo\u011fun bir portfolyo sitesi, y\u00fcksek bar\u0131nd\u0131rma maliyetleri ve s\u00fcrekli bak\u0131m gereksinimleri anlam\u0131na gelebilir. Minimalist bir yakla\u015f\u0131m, daha az kaynak t\u00fcketimiyle daha d\u00fc\u015f\u00fck maliyetler sa\u011flar. Sunucusuz (serverless) mimarilerle birle\u015fti\u011finde, bak\u0131m y\u00fck\u00fc de \u00f6nemli \u00f6l\u00e7\u00fcde azal\u0131r, b\u00f6ylece geli\u015ftirme ve i\u00e7erik olu\u015fturmaya daha fazla zaman ay\u0131rabilirsiniz.<\/p>\n<h3>Google Cloud Run: Neden \u0130deal \u00c7\u00f6z\u00fcm?<\/h3>\n<p>Portfolyo sitem i\u00e7in bar\u0131nd\u0131rma \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131mda, \u00f6l\u00e7eklenebilirlik, maliyet etkinli\u011fi ve geli\u015ftirici dostu olmas\u0131 gibi kriterler \u00f6n plandayd\u0131. Google Cloud Run, bu kriterlerin tamam\u0131n\u0131 fazlas\u0131yla kar\u015f\u0131layan bir platform olarak \u00f6ne \u00e7\u0131kt\u0131.<\/p>\n<h4>Sunucusuz Mimarinin G\u00fcc\u00fc<\/h4>\n<p>Google Cloud Run, sunucusuz bir platformdur. Bu, altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmak zorunda kalmayaca\u011f\u0131n\u0131z anlam\u0131na gelir. Sanal makineler, i\u015fletim sistemleri veya sunucu konfig\u00fcrasyonlar\u0131 hakk\u0131nda endi\u015felenmenize gerek kalmaz. Sadece uygulaman\u0131z\u0131 Docker konteyneri olarak paketler ve Cloud Run&#8217;a da\u011f\u0131t\u0131rs\u0131n\u0131z. Cloud Run, uygulaman\u0131z\u0131 otomatik olarak \u00f6l\u00e7eklendirir ve sadece kullan\u0131ld\u0131\u011f\u0131 zaman \u00fccretlendirir. Bu &#8220;kulland\u0131\u011f\u0131n kadar \u00f6de&#8221; modeli, \u00f6zellikle d\u00fc\u015f\u00fck trafikli portfolyo siteleri i\u00e7in olduk\u00e7a maliyet avantajl\u0131d\u0131r.<\/p>\n<h4>\u00d6l\u00e7eklenebilirlik ve Esneklik<\/h4>\n<p>Cloud Run, talebe g\u00f6re otomatik olarak s\u0131f\u0131rdan y\u00fczlerce \u00f6rne\u011fe kadar \u00f6l\u00e7eklenebilir. Portfolyo siteniz bir anda y\u00fcksek trafik alsa bile, Cloud Run bu y\u00fck\u00fc sorunsuz bir \u015fekilde kar\u015f\u0131lar. Esnekli\u011fi sayesinde, herhangi bir dilde yaz\u0131lm\u0131\u015f ve herhangi bir ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olan uygulamalar\u0131 bar\u0131nd\u0131rabilirsiniz, yeter ki bir Docker konteyneri i\u00e7inde \u00e7al\u0131\u015fabilsin.<\/p>\n<h4>Basit Da\u011f\u0131t\u0131m S\u00fcreci<\/h4>\n<p>Uygulaman\u0131z\u0131 Cloud Run&#8217;a da\u011f\u0131tmak olduk\u00e7a basittir. Bir Dockerfile olu\u015fturur, uygulaman\u0131z\u0131 bir konteyner imaj\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve bu imaj\u0131 Google Container Registry (GCR) veya Artifact Registry&#8217;ye y\u00fcklersiniz. Ard\u0131ndan, tek bir <code>gcloud<\/code> komutuyla veya Google Cloud konsolu \u00fczerinden uygulaman\u0131z\u0131 Cloud Run&#8217;a da\u011f\u0131tabilirsiniz. Bu basitlik, geli\u015ftirme ve da\u011f\u0131t\u0131m d\u00f6ng\u00fcs\u00fcn\u00fc h\u0131zland\u0131r\u0131r.<\/p>\n<p><strong>\u00d6rnek Da\u011f\u0131t\u0131m Komutu:<\/strong><\/p>\n<pre><code class=\"language-bash\">gcloud run deploy my-portfolio-app \\\n  --image gcr.io\/my-project-id\/my-portfolio-image \\\n  --platform managed \\\n  --region us-central1 \\\n  --allow-unauthenticated<\/pre>\n<p><\/code><\/p>\n<h4>Maliyet Etkinli\u011fi<\/h4>\n<p>Cloud Run'\u0131n en cazip \u00f6zelliklerinden biri maliyet modelidir. Uygulaman\u0131z sadece gelen istekleri i\u015flerken \u00fccretlendirilir. Uygulaman\u0131zda trafik yoksa, Cloud Run otomatik olarak s\u0131f\u0131ra \u00f6l\u00e7eklenir ve hi\u00e7bir \u00fccret \u00f6demezsiniz. Bu, \u00f6zellikle ki\u015fisel projeler ve portfolyo siteleri i\u00e7in b\u00fct\u00e7e dostu bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>Portfolyo Uygulamas\u0131n\u0131n Teknik Mimarisi<\/h3>\n<p>Minimalist ve h\u0131zl\u0131 bir portfolyo i\u00e7in teknik mimariyi tasarlarken, gereksiz karma\u015f\u0131kl\u0131ktan ka\u00e7\u0131nmaya ve performans\u0131 \u00f6n planda tutmaya \u00f6zen g\u00f6sterdim. Bu yakla\u015f\u0131m, basit ama g\u00fc\u00e7l\u00fc bir yap\u0131 olu\u015fturmam\u0131 sa\u011flad\u0131.<\/p>\n<h4>Frontend Se\u00e7imi: Next.js (Statik Export)<\/h4>\n<p>Portfolyo sitemin kullan\u0131c\u0131 aray\u00fcz\u00fc i\u00e7in Next.js'i tercih ettim. Next.js, React tabanl\u0131 bir framework olup, hem sunucu taraf\u0131nda render (SSR) hem de statik site \u00fcretimi (SSG) yetenekleri sunar. Benim durumumda, portfolyo i\u00e7eri\u011fi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde statik oldu\u011fu i\u00e7in, Next.js'in statik export \u00f6zelli\u011fini kulland\u0131m. Bu, t\u00fcm HTML, CSS ve JavaScript dosyalar\u0131n\u0131 derleme zaman\u0131nda olu\u015fturarak, sunucuya ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ortadan kald\u0131r\u0131r ve inan\u0131lmaz derecede h\u0131zl\u0131 y\u00fckleme s\u00fcreleri sa\u011flar.<\/p>\n<p><strong>Next.js Statik Export Yap\u0131land\u0131rmas\u0131 (<code>next.config.js<\/code>):<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/** @type {import('next').NextConfig} *\/\nconst nextConfig = {\n  output: 'export',\n  distDir: 'build', \/\/ veya 'out'\n};\n\nmodule.exports = nextConfig;<\/pre>\n<p><\/code><\/p>\n<h4>Backend \u0130htiyac\u0131 ve \u00c7\u00f6z\u00fcm\u00fc<\/h4>\n<p>Minimalist bir portfolyo sitesinde genellikle karma\u015f\u0131k bir backend ihtiyac\u0131 olmaz. Benim durumumda da do\u011frudan bir veritaban\u0131 veya sunucu taraf\u0131 i\u015fleme gereksinimi bulunmuyor. Ancak, statik olarak \u00fcretilen dosyalar\u0131n bir HTTP sunucu taraf\u0131ndan servis edilmesi gerekiyor. Bu noktada, k\u00fc\u00e7\u00fck bir Node.js uygulamas\u0131 veya Nginx gibi hafif bir web sunucusu i\u00e7eren bir Docker imaj\u0131 kullanmak en mant\u0131kl\u0131 \u00e7\u00f6z\u00fcm oluyor. Ben, statik dosyalar\u0131 servis etmek i\u00e7in \u00e7ok basit bir Node.js Express sunucusu tercih ettim.<\/p>\n<p><strong>Basit Node.js Sunucusu (<code>server.js<\/code>):<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ server.js\nconst express = require('express');\nconst path = require('path');\nconst app = express();\nconst port = process.env.PORT || 8080;\n\n\/\/ Statik dosyalar\u0131 servis et\napp.use(express.static(path.join(__dirname, 'build'))); \/\/ Next.js 'build' klas\u00f6r\u00fc\n\n\/\/ T\u00fcm di\u011fer istekleri index.html'e y\u00f6nlendir (SPA i\u00e7in)\napp.get('*', (req, res) => {\n  res.sendFile(path.join(__dirname, 'build', 'index.html'));\n});\n\napp.listen(port, () => {\n  console.log(<code>Portfolio app listening at http:\/\/localhost:${port}<\/code>);\n});<\/pre>\n<p><\/code><\/p>\n<h4>Veritaban\u0131 ve Depolama<\/h4>\n<p>Statik bir portfolyo i\u00e7in veritaban\u0131na ihtiya\u00e7 duyulmaz. T\u00fcm i\u00e7erik, derleme zaman\u0131nda HTML dosyalar\u0131na g\u00f6m\u00fcl\u00fcd\u00fcr. Resimler, PDF'ler gibi statik varl\u0131klar i\u00e7in ise Google Cloud Storage gibi bir nesne depolama hizmeti kullan\u0131labilir. Bu, CDN ile entegre edilerek global \u00f6l\u00e7ekte h\u0131zl\u0131 eri\u015fim sa\u011flar. Ancak benim yakla\u015f\u0131m\u0131mda, t\u00fcm statik varl\u0131klar Docker imaj\u0131n\u0131n i\u00e7inde paketlenerek Cloud Run taraf\u0131ndan servis ediliyor.<\/p>\n<h4>Docker ve Konteynerle\u015fme<\/h4>\n<p>Cloud Run'\u0131n temel \u00e7al\u0131\u015fma prensibi konteynerlerdir. Uygulamam\u0131 Docker konteyneri i\u00e7ine almak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 izole etmemi, farkl\u0131 ortamlarda tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamam\u0131 ve da\u011f\u0131t\u0131m s\u00fcrecini basitle\u015ftirmemi sa\u011flad\u0131. Dockerfile, uygulaman\u0131n nas\u0131l derlenece\u011fini ve \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 tan\u0131mlayan bir tarif gibidir.<\/p>\n<h3>Geli\u015ftirme ve Dockerfile Olu\u015fturma S\u00fcreci<\/h3>\n<p>Uygulamam\u0131n geli\u015ftirme s\u00fcreci, Next.js ile statik i\u00e7eri\u011fin olu\u015fturulmas\u0131 ve ard\u0131ndan bu i\u00e7eri\u011fi sunacak hafif bir Node.js sunucusunun haz\u0131rlanmas\u0131 ad\u0131mlar\u0131n\u0131 i\u00e7erdi. En kritik ad\u0131m ise bu yap\u0131y\u0131 Cloud Run'a uygun bir Docker imaj\u0131na d\u00f6n\u00fc\u015ft\u00fcrmekti.<\/p>\n<h4>Temel Uygulama Yap\u0131s\u0131<\/h4>\n<p>Next.js projesi standart bir yap\u0131ya sahipti: <code>pages<\/code> klas\u00f6r\u00fcnde sayfalar, <code>components<\/code> klas\u00f6r\u00fcnde yeniden kullan\u0131labilir bile\u015fenler ve <code>public<\/code> klas\u00f6r\u00fcnde statik varl\u0131klar. Projeyi <code>npm run build<\/code> komutuyla derledi\u011fimde, <code>build<\/code> (veya <code>out<\/code>) klas\u00f6r\u00fcnde t\u00fcm statik HTML, CSS ve JS dosyalar\u0131 olu\u015ftu. Ard\u0131ndan, bu statik dosyalar\u0131 servis edecek yukar\u0131da bahsedilen <code>server.js<\/code> dosyas\u0131n\u0131 projemin k\u00f6k dizinine ekledim.<\/p>\n<h4>Dockerfile Ad\u0131m Ad\u0131m<\/h4>\n<p>Dockerfile, uygulaman\u0131n konteynerle\u015ftirilmesi i\u00e7in gerekli talimatlar\u0131 i\u00e7erir. A\u015fa\u011f\u0131daki Dockerfile, Next.js uygulamas\u0131n\u0131 derleyip statik olarak d\u0131\u015fa aktar\u0131r ve ard\u0131ndan bu statik dosyalar\u0131 basit bir Node.js Express sunucusu ile servis eder.<\/p>\n<pre><code class=\"language-dockerfile\"># 1. A\u015fama: Next.js uygulamas\u0131n\u0131 derle\nFROM node:18-alpine AS builder\n\nWORKDIR \/app\n\nCOPY package.json package-lock.json .\/\nRUN npm install\n\nCOPY . .\n\n# Next.js uygulamas\u0131n\u0131 statik olarak derle\n# 'output: export' ve 'distDir: build' ayarlar\u0131 ile\nRUN npm run build\n\n# 2. A\u015fama: Hafif bir \u00e7al\u0131\u015fma zaman\u0131 imaj\u0131 olu\u015ftur\nFROM node:18-alpine\n\nWORKDIR \/app\n\n# Sadece statik dosyalar\u0131 ve server.js'i kopyala\nCOPY --from=builder \/app\/build .\/build\nCOPY server.js .\nCOPY package.json package-lock.json .\/\n\n# Sadece \u00fcretim ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 y\u00fckle\nRUN npm install --production\n\n# Cloud Run'\u0131n varsay\u0131lan portu olan 8080'i dinle\nENV PORT 8080\nEXPOSE 8080\n\nCMD [\"node\", \"server.js\"]<\/pre>\n<p><\/code><\/p>\n<p>Bu Dockerfile, iki a\u015famal\u0131 bir derleme (multi-stage build) kullan\u0131r. \u0130lk a\u015famada, Next.js uygulamas\u0131 derlenir ve statik dosyalar olu\u015fturulur. \u0130kinci a\u015famada ise, sadece bu statik dosyalar ve bunlar\u0131 servis edecek Node.js sunucusu kopyalanarak \u00e7ok daha k\u00fc\u00e7\u00fck ve g\u00fcvenli bir nihai imaj elde edilir.<\/p>\n<h4>Yerel Testler<\/h4>\n<p>Dockerfile olu\u015fturulduktan sonra, imaj\u0131 yerel olarak derleyip test etmek \u00f6nemlidir:<\/p>\n<pre><code class=\"language-bash\">docker build -t my-portfolio-image .\ndocker run -p 8080:8080 my-portfolio-image<\/pre>\n<p><\/code><\/p>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine giderek uygulaman\u0131z\u0131n bekledi\u011finiz gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olabilirsiniz.<\/p>\n<h3>Google Cloud Run \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim<\/h3>\n<p>Uygulama haz\u0131r ve Docker imaj\u0131 olu\u015fturulduktan sonra, s\u0131ra onu Google Cloud Run'a da\u011f\u0131tmaya ve y\u00f6netmeye gelir. Bu s\u00fcre\u00e7, birka\u00e7 basit ad\u0131m\u0131 i\u00e7erir ve otomasyon i\u00e7in Cloud Build ile entegre edilebilir.<\/p>\n<h4>Google Cloud Projesi Olu\u015fturma ve Ayarlama<\/h4>\n<p>\u00d6ncelikle, Google Cloud konsolunda yeni bir proje olu\u015fturman\u0131z veya mevcut bir projeyi kullanman\u0131z gerekir. Ard\u0131ndan, Cloud Run, Cloud Build ve Container Registry (veya Artifact Registry) API'lerinin etkinle\u015ftirildi\u011finden emin olun.<\/p>\n<h4>Cloud Build ile Otomatik Da\u011f\u0131t\u0131m<\/h4>\n<p>Her kod de\u011fi\u015fikli\u011finde manuel olarak da\u011f\u0131t\u0131m yapmak yerine, Cloud Build kullanarak CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) hatt\u0131 olu\u015fturabiliriz. Bu, her Git push i\u015fleminde uygulaman\u0131n otomatik olarak derlenmesini, Docker imaj\u0131n\u0131n olu\u015fturulmas\u0131n\u0131 ve Cloud Run'a da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong><code>cloudbuild.yaml<\/code> \u00d6rne\u011fi:<\/strong><\/p>\n<pre><code class=\"language-yaml\">steps:\n  # Docker imaj\u0131n\u0131 derle\n  - name: 'gcr.io\/cloud-builders\/docker'\n    args: ['build', '-t', 'gcr.io\/$PROJECT_ID\/my-portfolio-image:$COMMIT_SHA', '.']\n  # Docker imaj\u0131n\u0131 Container Registry'ye g\u00f6nder\n  - name: 'gcr.io\/cloud-builders\/docker'\n    args: ['push', 'gcr.io\/$PROJECT_ID\/my-portfolio-image:$COMMIT_SHA']\n  # Cloud Run'a da\u011f\u0131t\n  - name: 'gcr.io\/cloud-builders\/gcloud'\n    args:\n      - 'run'\n      - 'deploy'\n      - 'my-portfolio-app'\n      - '--image'\n      - 'gcr.io\/$PROJECT_ID\/my-portfolio-image:$COMMIT_SHA'\n      - '--platform'\n      - 'managed'\n      - '--region'\n      - 'us-central1'\n      - '--allow-unauthenticated'\n      - '--set-env-vars=NODE_ENV=production' # Ortam de\u011fi\u015fkeni \u00f6rne\u011fi\n    id: Deploy\nimages:\n  - 'gcr.io\/$PROJECT_ID\/my-portfolio-image:$COMMIT_SHA'<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma ile, kodunuzu GitHub, GitLab veya Bitbucket gibi bir depoya her g\u00f6nderdi\u011finizde, Cloud Build tetiklenir ve uygulaman\u0131z otomatik olarak g\u00fcncellenir.<\/p>\n<h4>\u00d6zel Alan Ad\u0131 ve SSL Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Cloud Run, da\u011f\u0131t\u0131lan her hizmet i\u00e7in otomatik olarak bir URL sa\u011flar. Ancak profesyonel bir portfolyo i\u00e7in \u00f6zel bir alan ad\u0131 kullanmak \u00f6nemlidir. Cloud Run, \u00f6zel alan ad\u0131 e\u015fle\u015ftirmeyi ve \u00fccretsiz SSL sertifikalar\u0131n\u0131 (Google-managed certificates) kolayca yap\u0131land\u0131rman\u0131za olanak tan\u0131r. Bu sayede siteniz HTTPS \u00fczerinden g\u00fcvenli bir \u015fekilde yay\u0131nlan\u0131r.<\/p>\n<ol>\n<li>Google Cloud konsolunda Cloud Run hizmetinize gidin.<\/li>\n<li>\"Custom domains\" (\u00d6zel alan adlar\u0131) sekmesine t\u0131klay\u0131n.<\/li>\n<li>\"Add custom domain\" (\u00d6zel alan ad\u0131 ekle) se\u00e7ene\u011fini se\u00e7in ve alan ad\u0131n\u0131z\u0131 girin.<\/li>\n<li>Verilen DNS kay\u0131tlar\u0131n\u0131 (CNAME ve\/veya A kay\u0131tlar\u0131) alan ad\u0131 sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinde yap\u0131land\u0131r\u0131n.<\/li>\n<\/ol>\n<p>Cloud Run, DNS do\u011frulamas\u0131 tamamland\u0131ktan sonra otomatik olarak bir SSL sertifikas\u0131 temin eder ve y\u00f6netir.<\/p>\n<h4>Ortam De\u011fi\u015fkenleri ve G\u00fcvenlik<\/h4>\n<p>Hassas bilgiler (API anahtarlar\u0131, veritaban\u0131 kimlik bilgileri vb.) do\u011frudan Docker imaj\u0131na g\u00f6m\u00fclmemelidir. Cloud Run, ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla bu t\u00fcr bilgileri g\u00fcvenli bir \u015fekilde uygulaman\u0131za sa\u011flaman\u0131za olanak tan\u0131r. Konsol \u00fczerinden veya <code>gcloud run deploy<\/code> komutuyla <code>--set-env-vars<\/code> bayra\u011f\u0131n\u0131 kullanarak ortam de\u011fi\u015fkenlerini tan\u0131mlayabilirsiniz. G\u00fcvenlik i\u00e7in, Cloud IAM ile hizmetinize eri\u015fimi k\u0131s\u0131tlamak ve Cloud Run'\u0131n sa\u011flad\u0131\u011f\u0131 di\u011fer g\u00fcvenlik \u00f6zelliklerini kullanmak \u00f6nemlidir.<\/p>\n<h3>Performans, G\u00fcvenlik ve \u0130leri Optimizasyonlar<\/h3>\n<p>Portfolyo sitemin sadece \u00e7al\u0131\u015fmas\u0131 de\u011fil, ayn\u0131 zamanda en iyi performans\u0131 sunmas\u0131 ve g\u00fcvenli olmas\u0131 da kritikti. Bu nedenle, baz\u0131 ek optimizasyonlar ve g\u00fcvenlik \u00f6nlemleri uygulad\u0131m.<\/p>\n<h4>CDN Kullan\u0131m\u0131 (Cloud CDN)<\/h4>\n<p>Next.js ile statik olarak d\u0131\u015fa aktar\u0131lan dosyalar, zaten h\u0131zl\u0131 bir \u015fekilde sunulur. Ancak global bir kitleye hitap ediyorsan\u0131z, bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (CDN) kullanmak, i\u00e7eri\u011finizi kullan\u0131c\u0131lara co\u011frafi olarak daha yak\u0131n sunarak y\u00fckleme s\u00fcrelerini daha da h\u0131zland\u0131r\u0131r. Google Cloud Run'\u0131n \u00f6n\u00fcnde do\u011frudan bir Cloud CDN katman\u0131 bulunmamakla birlikte, Cloud Load Balancing ve Cloud CDN entegrasyonu ile bu m\u00fcmk\u00fcnd\u00fcr. Alternatif olarak, statik varl\u0131klar\u0131 Cloud Storage'da bar\u0131nd\u0131r\u0131p Cloud CDN ile servis edebilir ve Cloud Run'\u0131 sadece API veya dinamik i\u00e7erik i\u00e7in kullanabilirsiniz.<\/p>\n<h4>Resim Optimizasyonu<\/h4>\n<p>Web sitelerindeki performans sorunlar\u0131n\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131 genellikle optimize edilmemi\u015f resimlerden kaynaklan\u0131r. Portfolyomdaki t\u00fcm resimleri WebP veya AVIF gibi modern formatlara d\u00f6n\u00fc\u015ft\u00fcrd\u00fcm ve boyutlar\u0131n\u0131 s\u0131k\u0131\u015ft\u0131rd\u0131m. Ayr\u0131ca, taray\u0131c\u0131n\u0131n sadece g\u00f6r\u00fcn\u00fcr alandaki resimleri y\u00fcklemesini sa\u011flayan \"lazy loading\" (tembel y\u00fckleme) tekniklerini uygulad\u0131m.<\/p>\n<h4>\u00d6nbellekleme Stratejileri<\/h4>\n<p>Taray\u0131c\u0131 \u00f6nbellekleme, tekrarlayan ziyaretlerde sayfa y\u00fckleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. HTTP \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131 (Cache-Control, ETag) do\u011fru \u015fekilde ayarlamak, taray\u0131c\u0131lar\u0131n statik varl\u0131klar\u0131 yerel olarak saklamas\u0131n\u0131 sa\u011flar. Cloud Run'da servis etti\u011fim statik dosyalar i\u00e7in Node.js Express sunucumda bu ba\u015fl\u0131klar\u0131 ayarlad\u0131m.<\/p>\n<p><strong>Express ile \u00d6nbellekleme Ba\u015fl\u0131klar\u0131:<\/strong><\/p>\n<pre><code class=\"language-javascript\">app.use(express.static(path.join(__dirname, 'build'), {\n  maxAge: '1y', \/\/ 1 y\u0131l \u00f6nbellekte tut\n  immutable: true \/\/ Dosyalar\u0131n de\u011fi\u015fmedi\u011fini belirt\n}));<\/pre>\n<p><\/code><\/p>\n<h4>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h4>\n<ul>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k G\u00fcncellemeleri:<\/strong> Kullan\u0131lan k\u00fct\u00fcphanelerin ve framework'lerin d\u00fczenli olarak g\u00fcncel tutulmas\u0131, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapat\u0131lmas\u0131 i\u00e7in kritiktir.<\/li>\n<li><strong>Minimum Ayr\u0131cal\u0131k Prensibi:<\/strong> Cloud IAM'de, hizmet hesaplar\u0131na ve kullan\u0131c\u0131lara yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 minimum izinleri verin.<\/li>\n<li><strong>\u0130stek Limitleme:<\/strong> A\u015f\u0131r\u0131 istekleri \u00f6nlemek ve olas\u0131 DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flamak i\u00e7in Cloud Load Balancing veya API Gateway gibi hizmetlerle istek limitleme uygulayabilirsiniz.<\/li>\n<li><strong>G\u00fcvenlik Ba\u015fl\u0131klar\u0131:<\/strong> HTTP g\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131 (X-Content-Type-Options, X-Frame-Options, Content-Security-Policy vb.) kullanarak taray\u0131c\u0131 tabanl\u0131 sald\u0131r\u0131lar\u0131 azalt\u0131n.<\/li>\n<\/ul>\n<h3>Sonu\u00e7 ve Gelecek Planlar\u0131<\/h3>\n<p>Google Cloud Run \u00fczerinde minimalist ve h\u0131zl\u0131 bir geli\u015ftirici portfolyosu olu\u015fturma yolculu\u011fum, beklentilerimin \u00fczerinde bir ba\u015far\u0131yla sonu\u00e7land\u0131. Bu yakla\u015f\u0131m, sadece teknik yeteneklerimi sergilemekle kalmad\u0131, ayn\u0131 zamanda kullan\u0131c\u0131 deneyimini ve maliyet etkinli\u011fini de en \u00fcst d\u00fczeye \u00e7\u0131kard\u0131.<\/p>\n<p>Elde etti\u011fim en b\u00fcy\u00fck avantajlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Y\u00fcksek Performans:<\/strong> Statik site \u00fcretimi ve Cloud Run'\u0131n h\u0131zl\u0131 \u00f6l\u00e7eklenebilirli\u011fi sayesinde neredeyse an\u0131nda y\u00fcklenen bir site.<\/li>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> \"Kulland\u0131\u011f\u0131n kadar \u00f6de\" modeli sayesinde, ki\u015fisel bir proje i\u00e7in minimum bar\u0131nd\u0131rma maliyeti.<\/li>\n<li><strong>Basit Bak\u0131m:<\/strong> Sunucusuz mimari ve Docker konteynerle\u015fme sayesinde altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fcn ortadan kalkmas\u0131.<\/li>\n<li><strong>Geli\u015ftirici Odakl\u0131l\u0131k:<\/strong> Kod yazmaya ve i\u00e7erik olu\u015fturmaya odaklanma imkan\u0131.<\/li>\n<\/ul>\n<p>Gelecek planlar\u0131m aras\u0131nda, portfolyoma bir blog b\u00f6l\u00fcm\u00fc eklemek ve bu blogu Cloud Firestore gibi sunucusuz bir veritaban\u0131yla beslemek yer al\u0131yor. Ayr\u0131ca, ileti\u015fim formu i\u00e7in Google Cloud Functions kullanarak tamamen sunucusuz bir \u00e7\u00f6z\u00fcm entegre etmeyi d\u00fc\u015f\u00fcn\u00fcyorum. Bu sayede, portfolyomun dinamik \u00f6zelliklerini art\u0131r\u0131rken, minimalist ve h\u0131zl\u0131 yap\u0131s\u0131ndan \u00f6d\u00fcn vermeyece\u011fim.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<p>Bu b\u00f6l\u00fcm, Google Cloud Run \u00fczerinde geli\u015ftirici portfolyosu olu\u015fturmak isteyenlerin s\u0131k\u00e7a sordu\u011fu sorular\u0131 yan\u0131tlamaktad\u0131r.<\/p>\n<h4>1. Google Cloud Run portfolyo sitesi i\u00e7in maliyetli mi?<\/h4>\n<p>Hay\u0131r, aksine olduk\u00e7a maliyet etkindir. Cloud Run'\u0131n \"kulland\u0131\u011f\u0131n kadar \u00f6de\" modeli sayesinde, sitenizde trafik yokken hi\u00e7bir \u00fccret \u00f6demezsiniz. D\u00fc\u015f\u00fck ve orta trafikli ki\u015fisel portfolyo siteleri i\u00e7in genellikle \u00fccretsiz katman limitleri i\u00e7inde kal\u0131r veya \u00e7ok c\u00fczi miktarlar \u00f6dersiniz.<\/p>\n<h4>2. Neden statik hosting yerine Cloud Run tercih ettiniz?<\/h4>\n<p>Statik hosting (\u00f6rn. Netlify, Vercel) de harika bir se\u00e7enektir. Ancak Cloud Run, gelecekte portfolyoma dinamik \u00f6zellikler (API'ler, veritaban\u0131 entegrasyonlar\u0131) eklemek istedi\u011fimde bana daha fazla esneklik sunuyor. Ayr\u0131ca, Docker konteynerleri sayesinde kendi \u00e7al\u0131\u015fma ortam\u0131m\u0131 tamamen kontrol edebiliyorum.<\/p>\n<h4>3. Portfolyo sitemde bir ileti\u015fim formu olsayd\u0131 nas\u0131l entegre ederdim?<\/h4>\n<p>\u0130leti\u015fim formu i\u00e7in Google Cloud Functions veya Cloud Run \u00fczerinde \u00e7al\u0131\u015fan k\u00fc\u00e7\u00fck bir API hizmeti kullanabilirsiniz. Bu hizmet, form verilerini al\u0131p bir e-posta g\u00f6nderebilir (SendGrid, Mailgun gibi servislerle) veya Cloud Firestore gibi bir veritaban\u0131na kaydedebilir.<\/p>\n<h4>4. SEO performans\u0131 Cloud Run'dan nas\u0131l etkilenir?<\/h4>\n<p>Cloud Run, uygulaman\u0131z\u0131n h\u0131zl\u0131 bir \u015fekilde yan\u0131t vermesini sa\u011flad\u0131\u011f\u0131 i\u00e7in SEO \u00fczerinde olumlu bir etkiye sahiptir. H\u0131zl\u0131 y\u00fcklenen siteler, arama motorlar\u0131 taraf\u0131ndan daha \u00e7ok tercih edilir. Ayr\u0131ca, \u00f6zel alan ad\u0131 ve SSL sertifikas\u0131 kullan\u0131m\u0131 da SEO i\u00e7in \u00f6nemlidir ve Cloud Run bunlar\u0131 kolayca destekler.<\/p>\n<h4>5. Cloud Run'da s\u0131f\u0131ra \u00f6l\u00e7eklenme (scale-to-zero) ne anlama geliyor?<\/h4>\n<p>S\u0131f\u0131ra \u00f6l\u00e7eklenme, uygulaman\u0131zda hi\u00e7bir trafik olmad\u0131\u011f\u0131nda Cloud Run'\u0131n t\u00fcm konteyner \u00f6rneklerini kapatmas\u0131 anlam\u0131na gelir. Bu durumda uygulaman\u0131z kaynak t\u00fcketmez ve size maliyet yans\u0131tmaz. Yeni bir istek geldi\u011finde, Cloud Run uygulaman\u0131z\u0131 h\u0131zl\u0131ca ba\u015flat\u0131r (cold start) ve iste\u011fi i\u015fler. Bu, ki\u015fisel projeler i\u00e7in b\u00fcy\u00fck bir maliyet avantaj\u0131 sa\u011flar.<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital ortam\u0131nda, bir geli\u015ftiricinin \u00e7evrimi\u00e7i varl\u0131\u011f\u0131, potansiyel i\u015fverenler, i\u015f arkada\u015flar\u0131 ve topluluk \u00fcyeleri&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1341],"tags":[],"class_list":{"0":"post-37621","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cloud","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital ortam\u0131nda, bir geli\u015ftiricinin \u00e7evrimi\u00e7i varl\u0131\u011f\u0131, potansiyel i\u015fverenler, i\u015f arkada\u015flar\u0131 ve topluluk \u00fcyeleri...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-10T16:00:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom\",\"datePublished\":\"2026-01-10T16:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\"},\"wordCount\":2744,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Cloud\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\",\"name\":\"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-10T16:00:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/","og_locale":"tr_TR","og_type":"article","og_title":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital ortam\u0131nda, bir geli\u015ftiricinin \u00e7evrimi\u00e7i varl\u0131\u011f\u0131, potansiyel i\u015fverenler, i\u015f arkada\u015flar\u0131 ve topluluk \u00fcyeleri...","og_url":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-10T16:00:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom","datePublished":"2026-01-10T16:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/"},"wordCount":2744,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Cloud"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/","url":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/","name":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-10T16:00:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/minimalist-ve-hizli-google-cloud-run-uzerinde-gelistirici-portfolyom\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Minimalist ve H\u0131zl\u0131: Google Cloud Run \u00dczerinde Geli\u015ftirici Portfolyom"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37621"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37621\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}