{"id":32837,"date":"2025-10-26T13:31:39","date_gmt":"2025-10-26T10:31:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/"},"modified":"2025-10-26T13:31:39","modified_gmt":"2025-10-26T10:31:39","slug":"self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/","title":{"rendered":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD"},"content":{"rendered":"<p><body><\/p>\n<style>\n  body {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    color: #333;\n    max-width: 900px;\n    margin: 0 auto;\n    padding: 20px;\n  }\n  h2, h3 {\n    color: #2c3e50;\n    margin-top: 30px;\n    margin-bottom: 15px;\n  }\n  h2 {\n    border-bottom: 2px solid #3498db;\n    padding-bottom: 10px;\n  }\n  h3 {\n    color: #34495e;\n  }\n  pre {\n    background-color: #ecf0f1;\n    border: 1px solid #bdc3c7;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto;\n    font-size: 0.9em;\n    margin-bottom: 20px;\n  }\n  code {\n    font-family: 'Courier New', monospace;\n    color: #c0392b;\n  }\n  pre code {\n    color: #2c3e50;\n  }\n  ul, ol {\n    margin-bottom: 20px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  .expert-tip {\n    background-color: #e8f6f3;\n    border-left: 5px solid #1abc9c;\n    padding: 15px;\n    margin: 20px 0;\n    border-radius: 5px;\n    font-style: italic;\n    color: #2c3e50;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n  }\n  table, th, td {\n    border: 1px solid #ddd;\n  }\n  th, td {\n    padding: 10px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n  }<\/p>\n<p>  \/* Mobil uyumluluk i\u00e7in medya sorgusu \u00f6rne\u011fi *\/\n  @media (max-width: 768px) {\n    body {\n      padding: 10px;\n    }\n    h2 {\n      font-size: 1.5em;\n    }\n    h3 {\n      font-size: 1.2em;\n    }\n    pre {\n      font-size: 0.8em;\n    }\n  }\n<\/style>\n<p>Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel&#8217;\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.<\/p>\n<p>G\u00fcn\u00fcm\u00fczde bulut tabanl\u0131 hizmetler her ne kadar kolayl\u0131k sa\u011flasa da, ki\u015fisel verilerin gizlili\u011fi, maliyet kontrol\u00fc ve sistem \u00fczerindeki tam hakimiyet gibi konularda baz\u0131 endi\u015feleri beraberinde getirebilir. \u0130\u015fte tam da bu noktada, kendi sunucunuzu bar\u0131nd\u0131rma (self-hosting) fikri devreye giriyor. Kendi sunucunuzu kurmak, verilerinizin nerede sakland\u0131\u011f\u0131n\u0131 bilmenizi, g\u00fcvenlik politikalar\u0131n\u0131z\u0131 tamamen kendinizin belirlemesini ve uzun vadede maliyetleri \u00f6nemli \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcrmenizi sa\u011flar. \u00dcstelik, geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri \u00fczerinde tam kontrol sahibi olman\u0131z, size benzersiz bir esneklik sunar.<\/p>\n<p>Peki, bu i\u015f i\u00e7in neden Raspberry Pi kullanmal\u0131s\u0131n\u0131z? Raspberry Pi, avu\u00e7 i\u00e7i b\u00fcy\u00fckl\u00fc\u011f\u00fcnde, d\u00fc\u015f\u00fck maliyetli ve enerji verimli bir mini bilgisayard\u0131r. Bu \u00f6zellikleri sayesinde, 7\/24 \u00e7al\u0131\u015facak bir ev sunucusu i\u00e7in ideal bir platform haline gelir. D\u00fc\u015f\u00fck g\u00fc\u00e7 t\u00fcketimi, elektrik faturalar\u0131n\u0131z\u0131 minimize ederken, k\u00fc\u00e7\u00fck boyutu sayesinde herhangi bir yer kaplama endi\u015fesi ya\u015famazs\u0131n\u0131z. Ayr\u0131ca, Linux tabanl\u0131 bir i\u015fletim sistemiyle \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, geni\u015f bir yaz\u0131l\u0131m deste\u011fi ve g\u00fc\u00e7l\u00fc bir topluluk arkas\u0131nda bulunur. Web siteleri, bulut depolama, oyun sunucular\u0131, otomasyon projeleri gibi pek \u00e7ok farkl\u0131 uygulamay\u0131 Raspberry Pi \u00fczerinde kolayca bar\u0131nd\u0131rabilirsiniz. Bu makalede, Raspberry Pi&#8217;nin bu potansiyelini modern geli\u015ftirme pratikleriyle birle\u015ftirerek, projelerinizi otomatik olarak nas\u0131l da\u011f\u0131tabilece\u011finizi ve d\u0131\u015far\u0131dan g\u00fcvenli bir \u015fekilde nas\u0131l eri\u015filebilece\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz. Bu sayede, hem uygun maliyetli hem de son derece fonksiyonel bir self-hosting \u00e7\u00f6z\u00fcm\u00fc elde edeceksiniz.<\/p>\n<p>Bu macerada bize e\u015flik edecek iki temel teknoloji ise GitHub Actions ve Cloudflare Tunnel olacak. GitHub Actions, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizi otomatikle\u015ftirmenizi sa\u011flayarak, kodunuzu her de\u011fi\u015ftirdi\u011finizde otomatik test ve da\u011f\u0131t\u0131m yapman\u0131za olanak tan\u0131r. Bu, geli\u015ftirme h\u0131z\u0131n\u0131z\u0131 art\u0131r\u0131rken hatalar\u0131 da minimize eder. Di\u011fer yandan, Cloudflare Tunnel, Raspberry Pi&#8217;nizin internete g\u00fcvenli bir \u015fekilde a\u00e7\u0131lmas\u0131n\u0131 sa\u011flayarak, karma\u015f\u0131k a\u011f yap\u0131land\u0131rmalar\u0131 ve g\u00fcvenlik duvar\u0131 ayarlar\u0131yla u\u011fra\u015fmadan projelerinize d\u0131\u015far\u0131dan eri\u015fmenizi m\u00fcmk\u00fcn k\u0131lar. Bu \u00fc\u00e7l\u00fc kombinasyon, size hem maliyet etkin hem de profesyonel bir self-hosting deneyimi sunarken, projelerinizi daha g\u00fcvenli ve verimli bir \u015fekilde y\u00f6netme imkan\u0131 sa\u011flar. Dolay\u0131s\u0131yla, bu makale, s\u0131f\u0131rdan ba\u015flayarak kendi g\u00fc\u00e7l\u00fc ve g\u00fcvenli ev sunucunuzu kurman\u0131z i\u00e7in size kapsaml\u0131 bir yol haritas\u0131 sunacakt\u0131r. Projelerinizi kendi kontrol\u00fcn\u00fczde, g\u00fcvenle ve kolayca hayata ge\u00e7irmek i\u00e7in do\u011fru yerdesiniz.<\/p>\n<h2>Temel Kavramlar: CI\/CD, GitHub Actions ve Cloudflare Tunnel Nedir?<\/h2>\n<p>Self-hosting d\u00fcnyas\u0131na ad\u0131m atarken, \u00f6zellikle otomasyon ve g\u00fcvenlik konusunda baz\u0131 temel kavramlar\u0131 iyi anlamak, ba\u015far\u0131l\u0131 bir kurulum i\u00e7in kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, projenizin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc kolayla\u015ft\u0131racak CI\/CD, otomasyonu sa\u011flayacak GitHub Actions ve g\u00fcvenli d\u0131\u015f eri\u015fimi m\u00fcmk\u00fcn k\u0131lacak Cloudflare Tunnel&#8217;\u0131 detayl\u0131ca inceleyece\u011fiz. Bu teknolojiler birbirini tamamlayarak, Raspberry Pi \u00fczerinde kuraca\u011f\u0131m\u0131z sistemin bel kemi\u011fini olu\u015fturacak.<\/p>\n<h3>S\u00fcrekli Entegrasyon ve Da\u011f\u0131t\u0131m (CI\/CD) Neden Hayati?<\/h3>\n<p>CI\/CD, yani Continuous Integration (S\u00fcrekli Entegrasyon) ve Continuous Delivery\/Deployment (S\u00fcrekli Teslimat\/Da\u011f\u0131t\u0131m), modern yaz\u0131l\u0131m geli\u015ftirme metodolojilerinin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r. S\u00fcrekli Entegrasyon, geli\u015ftiricilerin kod de\u011fi\u015fikliklerini ana depoya s\u0131k s\u0131k birle\u015ftirmelerini ve otomatik olarak test etmelerini ifade eder. Bu, olas\u0131 \u00e7ak\u0131\u015fmalar\u0131 ve hatalar\u0131 erken a\u015famada tespit etmeyi sa\u011flayarak, entegrasyon s\u00fcrecinin ac\u0131s\u0131z ge\u00e7mesini sa\u011flar. \u00d6te yandan, S\u00fcrekli Teslimat, kodun ba\u015far\u0131l\u0131 bir \u015fekilde test edildikten sonra otomatik olarak \u00fcretim ortam\u0131na (veya \u00fcretime haz\u0131r bir ortama) da\u011f\u0131t\u0131ma haz\u0131r hale getirilmesi s\u00fcrecidir. S\u00fcrekli Da\u011f\u0131t\u0131m ise, bu ad\u0131m\u0131 daha da ileriye ta\u015f\u0131yarak, kodun otomatik olarak \u00fcretim ortam\u0131na da\u011f\u0131t\u0131lmas\u0131n\u0131 i\u00e7erir. Bu yakla\u015f\u0131m, geli\u015ftirme ekiplerinin daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha s\u0131k yaz\u0131l\u0131m yay\u0131nlamas\u0131na olanak tan\u0131r.<\/p>\n<p>Peki, bu kavramlar Raspberry Pi&#8217;de self-hosting yaparken neden \u00f6nemlidir? Basit\u00e7e ifade etmek gerekirse, CI\/CD, manuel da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinin getirdi\u011fi insan hatas\u0131 riskini ortadan kald\u0131r\u0131r. Kodunuzu her de\u011fi\u015ftirdi\u011finizde, sistem otomatik olarak testleri \u00e7al\u0131\u015ft\u0131racak, projeyi olu\u015fturacak ve Raspberry Pi&#8217;nize da\u011f\u0131tacakt\u0131r. Bu, zaman kazand\u0131rman\u0131n yan\u0131 s\u0131ra, tutarl\u0131 ve g\u00fcvenilir da\u011f\u0131t\u0131mlar yapman\u0131z\u0131 sa\u011flar. Diyelim ki, bir web uygulaman\u0131z var ve yeni bir \u00f6zellik eklediniz. CI\/CD boru hatt\u0131 sayesinde, kodunuzu GitHub&#8217;a g\u00f6nderdi\u011finiz anda, sistem otomatik olarak uygulaman\u0131z\u0131 g\u00fcncelleyerek canl\u0131ya alacak, b\u00f6ylece siz manuel olarak SSH ba\u011flant\u0131s\u0131 kurup dosyalar\u0131 kopyalamak zorunda kalmayacaks\u0131n\u0131z. Bu otomasyon, \u00f6zellikle tek ki\u015filik projelerde veya k\u00fc\u00e7\u00fck ekiplerde verimlili\u011fi inan\u0131lmaz derecede art\u0131r\u0131r.<\/p>\n<h3>GitHub Actions: Otomatik \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>GitHub Actions, do\u011frudan GitHub deponuzdan yaz\u0131l\u0131m geli\u015ftirme i\u015f ak\u0131\u015flar\u0131n\u0131 otomatikle\u015ftirmek i\u00e7in tasarlanm\u0131\u015f, olay tabanl\u0131 bir platformdur. Bir depo \u00fczerinde ger\u00e7ekle\u015fen herhangi bir olaya (\u00f6rne\u011fin, bir <code>push<\/code>, bir <code>pull request<\/code> a\u00e7\u0131lmas\u0131 veya bir zamanlay\u0131c\u0131) yan\u0131t olarak \u00f6zel i\u015f ak\u0131\u015flar\u0131 olu\u015fturabilirsiniz. Bu i\u015f ak\u0131\u015flar\u0131, genellikle YAML format\u0131nda tan\u0131mlanan, bir veya daha fazla ad\u0131mdan (step) olu\u015fan i\u015fler (job) i\u00e7erir. Her ad\u0131m, belirli bir g\u00f6revi yerine getiren bir komut veya bir eylem (action) \u00e7al\u0131\u015ft\u0131rabilir.<\/p>\n<p>Raspberry Pi ile self-hosting senaryosunda GitHub Actions&#8217;\u0131n rol\u00fc \u00e7ok b\u00fcy\u00fckt\u00fcr. Kodunuzu GitHub&#8217;a her g\u00f6nderdi\u011finizde, GitHub Actions tetiklenir ve tan\u0131mlad\u0131\u011f\u0131n\u0131z i\u015f ak\u0131\u015f\u0131n\u0131 ba\u015flat\u0131r. Bu i\u015f ak\u0131\u015f\u0131, projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurabilir, testleri \u00e7al\u0131\u015ft\u0131rabilir, statik dosyalar\u0131 derleyebilir veya Docker imajlar\u0131 olu\u015fturabilir. En \u00f6nemlisi, bu i\u015f ak\u0131\u015f\u0131, derlenmi\u015f veya haz\u0131rlanm\u0131\u015f dosyalar\u0131 Raspberry Pi&#8217;nize g\u00fcvenli bir \u015fekilde da\u011f\u0131tabilir. \u00d6rne\u011fin, bir web sitesi projeniz varsa, GitHub Actions, yeni kodunuzu derleyip, SSH \u00fczerinden Raspberry Pi&#8217;nize ba\u011fland\u0131ktan sonra web sunucunuzun dizinine kopyalayabilir. B\u00f6ylece, web siteniz otomatik olarak g\u00fcncellenmi\u015f olur. Bu s\u00fcre\u00e7, &#8220;ko\u015fucu&#8221; (runner) ad\u0131 verilen bir ortamda ger\u00e7ekle\u015fir. GitHub taraf\u0131ndan sa\u011flanan sanal makinelerde (Linux, Windows, macOS) \u00e7al\u0131\u015fabilece\u011fi gibi, kendi sunucunuzu (Raspberry Pi gibi) &#8220;self-hosted runner&#8221; olarak da kullanabilirsiniz, ancak bu senaryoda Raspberry Pi&#8217;yi do\u011frudan hedef olarak kullanmak daha yayg\u0131nd\u0131r.<\/p>\n<h3>Cloudflare Tunnel: G\u00fcvenli D\u0131\u015f Eri\u015fim Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p>Raspberry Pi&#8217;nizi ev a\u011f\u0131 i\u00e7inde bir sunucu olarak kullanmak olduk\u00e7a basittir, ancak projelerinizi d\u0131\u015f d\u00fcnyaya, yani internete a\u00e7mak genellikle karma\u015f\u0131k a\u011f yap\u0131land\u0131rmalar\u0131 ve g\u00fcvenlik endi\u015feleri yarat\u0131r. \u0130\u015fte burada Cloudflare Tunnel (eski ad\u0131yla Argo Tunnel) devreye girer. Cloudflare Tunnel, Raspberry Pi&#8217;niz ile Cloudflare a\u011f\u0131 aras\u0131nda g\u00fcvenli, \u015fifreli ve kal\u0131c\u0131 bir t\u00fcnel olu\u015fturarak, sunucunuzu d\u0131\u015f d\u00fcnyaya herhangi bir port a\u00e7maya veya karma\u015f\u0131k g\u00fcvenlik duvar\u0131 kurallar\u0131 tan\u0131mlamaya gerek kalmadan yay\u0131nlaman\u0131za olanak tan\u0131r. Bu teknoloji, Zero Trust g\u00fcvenlik modelinin bir par\u00e7as\u0131d\u0131r.<\/p>\n<p>Geleneksel olarak, bir sunucuyu internete a\u00e7mak i\u00e7in modeminize veya router&#8217;\u0131n\u0131za port y\u00f6nlendirme (port forwarding) yapman\u0131z gerekir. Bu i\u015flem, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir ve ev a\u011f\u0131n\u0131z\u0131 d\u0131\u015far\u0131dan gelen sald\u0131r\u0131lara kar\u015f\u0131 savunmas\u0131z b\u0131rakabilir. Cloudflare Tunnel ise bu riskleri ortadan kald\u0131r\u0131r. Raspberry Pi&#8217;nize kuraca\u011f\u0131n\u0131z <code>cloudflared<\/code> istemcisi, Cloudflare a\u011f\u0131na do\u011fru giden bir t\u00fcnel ba\u015flat\u0131r. Bu t\u00fcnel, geleneksel sunucu-istemci ba\u011flant\u0131lar\u0131n\u0131n aksine, sunucudan d\u0131\u015far\u0131 do\u011fru (outbound) bir ba\u011flant\u0131 kurar, bu da g\u00fcvenlik duvar\u0131n\u0131z\u0131n arkas\u0131ndan eri\u015filebilirlik sa\u011flar. T\u00fcm internet trafi\u011fi Cloudflare&#8217;\u0131n k\u00fcresel a\u011f\u0131 \u00fczerinden ge\u00e7er, bu da DDoS korumas\u0131, Web Uygulama G\u00fcvenlik Duvar\u0131 (WAF) ve CDN gibi ek g\u00fcvenlik ve performans avantajlar\u0131ndan yararlanman\u0131z\u0131 sa\u011flar. Sonu\u00e7 olarak, Cloudflare Tunnel, Raspberry Pi \u00fczerindeki projelerinize, ev a\u011f\u0131n\u0131z\u0131n g\u00fcvenli\u011fini tehlikeye atmadan, g\u00fcvenli ve kolay bir \u015fekilde eri\u015fim sa\u011flaman\u0131n en modern ve etkili yollar\u0131ndan biridir.<\/p>\n<h2>Ad\u0131m Ad\u0131m Kurulum: Raspberry Pi \u00dczerinde \u0130lk Haz\u0131rl\u0131klar Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Raspberry Pi&#8217;nizi self-hosting i\u00e7in haz\u0131r hale getirmek, sa\u011flam bir temel olu\u015fturmakla ba\u015flar. Bu b\u00f6l\u00fcm, Pi&#8217;nizi kutusundan \u00e7\u0131kar\u0131p i\u015fletim sistemini kurmaktan, gerekli yaz\u0131l\u0131mlar\u0131 y\u00fcklemeye kadar t\u00fcm ad\u0131mlar\u0131 detayland\u0131racakt\u0131r. Amac\u0131m\u0131z, projelerinizi sorunsuz bir \u015fekilde bar\u0131nd\u0131rabilece\u011finiz g\u00fcvenli ve g\u00fcncel bir ortam yaratmakt\u0131r.<\/p>\n<h3>Raspberry Pi \u0130\u015fletim Sistemi Kurulumu ve G\u00fcvenlik Ayarlar\u0131<\/h3>\n<p>\u00d6ncelikle, Raspberry Pi&#8217;nizin bir i\u015fletim sistemine ihtiyac\u0131 var. Raspberry Pi Imager arac\u0131n\u0131 kullanarak, bir MicroSD karta Raspberry Pi OS (eski ad\u0131yla Raspbian) y\u00fcklemenizi \u00f6neririz. Kurulum s\u0131ras\u0131nda, SSH eri\u015fimini etkinle\u015ftirmeyi ve kullan\u0131c\u0131 ad\u0131n\u0131z\u0131\/\u015fifrenizi yap\u0131land\u0131rmay\u0131 unutmay\u0131n. Ba\u015fs\u0131z (headless) kurulum, yani monit\u00f6r, klavye ve fare ba\u011flamadan do\u011frudan a\u011f \u00fczerinden eri\u015fim, \u00e7ok daha pratik olacakt\u0131r.<\/p>\n<ol>\n<li><strong>MicroSD Kart\u0131 Haz\u0131rlama:<\/strong> Raspberry Pi Imager&#8217;\u0131 bilgisayar\u0131n\u0131za indirin ve kurun.<\/li>\n<li><strong>\u0130\u015fletim Sistemi Se\u00e7imi:<\/strong> Imager i\u00e7erisinde &#8220;Raspberry Pi OS (64-bit)&#8221; se\u00e7ene\u011fini tercih edin. Lite s\u00fcr\u00fcm\u00fc (masa\u00fcst\u00fc ortam\u0131 olmayan), sunucu kullan\u0131m\u0131 i\u00e7in yeterli ve daha hafif olacakt\u0131r.<\/li>\n<li><strong>Geli\u015fmi\u015f Ayarlar:<\/strong> Kurulum ekran\u0131nda \u00e7ark simgesine t\u0131klayarak geli\u015fmi\u015f ayarlar\u0131 a\u00e7\u0131n. Buradan:\n<ul>\n<li>SSH&#8217;yi etkinle\u015ftirin (\u015eifre kimlik do\u011frulamas\u0131 kullan\u0131n).<\/li>\n<li>Varsay\u0131lan kullan\u0131c\u0131 ad\u0131n\u0131 ve g\u00fc\u00e7l\u00fc bir \u015fifre belirleyin. (Varsay\u0131lan &#8216;pi&#8217; kullan\u0131c\u0131s\u0131 yerine kendi isminizi veya g\u00fcvenli bir isim se\u00e7in.)<\/li>\n<li>Kablosuz a\u011f ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n (iste\u011fe ba\u011fl\u0131, Ethernet tercih edilir).<\/li>\n<li>\u00dclke ayarlar\u0131n\u0131 yap\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Yazma \u0130\u015flemi:<\/strong> Haz\u0131rlad\u0131\u011f\u0131n\u0131z MicroSD kart\u0131 se\u00e7in ve yazma i\u015flemini ba\u015flat\u0131n.<\/li>\n<li><strong>\u0130lk \u00c7al\u0131\u015ft\u0131rma:<\/strong> Yazma i\u015flemi tamamland\u0131ktan sonra MicroSD kart\u0131 Raspberry Pi&#8217;nize tak\u0131n ve g\u00fc\u00e7 verin. Pi&#8217;nizin a\u00e7\u0131lmas\u0131n\u0131 bekleyin.<\/li>\n<\/ol>\n<p>A\u00e7\u0131ld\u0131ktan sonra, bir terminalden SSH ile ba\u011flanabilirsiniz. Ba\u011flanmak i\u00e7in Pi&#8217;nizin IP adresini bilmeniz gerekir. IP adresini router&#8217;\u0131n\u0131z\u0131n aray\u00fcz\u00fcnden veya network taray\u0131c\u0131 uygulamalar\u0131yla bulabilirsiniz. Varsay\u0131lan kullan\u0131c\u0131 ad\u0131 &#8216;pi&#8217; (e\u011fer de\u011fi\u015ftirmediyseniz) ve belirledi\u011finiz \u015fifreyi kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">\nssh kullanici_adi@raspberry_pi_ip_adresi\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: SSH anahtar \u00e7ifti kullanarak \u015fifresiz oturum a\u00e7may\u0131 ve SSH kimlik do\u011frulaman\u0131z\u0131 daha g\u00fcvenli hale getirmeyi \u015fiddetle tavsiye ederiz. Bunun i\u00e7in <code>ssh-keygen<\/code> komutuyla bir anahtar olu\u015fturup, a\u00e7\u0131k anahtar\u0131n\u0131z\u0131 Raspberry Pi'ye kopyalayabilirsiniz.\n<\/div>\n<p>Ba\u011fland\u0131ktan sonra, sisteminizi g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-bash\">\nsudo apt update\nsudo apt upgrade -y\n<\/pre>\n<p><\/code><\/p>\n<h3>Gerekli Yaz\u0131l\u0131mlar\u0131n Kurulumu: Git, Docker ve Proje Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h3>\n<p>\u015eimdi projenizi Raspberry Pi'de bar\u0131nd\u0131rmak ve CI\/CD s\u00fcre\u00e7lerini desteklemek i\u00e7in gerekli temel yaz\u0131l\u0131mlar\u0131 y\u00fckleyelim.<\/p>\n<ol>\n<li><strong>Git Kurulumu:<\/strong> Git, kod versiyonlama ve GitHub ile entegrasyon i\u00e7in vazge\u00e7ilmezdir.<\/li>\n<pre><code class=\"language-bash\">\nsudo apt install git -y\n    <\/pre>\n<p><\/code><\/p>\n<li><strong>Docker Kurulumu:<\/strong> Projelerinizi izole edilmi\u015f konteynerlerde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in Docker kullanmak, y\u00f6netimi ve da\u011f\u0131t\u0131m\u0131 kolayla\u015ft\u0131r\u0131r. Raspberry Pi i\u00e7in \u00f6zel bir Docker kurulumu gereklidir.<\/li>\n<pre><code class=\"language-bash\">\ncurl -fsSL https:\/\/get.docker.com -o get-docker.sh\nsudo sh get-docker.sh\nsudo usermod -aG docker kullanici_adi # Kullan\u0131c\u0131n\u0131z\u0131 docker grubuna ekleyin\nsudo reboot # De\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in yeniden ba\u015flat\u0131n\n    <\/pre>\n<p><\/code><\/p>\n<p>Yeniden ba\u015flatt\u0131ktan sonra, Docker'\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">\ndocker run hello-world\n    <\/pre>\n<p><\/code><\/p>\n<li><strong>Node.js veya Python Kurulumu (\u00d6rnek Proje \u0130\u00e7in):<\/strong> Projenizin t\u00fcr\u00fcne ba\u011fl\u0131 olarak Node.js, Python gibi \u00e7al\u0131\u015fma ortamlar\u0131 veya di\u011fer ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemeniz gerekebilir. \u00d6rne\u011fin, bir Node.js uygulamas\u0131 bar\u0131nd\u0131racaksan\u0131z:<\/li>\n<pre><code class=\"language-bash\">\n# Node.js i\u00e7in NVM (Node Version Manager) kullanmak en iyisidir\ncurl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.1\/install.sh | bash\nsource ~\/.bashrc\nnvm install node # En son Node.js s\u00fcr\u00fcm\u00fcn\u00fc kurar\n    <\/pre>\n<p><\/code><\/p>\n<p>Bir Python uygulamas\u0131 i\u00e7in <code>pyenv<\/code> veya do\u011frudan <code>sudo apt install python3 python3-pip -y<\/code> kullanabilirsiniz.<\/p>\n<\/ol>\n<p>Bu ad\u0131mlarla, Raspberry Pi'niz projelerinizi bar\u0131nd\u0131rmaya, Git ile versiyonlamaya ve Docker konteynerlerini \u00e7al\u0131\u015ft\u0131rmaya haz\u0131r hale gelmi\u015f olacak. Ayr\u0131ca, gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyerek \u00f6rnek bir proje i\u00e7in de altyap\u0131y\u0131 haz\u0131rlam\u0131\u015f olduk. \u015eimdi CI\/CD s\u00fcrecine ge\u00e7i\u015f yapmaya ve projelerinizi otomatik olarak da\u011f\u0131tmaya ba\u015flayabiliriz.<\/p>\n<h2>CI\/CD \u0130\u015f Ak\u0131\u015f\u0131 Olu\u015fturma: Projenizi GitHub Actions ile Nas\u0131l Otomatikle\u015ftirebilirsiniz?<\/h2>\n<p>Raspberry Pi'mizin temel kurulumunu tamamlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi projelerimizi otomatik olarak da\u011f\u0131tmak i\u00e7in GitHub Actions'\u0131 devreye sokma zaman\u0131. Bu b\u00f6l\u00fcm, bir GitHub deposu olu\u015fturmaktan, otomatik bir da\u011f\u0131t\u0131m i\u015f ak\u0131\u015f\u0131 tan\u0131mlamaya kadar t\u00fcm s\u00fcreci kapsayacak ve projelerinizin her kod de\u011fi\u015fikli\u011finde nas\u0131l otomatik olarak g\u00fcncellenece\u011fini g\u00f6sterecektir.<\/p>\n<h3>GitHub Deposu ve \u00d6rnek Proje Olu\u015fturma<\/h3>\n<p>\u0130lk ad\u0131m, projeniz i\u00e7in bir GitHub deposu olu\u015fturmak. E\u011fer hen\u00fcz bir deponuz yoksa, GitHub web sitesi \u00fczerinden kolayca yeni bir tane a\u00e7abilirsiniz. \u00d6rnek olarak, basit bir \"Hello World\" web sayfas\u0131 bar\u0131nd\u0131ran bir proje d\u00fc\u015f\u00fcnelim. Bu projenin yap\u0131s\u0131 \u015fu \u015fekilde olabilir:<\/p>\n<pre><code class=\"language-html\">\n<!-- index.html -->\n<!DOCTYPE html><body>\n    <h1>Merhaba Raspberry Pi ve CI\/CD D\u00fcnyas\u0131!<\/h1>\n    <p>Bu sayfa GitHub Actions ile otomatik olarak da\u011f\u0131t\u0131ld\u0131.<\/p>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu dosyay\u0131 projenizin k\u00f6k dizinine kaydedin ve GitHub deponuza g\u00f6nderin:<\/p>\n<pre><code class=\"language-bash\">\ngit init\ngit add .\ngit commit -m \"\u0130lk commit: Hello World sayfas\u0131\"\ngit branch -M main\ngit remote add origin https:\/\/github.com\/KULLANICI_ADINIZ\/REPO_ADINIZ.git\ngit push -u origin main\n<\/pre>\n<p><\/code><\/p>\n<h3>GitHub Actions \u0130\u015f Ak\u0131\u015f\u0131 Tan\u0131mlama: main.yml<\/h3>\n<p>\u015eimdi projenizi her g\u00fcncelledi\u011finizde otomatik da\u011f\u0131t\u0131m yapacak GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131 olu\u015ftural\u0131m. \u0130\u015f ak\u0131\u015flar\u0131, deponuzun k\u00f6k dizinindeki <code>.github\/workflows\/<\/code> klas\u00f6r\u00fcnde YAML dosyalar\u0131 olarak tan\u0131mlan\u0131r. Yeni bir dosya olu\u015ftural\u0131m: <code>.github\/workflows\/deploy.yml<\/code>.<\/p>\n<pre><code class=\"language-yaml\">\n# .github\/workflows\/deploy.yml\nname: Raspberry Pi Da\u011f\u0131t\u0131m\u0131\n\non:\n  push:\n    branches:\n      - main # main branch'ine yap\u0131lan her push'ta tetiklenir\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest # \u0130\u015f, GitHub'\u0131n sa\u011flad\u0131\u011f\u0131 Ubuntu ortam\u0131nda \u00e7al\u0131\u015f\u0131r\n    steps:\n    - name: Depoyu \u00c7ek\n      uses: actions\/checkout@v3 # GitHub Actions'\u0131n depoyu \u00e7ekmesini sa\u011flar\n\n    - name: SSH Anahtar\u0131n\u0131 Kur\n      uses: shimataro\/ssh-key-action@v2\n      with:\n        key: ${{ secrets.SSH_PRIVATE_KEY }}\n        known_hosts: ${{ secrets.KNOWN_HOSTS }}\n\n    - name: Dosyalar\u0131 Raspberry Pi'ye Kopyala\n      run: |\n        ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.RPI_HOST }} \"mkdir -p \/var\/www\/html\/my_project\" # Hedef dizini olu\u015ftur (varsa atlar)\n        rsync -avz --delete .\/ ${{ secrets.SSH_USER }}@${{ secrets.RPI_HOST }}:\/var\/www\/html\/my_project\/\n<\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015f ak\u0131\u015f\u0131, <code>main<\/code> branch'ine yap\u0131lan her push i\u015fleminde tetiklenir ve a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 ger\u00e7ekle\u015ftirir:<\/p>\n<ol>\n<li><strong>Depoyu \u00c7ek:<\/strong> Projenizin kodunu GitHub Actions \u00e7al\u0131\u015fma alan\u0131na \u00e7eker.<\/li>\n<li><strong>SSH Anahtar\u0131n\u0131 Kur:<\/strong> Raspberry Pi'nize SSH ile ba\u011flanmak i\u00e7in gerekli \u00f6zel anahtar\u0131 ve bilinen hostlar\u0131 kurar.<\/li>\n<li><strong>Dosyalar\u0131 Raspberry Pi'ye Kopyala:<\/strong> <code>rsync<\/code> komutunu kullanarak, yerel depodaki t\u00fcm dosyalar\u0131 Raspberry Pi \u00fczerindeki belirtilen dizine kopyalar. <code>--delete<\/code> parametresi sayesinde, Raspberry Pi'deki eski dosyalar silinerek yeni versiyonla senkronize edilir.<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: G\u00fcvenlik nedeniyle, hassas bilgileri (SSH \u00f6zel anahtar\u0131, kullan\u0131c\u0131 ad\u0131, IP adresi) do\u011frudan YAML dosyas\u0131nda tutmak yerine GitHub Secrets olarak saklamal\u0131s\u0131n\u0131z. Deponuzun ayarlar\u0131ndan \"Settings > Security > Secrets and variables > Actions\" yolunu izleyerek yeni secret'lar ekleyebilirsiniz. <code>SSH_PRIVATE_KEY<\/code>, <code>KNOWN_HOSTS<\/code> (Pi'nizin SSH parmak izi), <code>SSH_USER<\/code> ve <code>RPI_HOST<\/code> (Pi'nizin IP adresi) ad\u0131nda secret'lar olu\u015fturun.\n<\/div>\n<p><code>KNOWN_HOSTS<\/code> de\u011ferini almak i\u00e7in, bir kez SSH ile Pi'nize ba\u011fland\u0131\u011f\u0131n\u0131zda olu\u015fan <code>~\/.ssh\/known_hosts<\/code> dosyas\u0131ndaki Pi'nize ait sat\u0131r\u0131 kopyalayabilirsiniz.<\/p>\n<h3>Da\u011f\u0131t\u0131m\u0131n Tetiklenmesi ve G\u00f6zlemlenmesi<\/h3>\n<p><code>deploy.yml<\/code> dosyas\u0131n\u0131 olu\u015fturup deponuza push ettikten ve gerekli secret'lar\u0131 GitHub'a ekledikten sonra, projenizdeki herhangi bir de\u011fi\u015fikli\u011fi <code>main<\/code> branch'ine push etti\u011finizde, GitHub Actions otomatik olarak \u00e7al\u0131\u015fmaya ba\u015flayacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">\ngit add .github\/workflows\/deploy.yml\ngit commit -m \"GitHub Actions da\u011f\u0131t\u0131m i\u015f ak\u0131\u015f\u0131 eklendi\"\ngit push origin main\n<\/pre>\n<p><\/code><\/p>\n<p>GitHub deponuzda \"Actions\" sekmesine giderek, i\u015f ak\u0131\u015f\u0131n\u0131z\u0131n durumunu canl\u0131 olarak takip edebilirsiniz. Ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m\u0131n ard\u0131ndan, Raspberry Pi'nizin <code>\/var\/www\/html\/my_project\/<\/code> dizininde projenizin g\u00fcncel halini bulmal\u0131s\u0131n\u0131z. E\u011fer bir web sunucusu (\u00f6rne\u011fin Nginx veya Apache) kurduysan\u0131z, Pi'nizin yerel IP adresinden projenize eri\u015febilmeniz gerekir. \u00d6rne\u011fin, Nginx y\u00fckl\u00fcyse ve <code>\/var\/www\/html\/my_project<\/code> dizinini serve ediyorsa, taray\u0131c\u0131n\u0131zdan <code>http:\/\/RPI_IP_ADRESI\/my_project<\/code> adresine giderek sayfan\u0131z\u0131 g\u00f6rebilirsiniz.<\/p>\n<p>Bu a\u015fama, projelerinizin geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131ran otomatik bir k\u00f6pr\u00fc olu\u015fturman\u0131z\u0131 sa\u011flar. Art\u0131k manuel FTP y\u00fcklemeleri veya SSH kopyalamalar\u0131 yerine, sadece kodunuzu GitHub'a g\u00f6ndererek projenizin canl\u0131da g\u00fcncellendi\u011fini izleyebilirsiniz. Bu otomasyon, \u00f6zellikle s\u00fcrekli g\u00fcncellenen projeler i\u00e7in inan\u0131lmaz bir zaman ve emek tasarrufu sa\u011flar.<\/p>\n<h2>G\u00fcvenli D\u0131\u015f Eri\u015fim: Cloudflare Tunnel (Zero Trust) Nas\u0131l Kurulur ve Yap\u0131land\u0131r\u0131l\u0131r?<\/h2>\n<p>Raspberry Pi'nizdeki projemiz art\u0131k GitHub Actions ile otomatik olarak da\u011f\u0131t\u0131labiliyor. Ancak, bu projelere d\u0131\u015far\u0131dan, yani internet \u00fczerinden g\u00fcvenli bir \u015fekilde eri\u015febilmemiz i\u00e7in bir sonraki kritik ad\u0131m Cloudflare Tunnel'\u0131 yap\u0131land\u0131rmakt\u0131r. Cloudflare Tunnel, ev a\u011f\u0131n\u0131zdaki g\u00fcvenlik duvar\u0131n\u0131z\u0131 a\u00e7madan, Pi'nizin projelerini internete g\u00fcvenli bir \u015fekilde sunman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Cloudflare Hesab\u0131 ve Alan Ad\u0131 Haz\u0131rl\u0131\u011f\u0131<\/h3>\n<ol>\n<li><strong>Cloudflare Hesab\u0131 Olu\u015fturma:<\/strong> E\u011fer hen\u00fcz bir Cloudflare hesab\u0131n\u0131z yoksa, <a href=\"https:\/\/www.cloudflare.com\/\">Cloudflare web sitesinden<\/a> \u00fccretsiz bir hesap olu\u015fturun.<\/li>\n<li><strong>Alan Ad\u0131 Ekleme:<\/strong> Hesab\u0131n\u0131za bir alan ad\u0131 (domain) ekleyin ve DNS sunucular\u0131n\u0131z\u0131 Cloudflare'a y\u00f6nlendirin. Bu i\u015flem genellikle birka\u00e7 dakika ile birka\u00e7 saat aras\u0131nda s\u00fcrebilir.<\/li>\n<li><strong>Zero Trust Dashboard Eri\u015fimi:<\/strong> Cloudflare kontrol panelinizden \"Zero Trust\" sekmesine gidin ve Zero Trust dashboard'a eri\u015fin. Bu, t\u00fcnel olu\u015fturma ve y\u00f6netme i\u00e7in kullanaca\u011f\u0131m\u0131z ana aray\u00fczd\u00fcr.<\/li>\n<\/ol>\n<h3>Cloudflared Kurulumu ve T\u00fcnel Olu\u015fturma<\/h3>\n<p>Cloudflare Tunnel'\u0131 kullanmak i\u00e7in Raspberry Pi'nize <code>cloudflared<\/code> daemon'unu kurman\u0131z gerekir. Bu yaz\u0131l\u0131m, Pi'nizden Cloudflare a\u011f\u0131na do\u011fru g\u00fcvenli t\u00fcneli olu\u015fturan ana bile\u015fendir.<\/p>\n<ol>\n<li><strong>Cloudflared Kurulumu (Raspberry Pi \u00dczerinde):<\/strong> Raspberry Pi'nize SSH ile ba\u011flan\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<pre><code class=\"language-bash\">\n# mimariyi kontrol et\ndpkg --print-architecture \n\n# genellikle arm64 veya armhf olacakt\u0131r.\n# arm64 i\u00e7in (Raspberry Pi 3, 4, 5 modelleri)\nwget https:\/\/github.com\/cloudflare\/cloudflared\/releases\/latest\/download\/cloudflared-linux-arm64 -O cloudflared\n\n# armhf i\u00e7in (eski modeller veya 32-bit OS)\n# wget https:\/\/github.com\/cloudflare\/cloudflared\/releases\/latest\/download\/cloudflared-linux-arm -O cloudflared\n\nchmod +x cloudflared\nsudo mv cloudflared \/usr\/local\/bin\/\n\ncloudflared -v # Versiyon kontrol\u00fc\n    <\/pre>\n<p><\/code><\/p>\n<li><strong>T\u00fcnel Olu\u015fturma ve Yetkilendirme:<\/strong> \u015eimdi Zero Trust dashboard'da \"Access > Tunnels\" b\u00f6l\u00fcm\u00fcne gidin ve \"Create a tunnel\" butonuna t\u0131klay\u0131n. T\u00fcnelinize bir isim verin (\u00f6rn. <code>my-rpi-tunnel<\/code>). Dashboard size <code>cloudflared login<\/code> komutunu verecek. Bu komutu Raspberry Pi'nizde \u00e7al\u0131\u015ft\u0131r\u0131n:<\/li>\n<pre><code class=\"language-bash\">\ncloudflared tunnel login\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, bir taray\u0131c\u0131 penceresi a\u00e7acak ve Cloudflare hesab\u0131n\u0131za giri\u015f yapman\u0131z\u0131 isteyecektir. Giri\u015f yapt\u0131ktan sonra, Pi'niz Cloudflare ile yetkilendirilecek ve Pi'nizin ev dizininde (\u00f6rne\u011fin <code>~\/.cloudflared\/<\/code>) bir sertifika dosyas\u0131 olu\u015fturulacakt\u0131r.<\/p>\n<li><strong>T\u00fcneli Olu\u015fturma ve Yap\u0131land\u0131rma:<\/strong> Zero Trust dashboard'daki ad\u0131mlara devam ederek, t\u00fcnel i\u00e7in bir config dosyas\u0131 olu\u015fturman\u0131z gerekecek. T\u00fcnelinize bir isim verin (\u00f6rn. <code>my-rpi-tunnel<\/code>). Dashboard size bir t\u00fcnel ID'si ve konfig\u00fcrasyon komutlar\u0131 sunacakt\u0131r. Bu komutu Raspberry Pi'nizde \u00e7al\u0131\u015ft\u0131rarak bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturun:<\/li>\n<pre><code class=\"language-bash\">\ncloudflared tunnel create my-rpi-tunnel\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code>~\/.cloudflared\/<TUNNEL_ID>.json<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r. Ard\u0131ndan, Pi'nizdeki <code>~\/.cloudflared\/config.yml<\/code> dosyas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi d\u00fczenleyin (veya yeni olu\u015fturun):<\/p>\n<pre><code class=\"language-yaml\">\n# ~\/.cloudflared\/config.yml\ntunnel: <TUNNEL_ID> # Yukar\u0131daki komuttan ald\u0131\u011f\u0131n\u0131z t\u00fcnel ID'si\ncredentials-file: \/home\/kullanici_adi\/.cloudflared\/<TUNNEL_ID>.json\n\ningress:\n  - hostname: myproject.alanadiniz.com\n    service: http:\/\/localhost:8080 # veya projenizin \u00e7al\u0131\u015ft\u0131\u011f\u0131 port\n  - hostname: ssh.alanadiniz.com\n    service: ssh:\/\/localhost:22 # SSH eri\u015fimi i\u00e7in\n  - service: http_status:404 # Tan\u0131ms\u0131z istekler i\u00e7in 404 d\u00f6nd\u00fcr\n    <\/pre>\n<p><\/code><\/p>\n<p><code>myproject.alanadiniz.com<\/code> ve <code>ssh.alanadiniz.com<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 ve istedi\u011finiz alt alan adlar\u0131n\u0131 kullan\u0131n. <code>localhost:8080<\/code> yerine, web uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 portu (\u00f6rn. Nginx veya Apache 80, Node.js 3000, Python 5000) yazmal\u0131s\u0131n\u0131z.<\/p>\n<li><strong>T\u00fcneli Sistem Servisi Olarak \u00c7al\u0131\u015ft\u0131rma:<\/strong> T\u00fcnelin kal\u0131c\u0131 olarak \u00e7al\u0131\u015fmas\u0131 i\u00e7in bir sistem servisi olarak yap\u0131land\u0131ral\u0131m:<\/li>\n<pre><code class=\"language-bash\">\nsudo cloudflared tunnel run my-rpi-tunnel\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rmak yerine, kal\u0131c\u0131 bir servis olarak kurmak daha iyidir:<\/p>\n<pre><code class=\"language-bash\">\nsudo cloudflared --config ~\/.cloudflared\/config.yml service install\nsudo systemctl enable cloudflared\nsudo systemctl start cloudflared\nsudo systemctl status cloudflared\n    <\/pre>\n<p><\/code>\n<\/ol>\n<h3>Y\u00f6nlendirme (Routing) ve Eri\u015fim Politikalar\u0131<\/h3>\n<p>Zero Trust dashboard'da t\u00fcnel kurulumunu tamamlad\u0131ktan sonra, \"Public Hostnames\" b\u00f6l\u00fcm\u00fcnde belirledi\u011finiz alt alan adlar\u0131 (\u00f6rn. <code>myproject.alanadiniz.com<\/code>) i\u00e7in y\u00f6nlendirme kurallar\u0131n\u0131 g\u00f6receksiniz. Bu ad\u0131m, Cloudflare'\u0131n alan ad\u0131n\u0131z\u0131 t\u00fcnele ba\u011flamas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, \"Access > Applications\" b\u00f6l\u00fcm\u00fcnden \u00f6zel eri\u015fim politikalar\u0131 (Zero Trust Access Policies) olu\u015fturarak, sadece belirli kullan\u0131c\u0131lar\u0131n veya IP adreslerinin t\u00fcnel \u00fczerinden Pi'nize eri\u015fmesine izin verebilirsiniz. Bu, ekstra bir g\u00fcvenlik katman\u0131 sa\u011flar ve Pi'nizi sadece yetkili ki\u015filere a\u00e7ar.<\/p>\n<pre><code class=\"language-html\">\n<!-- Cloudflare Tunnel ile trafik ak\u0131\u015f\u0131 -->\n<p>\n  <strong>Trafik Ak\u0131\u015f\u0131:<\/strong>\n  <ul>\n    <li>Kullan\u0131c\u0131, taray\u0131c\u0131s\u0131ndan <code>myproject.alanadiniz.com<\/code> adresine gider.<\/li>\n    <li>\u0130stek, Cloudflare'\u0131n global a\u011f\u0131na ula\u015f\u0131r.<\/li>\n    <li>Cloudflare, Zero Trust politikalar\u0131n\u0131 uygular (varsa).<\/li>\n    <li>\u0130stek, Raspberry Pi'nizden Cloudflare'a do\u011fru a\u00e7\u0131lm\u0131\u015f g\u00fcvenli t\u00fcnel \u00fczerinden Pi'nize y\u00f6nlendirilir.<\/li>\n    <li>Pi'deki web sunucunuz (\u00f6rn. Nginx) iste\u011fi kar\u015f\u0131lar ve yan\u0131t\u0131 t\u00fcnel \u00fczerinden geri g\u00f6nderir.<\/li>\n  <\/ul>\n<\/p>\n<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k Raspberry Pi'nizdeki projenize, karma\u015f\u0131k a\u011f ayarlar\u0131 yapmadan, Cloudflare'\u0131n sa\u011flad\u0131\u011f\u0131 g\u00fcvenlik ve performans avantajlar\u0131yla, belirledi\u011finiz alan adlar\u0131 \u00fczerinden g\u00fcvenle eri\u015febilirsiniz. Bu kurulum, ev a\u011f\u0131n\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flarken, projelerinizi t\u00fcm d\u00fcnyaya a\u00e7man\u0131n en modern ve etkili yolunu sunar.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Bir Web Uygulamas\u0131n\u0131n Otomatik Da\u011f\u0131t\u0131m\u0131<\/h2>\n<p>\u015eimdiye kadar Raspberry Pi'mizin kurulumunu, GitHub Actions ile CI\/CD i\u015f ak\u0131\u015f\u0131n\u0131 ve Cloudflare Tunnel ile g\u00fcvenli d\u0131\u015f eri\u015fimi yap\u0131land\u0131rd\u0131k. Bu b\u00f6l\u00fcmde, t\u00fcm bu par\u00e7alar\u0131 bir araya getirerek, basit bir Node.js (Express.js) web uygulamas\u0131n\u0131n geli\u015ftirilmesinden, GitHub'a push edilmesine, otomatik olarak Raspberry Pi'ye Docker konteyneri olarak da\u011f\u0131t\u0131lmas\u0131na ve Cloudflare Tunnel \u00fczerinden eri\u015filmesine kadar olan ger\u00e7ek d\u00fcnya senaryosunu inceleyece\u011fiz.<\/p>\n<h3>Uygulama Geli\u015ftirme ve Dockerize Etme<\/h3>\n<p>\u00d6ncelikle, basit bir Node.js Express uygulamas\u0131 olu\u015ftural\u0131m. Proje yap\u0131m\u0131z \u015f\u00f6yle olacak:<\/p>\n<pre><code class=\"language-text\">\nmy-express-app\/\n\u251c\u2500\u2500 index.js\n\u251c\u2500\u2500 package.json\n\u2514\u2500\u2500 Dockerfile\n<\/pre>\n<p><\/code><\/p>\n<p><strong><code>package.json<\/code>:<\/strong><\/p>\n<pre><code class=\"language-json\">\n{\n  \"name\": \"my-express-app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Simple Express app on Raspberry Pi\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.17.1\"\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p><strong><code>index.js<\/code>:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\nconst express = require('express');\nconst app = express();\nconst port = 3000; \/\/ Uygulama 3000 portunda \u00e7al\u0131\u015facak\n\napp.get('\/', (req, res) => {\n  res.send('<h1>Merhaba Raspberry Pi!<\/h1><p>Bu uygulama Docker ile da\u011f\u0131t\u0131ld\u0131 ve Cloudflare Tunnel \u00fczerinden eri\u015filebilir.<\/p><p>Uygulama versiyonu: 1.0.0<\/p>');\n});\n\napp.listen(port, () => {\n  console.log(<code>Uygulama http:\/\/localhost:${port} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi bu uygulamay\u0131 Dockerize edelim. <strong><code>Dockerfile<\/code>:<\/strong><\/p>\n<pre><code class=\"language-dockerfile\">\n# Dockerfile\n# Raspberry Pi i\u00e7in uygun Node.js ARM imaj\u0131n\u0131 kullan\nFROM arm64v8\/node:18-slim-bullseye \n\nWORKDIR \/app\n\nCOPY package*.json .\/\nRUN npm install\n\nCOPY . .\n\nEXPOSE 3000 # Uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 port\n\nCMD [ \"npm\", \"start\" ]\n<\/pre>\n<p><\/code><\/p>\n<p>Projenizi GitHub deponuza y\u00fckleyin.<\/p>\n<h3>GitHub Actions ile Docker \u0130maj\u0131 Olu\u015fturma ve Da\u011f\u0131tma<\/h3>\n<p>\u00d6nceki <code>deploy.yml<\/code> dosyam\u0131z\u0131 Docker ile da\u011f\u0131t\u0131m\u0131 destekleyecek \u015fekilde g\u00fcncelleyelim. Bu senaryoda, uygulamay\u0131 do\u011frudan Raspberry Pi'ye kopyalamak yerine, bir Docker imaj\u0131 olu\u015fturup Pi \u00fczerinde \u00e7al\u0131\u015ft\u0131rmay\u0131 tercih edece\u011fiz. GitHub Actions, Docker imaj\u0131n\u0131 olu\u015fturacak, sonra SSH \u00fczerinden Pi'ye ba\u011flan\u0131p imaj\u0131 \u00e7ekmesini (pull) ve eski konteyneri durdurup yenisini ba\u015flatmas\u0131n\u0131 s\u00f6yleyecek.<\/p>\n<pre><code class=\"language-yaml\">\n# .github\/workflows\/deploy.yml\nname: Express Uygulamas\u0131n\u0131 Raspberry Pi'ye Da\u011f\u0131t\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-latest\n    steps:\n    - name: Depoyu \u00c7ek\n      uses: actions\/checkout@v3\n\n    - name: Docker \u0130maj\u0131 Olu\u015ftur\n      uses: docker\/build-push-action@v4\n      with:\n        context: .\n        push: false # Bu \u00f6rnekte do\u011frudan push yapm\u0131yoruz, ancak bir Docker kay\u0131t defterine g\u00f6nderebilirsiniz\n        tags: my-express-app:latest\n        platforms: linux\/arm64 # Raspberry Pi i\u00e7in mimariyi belirt\n\n    - name: Docker \u0130maj\u0131n\u0131 Kaydet (Tar olarak)\n      run: docker save my-express-app:latest -o my-express-app.tar\n\n    - name: SSH Anahtar\u0131n\u0131 Kur\n      uses: shimataro\/ssh-key-action@v2\n      with:\n        key: ${{ secrets.SSH_PRIVATE_KEY }}\n        known_hosts: ${{ secrets.KNOWN_HOSTS }}\n\n    - name: \u0130maj\u0131 Raspberry Pi'ye Aktar ve Da\u011f\u0131t\n      run: |\n        scp -o StrictHostKeyChecking=no my-express-app.tar ${{ secrets.SSH_USER }}@${{ secrets.RPI_HOST }}:\/tmp\/my-express-app.tar\n        ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.RPI_HOST }} << 'EOF'\n          docker load -i \/tmp\/my-express-app.tar\n          docker stop my-express-app || true # Eski konteyneri durdur, yoksa hata vermez\n          docker rm my-express-app || true   # Eski konteyneri sil\n          docker run -d --name my-express-app -p 3000:3000 my-express-app:latest\n          rm \/tmp\/my-express-app.tar # Aktar\u0131lan tar dosyas\u0131n\u0131 sil\n        EOF\n<\/pre>\n<p><\/code><\/p>\n<p>Bu i\u015f ak\u0131\u015f\u0131:<\/p>\n<ol>\n<li>Depoyu \u00e7eker.<\/li>\n<li>Docker imaj\u0131n\u0131 Raspberry Pi'nin mimarisine (<code>linux\/arm64<\/code>) uygun \u015fekilde olu\u015fturur.<\/li>\n<li>Olu\u015fturulan imaj\u0131 bir <code>.tar<\/code> dosyas\u0131na kaydeder.<\/li>\n<li>SSH anahtarlar\u0131n\u0131 kurar.<\/li>\n<li><code>.tar<\/code> dosyas\u0131n\u0131 Raspberry Pi'ye kopyalar.<\/li>\n<li>SSH \u00fczerinden Pi'ye ba\u011flan\u0131r ve:\n<ul>\n<li>\u0130maj\u0131 y\u00fckler.<\/li>\n<li>Mevcut <code>my-express-app<\/code> konteynerini durdurur ve siler.<\/li>\n<li>Yeni imajdan yeni bir konteyner ba\u015flat\u0131r ve 3000 portunu d\u0131\u015far\u0131ya a\u00e7ar.<\/li>\n<li>Aktar\u0131lan <code>.tar<\/code> dosyas\u0131n\u0131 temizler.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Daha ileri seviye senaryolar i\u00e7in, Docker Hub gibi \u00f6zel bir Docker kay\u0131t defterine imaj\u0131 push edip, Raspberry Pi'nin sadece imaj\u0131 \u00e7ekmesini sa\u011flayabilirsiniz. Bu, b\u00fcy\u00fck imajlar i\u00e7in <code>scp<\/code> yerine daha verimli bir y\u00f6ntemdir.\n<\/div>\n<h3>Cloudflare Tunnel ile Eri\u015fimi Yap\u0131land\u0131rma<\/h3>\n<p>Uygulamam\u0131z art\u0131k Raspberry Pi'de Docker konteyneri olarak 3000 portunda \u00e7al\u0131\u015f\u0131yor. Cloudflare Tunnel'\u0131n yap\u0131land\u0131rma dosyas\u0131n\u0131 (<code>~\/.cloudflared\/config.yml<\/code>) g\u00fcncelleyerek bu porta y\u00f6nlendirme yapmal\u0131y\u0131z:<\/p>\n<pre><code class=\"language-yaml\">\n# ~\/.cloudflared\/config.yml\ntunnel: <TUNNEL_ID>\ncredentials-file: \/home\/kullanici_adi\/.cloudflared\/<TUNNEL_ID>.json\n\ningress:\n  - hostname: app.alanadiniz.com\n    service: http:\/\/localhost:3000 # Express uygulamam\u0131z 3000 portunda \u00e7al\u0131\u015f\u0131yor\n  - hostname: ssh.alanadiniz.com\n    service: ssh:\/\/localhost:22\n  - service: http_status:404\n<\/pre>\n<p><\/code><\/p>\n<p>Bu de\u011fi\u015fikli\u011fi yapt\u0131ktan sonra <code>cloudflared<\/code> servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">\nsudo systemctl restart cloudflared\n<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k <code>app.alanadiniz.com<\/code> adresine giderek, Raspberry Pi \u00fczerindeki Node.js uygulaman\u0131za Cloudflare Tunnel \u00fczerinden g\u00fcvenli bir \u015fekilde eri\u015febilirsiniz. Kodunuzda bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, GitHub'a push yapman\u0131z yeterli olacak ve GitHub Actions, uygulaman\u0131z\u0131n yeni versiyonunu otomatik olarak Raspberry Pi'nize da\u011f\u0131tacakt\u0131r. Bu, modern, verimli ve g\u00fcvenli bir self-hosting deneyimi i\u00e7in eksiksiz bir CI\/CD boru hatt\u0131d\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: G\u00fcvenlikten Performansa<\/h2>\n<p>Raspberry Pi \u00fczerinde kurdu\u011fumuz bu g\u00fc\u00e7l\u00fc CI\/CD ve g\u00fcvenli eri\u015fim altyap\u0131s\u0131n\u0131 daha da iyile\u015ftirmek ve profesyonel bir seviyeye ta\u015f\u0131mak i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 g\u00f6zden ge\u00e7irelim. Bu \u00f6neriler, sisteminizin g\u00fcvenli\u011fini art\u0131r\u0131rken, performans\u0131n\u0131 optimize etmenize ve daha s\u00fcrd\u00fcr\u00fclebilir bir yap\u0131ya kavu\u015fman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>G\u00fcvenlik \u00d6nlemleri<\/h3>\n<p>Raspberry Pi'nizin ve ev a\u011f\u0131n\u0131z\u0131n g\u00fcvenli\u011fi her zaman \u00f6ncelik olmal\u0131d\u0131r:<\/p>\n<ol>\n<li><strong>SSH Anahtar Y\u00f6netimi:<\/strong> \u015eifre tabanl\u0131 SSH kimlik do\u011frulamas\u0131 yerine her zaman SSH anahtar \u00e7iftleri kullan\u0131n ve \u015fifrenizi (passphrase) belirleyin. Ayr\u0131ca, SSH servisini sadece anahtarla eri\u015fime izin verecek \u015fekilde yap\u0131land\u0131r\u0131n (<code>PasswordAuthentication no<\/code>).<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131 (UFW):<\/strong> Raspberry Pi'nizde bir g\u00fcvenlik duvar\u0131 (\u00f6rne\u011fin UFW - Uncomplicated Firewall) kurarak sadece Cloudflare Tunnel i\u00e7in gerekli olan \u00e7\u0131k\u0131\u015f ba\u011flant\u0131lar\u0131na ve i\u00e7eriden gelen isteklere izin verin. Gelen t\u00fcm ba\u011flant\u0131lar\u0131 varsay\u0131lan olarak reddedin.<\/li>\n<pre><code class=\"language-bash\">\nsudo apt install ufw -y\nsudo ufw default deny incoming\nsudo ufw default allow outgoing\nsudo ufw enable # G\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftir\n    <\/pre>\n<p><\/code><\/p>\n<p>Cloudflare Tunnel, Raspberry Pi'den d\u0131\u015far\u0131ya do\u011fru ba\u011flant\u0131 kurdu\u011fu i\u00e7in, gelen ba\u011flant\u0131lara izin vermenize gerek kalmaz.<\/p>\n<li><strong>Fail2Ban:<\/strong> SSH ba\u011flant\u0131lar\u0131na y\u00f6nelik kaba kuvvet sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in Fail2Ban kurun. Bu ara\u00e7, ba\u015far\u0131s\u0131z oturum a\u00e7ma giri\u015fimlerini izler ve belirli say\u0131da ba\u015far\u0131s\u0131z denemeden sonra IP adreslerini otomatik olarak yasaklar.<\/li>\n<pre><code class=\"language-bash\">\nsudo apt install fail2ban -y\nsudo systemctl enable fail2ban\nsudo systemctl start fail2ban\n    <\/pre>\n<p><\/code><\/p>\n<li><strong>Cloudflare Access Politikalar\u0131:<\/strong> Cloudflare Tunnel'a ek olarak, Zero Trust Access politikalar\u0131 olu\u015fturarak uygulaman\u0131za eri\u015fimi daha da k\u0131s\u0131tlayabilirsiniz. \u00d6rne\u011fin, sadece belirli e-posta adreslerine sahip ki\u015filerin veya belirli \u00fclkelerden gelen IP adreslerinin eri\u015fimine izin verebilirsiniz.<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Raspberry Pi'nizin i\u015fletim sistemini ve kulland\u0131\u011f\u0131n\u0131z t\u00fcm yaz\u0131l\u0131mlar\u0131 d\u00fczenli olarak g\u00fcncel tutmak, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131na kar\u015f\u0131 korunman\u0131n en basit ve en etkili yoludur.\n<\/div>\n<h3>Performans Optimizasyonu<\/h3>\n<p>Raspberry Pi'nin s\u0131n\u0131rl\u0131 kaynaklar\u0131n\u0131 en verimli \u015fekilde kullanmak \u00f6nemlidir:<\/p>\n<ol>\n<li><strong>Hafif Uygulamalar ve Docker \u0130majlar\u0131:<\/strong> Uygulamalar\u0131n\u0131z\u0131 m\u00fcmk\u00fcn oldu\u011funca hafif tutun. Docker imajlar\u0131 i\u00e7in <code>-slim<\/code> veya <code>-alpine<\/code> tabanl\u0131 imajlar kullanarak disk alan\u0131 ve RAM t\u00fcketimini azalt\u0131n.<\/li>\n<li><strong>Kaynak \u0130zleme:<\/strong> <code>htop<\/code>, <code> glances <\/code> veya Prometheus\/Grafana gibi ara\u00e7larla Raspberry Pi'nizin CPU, RAM ve disk kullan\u0131m\u0131n\u0131 izleyin. Bu, performans darbo\u011fazlar\u0131n\u0131 tespit etmenize yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Cloudflare CDN Kullan\u0131m\u0131:<\/strong> Cloudflare, web sitenizin statik i\u00e7eriklerini (resimler, CSS, JS) \u00f6nbelle\u011fe alarak CDN (\u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131) olarak g\u00f6rev yapar. Bu, Raspberry Pi \u00fczerindeki y\u00fck\u00fc azalt\u0131r ve son kullan\u0131c\u0131lar i\u00e7in web sitenizin y\u00fcklenme h\u0131z\u0131n\u0131 art\u0131r\u0131r.<\/li>\n<li><strong>Swap Alan\u0131 Y\u00f6netimi:<\/strong> Yetersiz RAM durumunda Raspberry Pi, takas alan\u0131 (swap space) kullanarak diski RAM gibi kullanmaya \u00e7al\u0131\u015f\u0131r. Bu performans\u0131 ciddi \u015fekilde d\u00fc\u015f\u00fcr\u00fcr. E\u011fer uygulamalar\u0131n\u0131z \u00e7ok fazla RAM kullan\u0131yorsa, swap dosyan\u0131z\u0131n boyutunu art\u0131rabilirsiniz, ancak bu bir ge\u00e7ici \u00e7\u00f6z\u00fcmd\u00fcr ve SSD veya daha fazla RAM'e sahip bir Pi modeli d\u00fc\u015f\u00fcnmek daha iyi olabilir.<\/li>\n<pre><code class=\"language-bash\">\n# Swap dosyas\u0131n\u0131n boyutunu 2GB'a \u00e7\u0131karmak i\u00e7in (varsay\u0131lan 100MB'd\u0131r)\nsudo sed -i 's\/CONF_SWAPSIZE=.*\/CONF_SWAPSIZE=2048\/' \/etc\/dphys-swapfile\nsudo systemctl restart dphys-swapfile\n    <\/pre>\n<p><\/code>\n<\/ol>\n<h3>Yedekleme ve Kurtarma Stratejileri<\/h3>\n<p>Veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in d\u00fczenli yedeklemeler hayati \u00f6neme sahiptir:<\/p>\n<ol>\n<li><strong>MicroSD Kart Yedeklemesi:<\/strong> Raspberry Pi'nizin t\u00fcm MicroSD kart\u0131n\u0131n d\u00fczenli imaj yedeklerini al\u0131n. Bir problem durumunda, bu imaj\u0131 yeni bir karta yazarak sisteminizi h\u0131zl\u0131ca geri y\u00fckleyebilirsiniz.<\/li>\n<li><strong>Veritaban\u0131 Yedeklemeleri:<\/strong> E\u011fer bir veritaban\u0131 (\u00f6rne\u011fin SQLite, PostgreSQL, MySQL) kullan\u0131yorsan\u0131z, veritaban\u0131 yede\u011fini d\u00fczenli olarak ayr\u0131 bir depolama alan\u0131na (\u00f6rne\u011fin bir bulut depolama hizmetine veya ba\u015fka bir harici diske) aktar\u0131n. GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131za, veritaban\u0131 yede\u011fini al\u0131p depolayan bir ad\u0131m ekleyebilirsiniz.<\/li>\n<li><strong>Yap\u0131land\u0131rma Dosyalar\u0131n\u0131 Versiyonlama:<\/strong> T\u00fcm kritik yap\u0131land\u0131rma dosyalar\u0131n\u0131z\u0131 (\u00f6rne\u011fin Nginx yap\u0131land\u0131rmas\u0131, <code>cloudflared<\/code> config.yml) Git ile versiyonlay\u0131n ve \u00f6zel bir depoda saklay\u0131n. Bu, sisteminizi yeniden kurman\u0131z gerekti\u011finde h\u0131zl\u0131ca yap\u0131land\u0131rman\u0131z\u0131 sa\u011flar.<\/li>\n<\/ol>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, Raspberry Pi \u00fczerindeki self-hosting ortam\u0131n\u0131z\u0131 daha g\u00fcvenli, daha performansl\u0131 ve daha dayan\u0131kl\u0131 hale getirecektir. Unutmay\u0131n, herhangi bir sunucu ortam\u0131nda s\u00fcrekli \u00f6\u011frenme ve iyile\u015ftirme, projenizin uzun \u00f6m\u00fcrl\u00fc ve ba\u015far\u0131l\u0131 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Raspberry Pi, GitHub Actions ve Cloudflare Tunnel \u00fc\u00e7l\u00fcs\u00fcyle kendi sunucunuzu bar\u0131nd\u0131rmak, hem heyecan verici hem de bazen akla yeni sorular getiren bir s\u00fcre\u00e7tir. \u0130\u015fte bu konuda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan baz\u0131 sorular ve yan\u0131tlar\u0131:<\/p>\n<h3>1. Raspberry Pi'm s\u00fcrekli internete ba\u011fl\u0131 kalmak zorunda m\u0131?<\/h3>\n<p>Evet, Cloudflare Tunnel'\u0131n \u00e7al\u0131\u015fabilmesi i\u00e7in Raspberry Pi'nizin s\u00fcrekli internete ba\u011fl\u0131 olmas\u0131 gerekir. Tunnel, Pi'nizden Cloudflare a\u011f\u0131na do\u011fru s\u00fcrekli bir d\u0131\u015fa ba\u011flant\u0131 kurar. E\u011fer internet ba\u011flant\u0131s\u0131 kesilirse, d\u0131\u015far\u0131dan eri\u015fim de kesilecektir. Ayr\u0131ca, GitHub Actions'tan da\u011f\u0131t\u0131m yapabilmek i\u00e7in de Pi'nizin SSH ile eri\u015filebilir olmas\u0131 veya Docker imajlar\u0131n\u0131 \u00e7ekebilmesi gerekir ki bu da internet ba\u011flant\u0131s\u0131 gerektirir.<\/p>\n<h3>2. Cloudflare Tunnel kullanmak g\u00fcvenli mi? Ev a\u011f\u0131m risk alt\u0131nda m\u0131?<\/h3>\n<p>Cloudflare Tunnel, ev a\u011f\u0131n\u0131z i\u00e7in geleneksel port y\u00f6nlendirmelerinden \u00e7ok daha g\u00fcvenlidir. \u00c7\u00fcnk\u00fc:<\/p>\n<ul>\n<li>D\u0131\u015far\u0131dan do\u011frudan Pi'nize gelen hi\u00e7bir port a\u00e7\u0131lmaz. T\u00fcm trafik, Pi'nizin ba\u015flatt\u0131\u011f\u0131 giden g\u00fcvenli t\u00fcnel \u00fczerinden ge\u00e7er.<\/li>\n<li>\u0130nternet trafi\u011fi Cloudflare'\u0131n global a\u011f\u0131 \u00fczerinden y\u00f6nlendirildi\u011fi i\u00e7in DDoS korumas\u0131, SSL\/TLS \u015fifreleme ve iste\u011fe ba\u011fl\u0131 Web Uygulama G\u00fcvenlik Duvar\u0131 (WAF) gibi ek g\u00fcvenlik katmanlar\u0131ndan yararlan\u0131rs\u0131n\u0131z.<\/li>\n<\/ul>\n<p>Do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, Cloudflare Tunnel ev a\u011f\u0131n\u0131z\u0131n g\u00fcvenli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<h3>3. GitHub Actions ile da\u011f\u0131t\u0131m yaparken hassas verilerimi nas\u0131l koruyabilirim?<\/h3>\n<p>Hassas verileri (SSH \u00f6zel anahtarlar\u0131, API anahtarlar\u0131, veritaban\u0131 \u015fifreleri vb.) do\u011frudan i\u015f ak\u0131\u015f\u0131 YAML dosyas\u0131nda tutmak yerine, GitHub Secrets \u00f6zelli\u011fini kullanmal\u0131s\u0131n\u0131z. Bu secret'lar \u015fifrelenir ve i\u015f ak\u0131\u015f\u0131n\u0131z \u00e7al\u0131\u015f\u0131rken g\u00fcvenli bir \u015fekilde de\u011fi\u015fken olarak kullan\u0131labilir. Asla \u00f6zel anahtarlar\u0131n\u0131z\u0131 do\u011frudan deponuza commit etmeyin.<\/p>\n<h3>4. Raspberry Pi'min performans\u0131 birden fazla uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in yeterli mi?<\/h3>\n<p>Raspberry Pi'nin performans\u0131, kulland\u0131\u011f\u0131n\u0131z modele ve \u00e7al\u0131\u015ft\u0131rmak istedi\u011finiz uygulamalar\u0131n kaynak gereksinimlerine ba\u011fl\u0131d\u0131r. Genellikle Raspberry Pi 4 veya 5 gibi yeni modeller, web sunucular\u0131, k\u00fc\u00e7\u00fck veritabanlar\u0131 ve hafif uygulamalar i\u00e7in yeterli performans\u0131 sunar. Ancak, \u00e7ok say\u0131da e\u015fzamanl\u0131 istek alan yo\u011fun web uygulamalar\u0131 veya kaynak yo\u011fun arka plan i\u015flemleri i\u00e7in yetersiz kalabilir. Performans\u0131 optimize etmek i\u00e7in Dockerize edilmi\u015f, hafif uygulamalar kullanmaya, gereksiz servisleri kapatmaya ve Cloudflare CDN'den yararlanmaya \u00f6zen g\u00f6sterin.<\/p>\n<h3>5. Yapt\u0131\u011f\u0131m bir da\u011f\u0131t\u0131m ba\u015far\u0131s\u0131z olursa ne yapmal\u0131y\u0131m?<\/h3>\n<p>E\u011fer bir da\u011f\u0131t\u0131m ba\u015far\u0131s\u0131z olursa, ilk olarak GitHub Actions sekmesindeki i\u015f ak\u0131\u015f\u0131 \u00e7\u0131kt\u0131s\u0131n\u0131 kontrol edin. Hata mesajlar\u0131 genellikle sorunun kayna\u011f\u0131 hakk\u0131nda size bilgi verecektir (\u00f6rne\u011fin, SSH ba\u011flant\u0131 hatas\u0131, Docker imaj\u0131 olu\u015fturma hatas\u0131, komut \u00e7al\u0131\u015ft\u0131rma hatas\u0131). Gerekirse, Raspberry Pi'nize SSH ile ba\u011flanarak manuel olarak sorun giderme ad\u0131mlar\u0131 uygulayabilir ve hatan\u0131n nedenini daha derinlemesine ara\u015ft\u0131rabilirsiniz. Ba\u015far\u0131s\u0131z da\u011f\u0131t\u0131mlar\u0131 h\u0131zla d\u00fczeltmek i\u00e7in geri alma (rollback) stratejileri d\u00fc\u015f\u00fcnmek de iyi bir uygulamad\u0131r, \u00f6rne\u011fin eski bir Docker imaj\u0131na ge\u00e7i\u015f yapmak gibi.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub&hellip;","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-32837","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>Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD<\/title>\n<meta name=\"description\" content=\"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel&#039;\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.\" \/>\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\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD\" \/>\n<meta property=\"og:description\" content=\"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel&#039;\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T10:31:39+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD\",\"datePublished\":\"2025-10-26T10:31:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\"},\"wordCount\":4988,\"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\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\",\"name\":\"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-26T10:31:39+00:00\",\"description\":\"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel'\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD\"}]},{\"@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":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD","description":"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel'\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.","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\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/","og_locale":"tr_TR","og_type":"article","og_title":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD","og_description":"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel'\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-26T10:31:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD","datePublished":"2025-10-26T10:31:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/"},"wordCount":4988,"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\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/","url":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/","name":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-26T10:31:39+00:00","description":"Kendi dijital projelerinizi bar\u0131nd\u0131rmak, verileriniz \u00fczerinde tam kontrol sahibi olmak ve \u00f6zg\u00fcrce geli\u015ftirmek mi istiyorsunuz? Raspberry Pi, GitHub Actions ve Cloudflare Tunnel'\u0131n m\u00fckemmel birle\u015fimiyle, evinizdeki k\u00fc\u00e7\u00fck bir bilgisayar\u0131 g\u00fc\u00e7l\u00fc ve g\u00fcvenli bir sunucuya d\u00f6n\u00fc\u015ft\u00fcrerek, otomatik da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini ad\u0131m ad\u0131m nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/self-hosting-raspberry-pi-github-actions-ve-cloudflare-tunnel-ile-guvenli-ci-cd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Self-Hosting: Raspberry Pi, GitHub Actions ve Cloudflare Tunnel ile G\u00fcvenli CI\/CD"}]},{"@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\/32837","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=32837"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32837\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}