{"id":2706,"date":"2025-12-02T17:29:31","date_gmt":"2025-12-02T14:29:31","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/git-ile-otomatik-deploy-cpanel-plesk-ve-vpste-adim-adim-kurulum\/"},"modified":"2025-12-02T17:29:31","modified_gmt":"2025-12-02T14:29:31","slug":"git-ile-otomatik-deploy-cpanel-plesk-ve-vpste-adim-adim-kurulum","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/git-ile-otomatik-deploy-cpanel-plesk-ve-vpste-adim-adim-kurulum\/","title":{"rendered":"Git ile Otomatik Deploy: cPanel, Plesk ve VPS\u2019te Ad\u0131m Ad\u0131m Kurulum"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><p>Web projeleriniz b\u00fcy\u00fcd\u00fck\u00e7e, canl\u0131 ortama kod g\u00f6ndermek (deploy) en zay\u0131f halkalardan biri haline gelir. Elle FTP ile dosya atmak, yanl\u0131\u015f klas\u00f6re y\u00fcklemek, eski dosyalar\u0131 silmeyi unutmak veya son komiti de\u011fil de bir \u00f6nceki komiti g\u00f6ndermek; hepsi ger\u00e7ek hayatta g\u00f6rd\u00fc\u011f\u00fcm\u00fcz, can s\u0131k\u0131c\u0131 hatalar. Oysa Git tabanl\u0131 otomatik deploy i\u015f ak\u0131\u015flar\u0131 ile bu s\u00fcreci hem tekrarlanabilir hem de geri al\u0131nabilir hale getirmek m\u00fcmk\u00fcn.<\/p>\n<p>Bu yaz\u0131da, Git ile otomatik deploy mant\u0131\u011f\u0131n\u0131 sade bir dille anlat\u0131p, \u00fc\u00e7 farkl\u0131 senaryo \u00fczerinden ad\u0131m ad\u0131m ilerleyece\u011fiz: <strong>cPanel<\/strong> kullanan <a href=\"https:\/\/www.dchost.com\/tr\/web-hosting\">payla\u015f\u0131ml\u0131 hosting<\/a> hesaplar\u0131, <strong>Plesk<\/strong> panelli sunucular ve <strong>tam kontrol sahibi oldu\u011funuz <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a>\u2019ler<\/strong>. Amac\u0131m\u0131z; ister basit bir WordPress temas\u0131, ister Laravel\/Node.js tabanl\u0131 geli\u015fmi\u015f bir uygulama olsun, kodu tek komutla veya otomatik olarak g\u00fcvenle canl\u0131ya alabilece\u011finiz bir d\u00fczen kurman\u0131za yard\u0131mc\u0131 olmak.<\/p>\n<p>DCHost ekibi olarak, m\u00fc\u015fterilerimizin projelerinde Git tabanl\u0131 yay\u0131n i\u015f ak\u0131\u015flar\u0131n\u0131 olduk\u00e7a s\u0131k kurguluyoruz. Bu rehberi, sahada ger\u00e7ekten \u00e7al\u0131\u015fan pratikleri s\u00fczerek haz\u0131rlad\u0131k. Yaz\u0131n\u0131n sonunda; kendi ortam\u0131n\u0131za en uygun yakla\u015f\u0131m\u0131 se\u00e7ebilecek, riskli manuel ad\u0131mlar\u0131 minimuma indirip, k\u00fc\u00e7\u00fck bir hatan\u0131n t\u00fcm siteyi bozmas\u0131n\u0131 engelleyecek bir yap\u0131 kurmu\u015f olacaks\u0131n\u0131z.<\/p>\n<div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#Git_ile_Otomatik_Deploy_Kurmanin_Avantajlari\"><span class=\"toc_number toc_depth_1\">1<\/span> Git ile Otomatik Deploy Kurman\u0131n Avantajlar\u0131<\/a><\/li><li><a href=\"#Temel_Mimari_Git_Deposu_ve_Sunucu_Arasindaki_Akis\"><span class=\"toc_number toc_depth_1\">2<\/span> Temel Mimari: Git Deposu ve Sunucu Aras\u0131ndaki Ak\u0131\u015f<\/a><\/li><li><a href=\"#cPanel_Uzerinde_Git_ile_Otomatik_Deploy\"><span class=\"toc_number toc_depth_1\">3<\/span> cPanel \u00dczerinde Git ile Otomatik Deploy<\/a><ul><li><a href=\"#1_cPanelde_Dizayn_Bare_Repo_ve_Calisma_Dizini\"><span class=\"toc_number toc_depth_2\">3.1<\/span> 1. cPanel\u2019de Dizayn: Bare Repo ve \u00c7al\u0131\u015fma Dizini<\/a><\/li><li><a href=\"#2_post-receive_Hook_ile_Otomatik_Cekme_ve_Deploy\"><span class=\"toc_number toc_depth_2\">3.2<\/span> 2. post-receive Hook ile Otomatik \u00c7ekme ve Deploy<\/a><\/li><li><a href=\"#3_Lokal_Gelistirme_Ortamini_Sunucuya_Baglama\"><span class=\"toc_number toc_depth_2\">3.3<\/span> 3. Lokal Geli\u015ftirme Ortam\u0131n\u0131 Sunucuya Ba\u011flama<\/a><\/li><li><a href=\"#4_Ornek_Senaryo_WordPress_Child_Tema_veya_Eklenti_Deployu\"><span class=\"toc_number toc_depth_2\">3.4<\/span> 4. \u00d6rnek Senaryo: WordPress Child Tema veya Eklenti Deploy\u2019u<\/a><\/li><li><a href=\"#5_StagingCanli_Ayrimi_ve_cPanelde_Alt_Alan_Adi\"><span class=\"toc_number toc_depth_2\">3.5<\/span> 5. Staging\u2013Canl\u0131 Ayr\u0131m\u0131 ve cPanel\u2019de Alt Alan Ad\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Plesk_Uzerinde_Git_ile_Otomatik_Deploy\"><span class=\"toc_number toc_depth_1\">4<\/span> Plesk \u00dczerinde Git ile Otomatik Deploy<\/a><ul><li><a href=\"#1_Pleskte_Git_Deposu_Olusturma\"><span class=\"toc_number toc_depth_2\">4.1<\/span> 1. Plesk\u2019te Git Deposu Olu\u015fturma<\/a><\/li><li><a href=\"#2_Deploy_Modunu_Secmek_Manuel_mi_Otomatik_mi\"><span class=\"toc_number toc_depth_2\">4.2<\/span> 2. Deploy Modunu Se\u00e7mek: Manuel mi, Otomatik mi?<\/a><\/li><li><a href=\"#3_PHPLaravel_Ornegi_Pleskte_Deploy_Sonrasi_Komutlar\"><span class=\"toc_number toc_depth_2\">4.3<\/span> 3. PHP\/Laravel \u00d6rne\u011fi: Plesk\u2019te Deploy Sonras\u0131 Komutlar<\/a><\/li><li><a href=\"#4_Pleskte_Staging_Ortami_ve_Branch_Yonetimi\"><span class=\"toc_number toc_depth_2\">4.4<\/span> 4. Plesk\u2019te Staging Ortam\u0131 ve Branch Y\u00f6netimi<\/a><\/li><\/ul><\/li><li><a href=\"#VPS_Uzerinde_Git_Tabanli_Deploy_Mimarisi\"><span class=\"toc_number toc_depth_1\">5<\/span> VPS \u00dczerinde Git Tabanl\u0131 Deploy Mimarisi<\/a><ul><li><a href=\"#1_Deploy_Kullanicisi_Olusturma\"><span class=\"toc_number toc_depth_2\">5.1<\/span> 1. Deploy Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/a><\/li><li><a href=\"#2_Bare_Repo_ve_Surum_Klasorleri\"><span class=\"toc_number toc_depth_2\">5.2<\/span> 2. Bare Repo ve S\u00fcr\u00fcm Klas\u00f6rleri<\/a><\/li><li><a href=\"#3_Zero-Downtimea_Yakin_Deploy_Icin_post-receive_Hook\"><span class=\"toc_number toc_depth_2\">5.3<\/span> 3. Zero-Downtime\u2019a Yak\u0131n Deploy \u0130\u00e7in post-receive Hook<\/a><\/li><li><a href=\"#4_Lokal_Repodan_VPSe_Push\"><span class=\"toc_number toc_depth_2\">5.4<\/span> 4. Lokal Repo\u2019dan VPS\u2019e Push<\/a><\/li><li><a href=\"#5_Geri_Donus_Rollback_Stratejisi\"><span class=\"toc_number toc_depth_2\">5.5<\/span> 5. Geri D\u00f6n\u00fc\u015f (Rollback) Stratejisi<\/a><\/li><\/ul><\/li><li><a href=\"#Gizli_Bilgiler_env_ve_Guvenlik_Konulari\"><span class=\"toc_number toc_depth_1\">6<\/span> Gizli Bilgiler, .env ve G\u00fcvenlik Konular\u0131<\/a><ul><li><a href=\"#1_gitignore_ve_Ortam_Dosyalari\"><span class=\"toc_number toc_depth_2\">6.1<\/span> 1. .gitignore ve Ortam Dosyalar\u0131<\/a><\/li><li><a href=\"#2_Dosya_Izinleri_ve_Sahiplik\"><span class=\"toc_number toc_depth_2\">6.2<\/span> 2. Dosya \u0130zinleri ve Sahiplik<\/a><\/li><li><a href=\"#3_SSH_Anahtarlari_ve_Yetkiler\"><span class=\"toc_number toc_depth_2\">6.3<\/span> 3. SSH Anahtarlar\u0131 ve Yetkiler<\/a><\/li><\/ul><\/li><li><a href=\"#Hangi_Senaryoda_cPanel_Plesk_veya_VPS_Daha_Mantikli\"><span class=\"toc_number toc_depth_1\">7<\/span> Hangi Senaryoda cPanel, Plesk veya VPS Daha Mant\u0131kl\u0131?<\/a><ul><li><a href=\"#cPanel_ile_Git_Deploy_Ne_Zaman_Yeterli\"><span class=\"toc_number toc_depth_2\">7.1<\/span> cPanel ile Git Deploy Ne Zaman Yeterli?<\/a><\/li><li><a href=\"#Plesk_ile_Git_Deploy_Hangi_Projelere_Uygun\"><span class=\"toc_number toc_depth_2\">7.2<\/span> Plesk ile Git Deploy Hangi Projelere Uygun?<\/a><\/li><li><a href=\"#Tam_Esneklik_Icin_VPSte_Git_Deploy\"><span class=\"toc_number toc_depth_2\">7.3<\/span> Tam Esneklik \u0130\u00e7in VPS\u2019te Git Deploy<\/a><\/li><\/ul><\/li><li><a href=\"#Sonuc_Git_ile_Otomatik_Deployu_Bugun_Kurmaya_Deger_mi\"><span class=\"toc_number toc_depth_1\">8<\/span> Sonu\u00e7: Git ile Otomatik Deploy\u2019u Bug\u00fcn Kurmaya De\u011fer mi?<\/a><\/li><\/ul><\/div>\n<h2><span id=\"Git_ile_Otomatik_Deploy_Kurmanin_Avantajlari\">Git ile Otomatik Deploy Kurman\u0131n Avantajlar\u0131<\/span><\/h2>\n<p>\u00d6nce motivasyonu netle\u015ftirelim: Neden Git ile otomatik deploy i\u00e7in zaman harcamaya de\u011fer?<\/p>\n<ul>\n<li><strong>Tekrarlanabilirlik:<\/strong> Ayn\u0131 komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda her zaman ayn\u0131 sonucu al\u0131rs\u0131n\u0131z. \u201cBen bunu ge\u00e7en sefer nas\u0131l yapm\u0131\u015ft\u0131m?\u201d sorusu ortadan kalkar.<\/li>\n<li><strong>Geri d\u00f6n\u00fc\u015f (rollback) kolayl\u0131\u011f\u0131:<\/strong> Yeni s\u00fcr\u00fcm sorun \u00e7\u0131kard\u0131ysa, bir \u00f6nceki etikete veya komite d\u00f6nmek birka\u00e7 komutla m\u00fcmk\u00fcnd\u00fcr.<\/li>\n<li><strong>\u0130nsan hatas\u0131n\u0131 azaltma:<\/strong> FTP ile yanl\u0131\u015f klas\u00f6re dosya atmak, baz\u0131 dosyalar\u0131 unutmak, staging kodunu canl\u0131ya kar\u0131\u015ft\u0131rmak gibi riskler ciddi oranda d\u00fc\u015fer.<\/li>\n<li><strong>S\u00fcr\u00fcm takibi:<\/strong> Canl\u0131da hangi commit\u2019in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 bilirsiniz. Hata takibi ve log incelemesi \u00e7ok daha kolay hale gelir.<\/li>\n<li><strong>Tak\u0131m \u00e7al\u0131\u015fmas\u0131:<\/strong> Geli\u015ftiriciler ortak Git deposuna push eder, deploy s\u00fcreci standart bir pipeline \u00fczerinden akar; ki\u015fiye ba\u011f\u0131ml\u0131l\u0131k azal\u0131r.<\/li>\n<li><strong>Staging\u2013canl\u0131 ayr\u0131m\u0131:<\/strong> Ayn\u0131 Git deposundan staging ve prod ortamlara, farkl\u0131 branch\u2019ler veya tag\u2019ler \u00fczerinden kontrol\u00fc sizde olan bir ak\u0131\u015f kurabilirsiniz. Bu konuyu daha \u00f6nce <a href=\"https:\/\/www.dchost.com\/blog\/gelistirme-staging-canli-yolculugu-wordpress-ve-laravelde-sifir-kesinti-dagitim-nasil-gercekten-olur\/\">geli\u015ftirme\u2013staging\u2013canl\u0131 yolculu\u011fu<\/a> yaz\u0131m\u0131zda ayr\u0131nt\u0131l\u0131 ele alm\u0131\u015ft\u0131k.<\/li>\n<\/ul>\n<p>K\u0131sacas\u0131, Git ile otomatik deploy; h\u0131z kadar <strong>g\u00fcven<\/strong> ve &lt;strongizlenebilirlik<\/strong> kazand\u0131r\u0131r. \u00d6zellikle e-ticaret, yo\u011fun trafikli blog\/haber siteleri veya SaaS uygulamalar\u0131 i\u00e7in bu yap\u0131 art\u0131k \u201cl\u00fcks\u201d de\u011fil, neredeyse zorunluluk haline geldi.<\/p>\n<h2><span id=\"Temel_Mimari_Git_Deposu_ve_Sunucu_Arasindaki_Akis\">Temel Mimari: Git Deposu ve Sunucu Aras\u0131ndaki Ak\u0131\u015f<\/span><\/h2>\n<p>cPanel, Plesk veya \u00e7\u0131plak bir VPS kullan\u0131yor olman\u0131zdan ba\u011f\u0131ms\u0131z olarak, Git tabanl\u0131 deploy\u2019un temel fikri ayn\u0131d\u0131r:<\/p>\n<ol>\n<li>Geli\u015ftiriciler <strong>lokal repo<\/strong> \u00fczerinde \u00e7al\u0131\u015f\u0131r ve de\u011fi\u015fiklikleri commit eder.<\/li>\n<li>De\u011fi\u015fiklikler bir <strong>merkezi uzak repo<\/strong>ya (\u00f6rne\u011fin kendi Git sunucunuz veya Git hizmeti) push edilir.<\/li>\n<li>Sunucuda, bu merkezi repoya ba\u011fl\u0131 bir <strong>deploy repo<\/strong> bulunur.<\/li>\n<li>Bir hook, cron job veya panel \u00f6zelli\u011fi sayesinde, yeni commit geldi\u011finde sunucu taraf\u0131ndaki kodlar g\u00fcncellenir.<\/li>\n<\/ol>\n<p>Bu ak\u0131\u015f\u0131n, panel t\u00fcr\u00fcne g\u00f6re farkl\u0131 uygulan\u0131\u015f bi\u00e7imleri vard\u0131r:<\/p>\n<ul>\n<li><strong>cPanel\u2019de:<\/strong> Genellikle SSH \u00fczerinden bir bare repo ve <code>post-receive<\/code> hook ile \u00e7al\u0131\u015f\u0131r\u0131z.<\/li>\n<li><strong>Plesk\u2019te:<\/strong> Dahili Git uzant\u0131s\u0131, push geldi\u011finde otomatik olarak <code>git pull<\/code> ve deploy yapabilir.<\/li>\n<li><strong>VPS\u2019te:<\/strong> Tamamen size ait bir mimari kurar, hatta <a href=\"https:\/\/www.dchost.com\/blog\/vpse-sifir-kesinti-ci-cd-nasil-kurulur-rsync-sembolik-surumler-ve-systemd-ile-sicacik-bir-yolculuk\/\">s\u0131f\u0131r kesinti CI\/CD<\/a> gibi geli\u015fmi\u015f senaryolar\u0131 dahi uygulayabilirsiniz.<\/li>\n<\/ul>\n<p>\u015eimdi her bir ortam i\u00e7in somut ad\u0131mlara ge\u00e7elim.<\/p>\n<h2><span id=\"cPanel_Uzerinde_Git_ile_Otomatik_Deploy\">cPanel \u00dczerinde Git ile Otomatik Deploy<\/span><\/h2>\n<p>Payla\u015f\u0131ml\u0131 hosting kullan\u0131yorsan\u0131z veya DCHost \u00fczerinde cPanel\u2019li bir sunucunuz varsa, genellikle SSH eri\u015fiminiz ve home dizininde \u00e7al\u0131\u015fabilece\u011finiz alan\u0131n\u0131z vard\u0131r. Bu, Git ile otomatik deploy kurmak i\u00e7in fazlas\u0131yla yeterli.<\/p>\n<h3><span id=\"1_cPanelde_Dizayn_Bare_Repo_ve_Calisma_Dizini\">1. cPanel\u2019de Dizayn: Bare Repo ve \u00c7al\u0131\u015fma Dizini<\/span><\/h3>\n<p>Tipik senaryo \u015f\u00f6yle olabilir:<\/p>\n<ul>\n<li><strong>Alan ad\u0131n\u0131z\u0131n dok\u00fcman k\u00f6k\u00fc:<\/strong> <code>\/home\/kullanici\/public_html<\/code><\/li>\n<li><strong>Bare repo:<\/strong> <code>\/home\/kullanici\/repos\/proje.git<\/code><\/li>\n<\/ul>\n<p>\u00d6nce SSH ile hesab\u0131n\u0131za ba\u011flan\u0131n ve repo klas\u00f6r\u00fcn\u00fc olu\u015fturun:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">mkdir -p ~\/repos\/proje.git\ncd ~\/repos\/proje.git\ngit init --bare\n<\/code><\/pre>\n<p><strong>Bare repo<\/strong>, \u00e7al\u0131\u015fma dosyas\u0131 bar\u0131nd\u0131rmaz; yaln\u0131zca Git objelerini i\u00e7erir. Bu repo, lokal makinenizden push alacak \u201cmerkez\u201d g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h3><span id=\"2_post-receive_Hook_ile_Otomatik_Cekme_ve_Deploy\">2. post-receive Hook ile Otomatik \u00c7ekme ve Deploy<\/span><\/h3>\n<p>\u015eimdi sunucuda, bare repo\u2019ya her push geldi\u011finde kodu <code>public_html<\/code> i\u00e7ine a\u00e7acak bir hook yazal\u0131m. <code>hooks<\/code> klas\u00f6r\u00fcne girin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd ~\/repos\/proje.git\/hooks\nnano post-receive\n<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fe \u015fu basit script\u2019i ekleyebilirsiniz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">#!\/bin\/bash\nGIT_WORK_TREE=\/home\/kullanici\/public_html\nGIT_DIR=\/home\/kullanici\/repos\/proje.git\n\ncd &quot;$GIT_WORK_TREE&quot;\n# Gerekirse bak\u0131m moduna al, cache temizle vb.\n\/usr\/bin\/git --work-tree=&quot;$GIT_WORK_TREE&quot; --git-dir=&quot;$GIT_DIR&quot; checkout -f main\n<\/code><\/pre>\n<p>Burada:<\/p>\n<ul>\n<li><code>main<\/code> branch\u2019ini canl\u0131ya al\u0131yoruz (siz <code>master<\/code> veya farkl\u0131 bir branch kullan\u0131yorsan\u0131z onu yaz\u0131n).<\/li>\n<li><code>checkout -f<\/code> ile \u00e7al\u0131\u015fma dizinini zorla g\u00fcncelliyoruz; local de\u011fi\u015fiklik kalmamas\u0131n\u0131 istiyoruz.<\/li>\n<\/ul>\n<p>Dosyay\u0131 kaydedip, \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">chmod +x post-receive\n<\/code><\/pre>\n<h3><span id=\"3_Lokal_Gelistirme_Ortamini_Sunucuya_Baglama\">3. Lokal Geli\u015ftirme Ortam\u0131n\u0131 Sunucuya Ba\u011flama<\/span><\/h3>\n<p>Art\u0131k lokal bilgisayar\u0131n\u0131zdaki projeyi bu bare repo\u2019ya push edebiliriz. Lokal repoda a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">git remote add production ssh:\/\/kullanici@sunucu-adresi:22\/home\/kullanici\/repos\/proje.git\n<\/code><\/pre>\n<p>\u0130lk deploy i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">git push production main\n<\/code><\/pre>\n<p>Bu push i\u015flemi tamamland\u0131\u011f\u0131nda, sunucudaki <code>post-receive<\/code> hook tetiklenecek ve kodunuz <code>public_html<\/code> i\u00e7ine a\u00e7\u0131lacakt\u0131r. Bundan sonra her <code>git push production main<\/code> komutu, canl\u0131ya deploy anlam\u0131na gelir.<\/p>\n<h3><span id=\"4_Ornek_Senaryo_WordPress_Child_Tema_veya_Eklenti_Deployu\">4. \u00d6rnek Senaryo: WordPress Child Tema veya Eklenti Deploy\u2019u<\/span><\/h3>\n<p>WordPress tabanl\u0131 bir siteniz varsa, t\u00fcm WordPress \u00e7ekirde\u011fini de\u011fil; s\u0131k de\u011fi\u015fen k\u0131s\u0131mlar\u0131 Git ile y\u00f6netmek daha pratik olabilir:<\/p>\n<ul>\n<li><strong>Child tema<\/strong> klas\u00f6r\u00fcn\u00fcz\u00fc (<code>wp-content\/themes\/proje-child<\/code>) Git ile takip edebilirsiniz.<\/li>\n<li>\n    <strong>\u00d6zel bir eklenti<\/strong> (\u00f6rne\u011fin siteye \u00f6zel fonksiyonlar\u0131n\u0131z\u0131 i\u00e7eren <code>wp-content\/plugins\/proje-custom<\/code>) i\u00e7in ayr\u0131 bir repo olu\u015fturabilirsiniz.\n  <\/li>\n<\/ul>\n<p>Bu yakla\u015f\u0131m, WordPress \u00e7ekirde\u011finin veya \u00fc\u00e7\u00fcnc\u00fc parti eklentilerin g\u00fcncellemelerini panelden y\u00f6netmenize imk\u00e2n tan\u0131rken, sizin kodunuzu Git ile g\u00fcvenle ta\u015f\u0131man\u0131z\u0131 sa\u011flar. WordPress g\u00fcncellemeleri taraf\u0131nda ise <a href=\"https:\/\/www.dchost.com\/blog\/woocommerce-guncellemelerini-guvenle-yapmak\/\">WooCommerce g\u00fcncellemelerini g\u00fcvenle yapmak<\/a> yaz\u0131m\u0131zdaki y\u00f6ntemleri Git deploy ile birle\u015ftirerek daha g\u00fcvenli bir s\u00fcre\u00e7 kurabilirsiniz.<\/p>\n<h3><span id=\"5_StagingCanli_Ayrimi_ve_cPanelde_Alt_Alan_Adi\">5. Staging\u2013Canl\u0131 Ayr\u0131m\u0131 ve cPanel\u2019de Alt Alan Ad\u0131<\/span><\/h3>\n<p>\u00c7o\u011fu projede, \u00f6nce staging ortamda test edip sonra canl\u0131ya almak isteyeceksiniz. cPanel\u2019de s\u0131k kullan\u0131lan model:<\/p>\n<ul>\n<li><code>staging.ornekalanadi.com<\/code> i\u00e7in bir alt alan ad\u0131 ve ayr\u0131 dok\u00fcman k\u00f6k\u00fc a\u00e7mak.<\/li>\n<li>Ayn\u0131 bare repo\u2019dan iki farkl\u0131 working copy yaratmak: biri <code>staging<\/code> klas\u00f6r\u00fcne, di\u011feri <code>public_html<\/code> i\u00e7ine.<\/li>\n<li><code>post-receive<\/code> i\u00e7inde branch\u2019e g\u00f6re farkl\u0131 dizinlere deploy yapmak (\u00f6rne\u011fin <code>develop<\/code> \u2192 staging, <code>main<\/code> \u2192 prod).<\/li>\n<\/ul>\n<p>WordPress taraf\u0131nda staging ortam\u0131 kurma konusunda daha detayl\u0131 bir rehbere ihtiyac\u0131n\u0131z varsa, <a href=\"https:\/\/www.dchost.com\/blog\/wordpress-staging-ortami-nasil-kurulur-cpanelde-alt-alan-adi-klonlama-ve-guvenli-yayina-alma\/\">cPanel\u2019de alt alan ad\u0131yla staging ortam\u0131<\/a> anlat\u0131m\u0131na g\u00f6z atabilirsiniz.<\/p>\n<h2><span id=\"Plesk_Uzerinde_Git_ile_Otomatik_Deploy\">Plesk \u00dczerinde Git ile Otomatik Deploy<\/span><\/h2>\n<p>Plesk, Git entegrasyonunu g\u00f6m\u00fcl\u00fc bir \u00f6zellik olarak sundu\u011fu i\u00e7in, pek \u00e7ok durumda hook veya ek script yazman\u0131za bile gerek kalmaz. DCHost \u00fczerinde Plesk panelli bir VPS veya <a href=\"https:\/\/www.dchost.com\/tr\/fiziksel-sunucu\">dedicated sunucu<\/a>nuz varsa, a\u015fa\u011f\u0131daki ad\u0131mlarla pratik bir otomatik deploy kurabilirsiniz.<\/p>\n<h3><span id=\"1_Pleskte_Git_Deposu_Olusturma\">1. Plesk\u2019te Git Deposu Olu\u015fturma<\/span><\/h3>\n<p>Plesk kontrol paneline giri\u015f yapt\u0131ktan sonra:<\/p>\n<ol>\n<li>\u0130lgili domain\u2019in \u00fczerine t\u0131klay\u0131n.<\/li>\n<li><strong>Git<\/strong> veya <strong>Git Repositories<\/strong> men\u00fcs\u00fcn\u00fc a\u00e7\u0131n.<\/li>\n<li><strong>\u201cAdd Repository\u201d<\/strong> ile yeni bir repo tan\u0131mlay\u0131n.<\/li>\n<\/ol>\n<p>Burada iki ana se\u00e7enek g\u00f6receksiniz:<\/p>\n<ul>\n<li><strong>Remote Git repository<\/strong>: Kendi Git sunucunuzdan veya bir Git hizmetinden \u00e7ekmek i\u00e7in.<\/li>\n<li><strong>Local Git repository<\/strong>: Sunucunun kendisinde repo tutmak i\u00e7in (\u00e7o\u011fu zaman remote ile \u00e7al\u0131\u015fmak daha pratiktir).<\/li>\n<\/ul>\n<p>Genellikle, geli\u015ftiricilerin push etti\u011fi merkezi repoyu <strong>remote<\/strong> olarak Plesk\u2019e tan\u0131mlay\u0131p, oradan otomatik <code>git pull<\/code> yapt\u0131rmak en temiz yoldur.<\/p>\n<h3><span id=\"2_Deploy_Modunu_Secmek_Manuel_mi_Otomatik_mi\">2. Deploy Modunu Se\u00e7mek: Manuel mi, Otomatik mi?<\/span><\/h3>\n<p>Plesk\u2019te repo tan\u0131mlarken veya sonras\u0131nda ayarlarda \u015fu se\u00e7enekleri g\u00f6rebilirsiniz:<\/p>\n<ul>\n<li><strong>Deploy to the domain\u2019s document root<\/strong>: Kod do\u011frudan <code>httpdocs<\/code> gibi dok\u00fcman k\u00f6k\u00fcne a\u00e7\u0131l\u0131r.<\/li>\n<li><strong>Deploy to a subdirectory<\/strong>: Uygulaman\u0131z ba\u015fka bir klas\u00f6re a\u00e7\u0131l\u0131r; \u00f6rne\u011fin <code>app<\/code>, <code>api<\/code> vb.<\/li>\n<li><strong>By clicking \u201cDeploy\u201d<\/strong>: Manuel deploy; Plesk aray\u00fcz\u00fcnde butona bas\u0131nca yay\u0131nlan\u0131r.<\/li>\n<li><strong>On push<\/strong>: Git push geldi\u011finde otomatik deploy; genellikle webhook veya Plesk\u2019in polling mekanizmas\u0131 ile \u00e7al\u0131\u015f\u0131r.<\/li>\n<\/ul>\n<p>Bizim hedefimiz otomatik deploy oldu\u011fu i\u00e7in, \u00e7o\u011funlukla <strong>\u201cOn push\u201d<\/strong> modunu se\u00e7mek isteyeceksiniz. Bunun i\u00e7in merkezi repo taraf\u0131nda Plesk\u2019in verdi\u011fi URL\u2019ye bir webhook tan\u0131mlaman\u0131z gerekir. B\u00f6ylece her push sonras\u0131 Plesk haberdar olur ve otomatik olarak <code>git pull<\/code> + deploy yapar.<\/p>\n<h3><span id=\"3_PHPLaravel_Ornegi_Pleskte_Deploy_Sonrasi_Komutlar\">3. PHP\/Laravel \u00d6rne\u011fi: Plesk\u2019te Deploy Sonras\u0131 Komutlar<\/span><\/h3>\n<p>Plesk\u2019in Git entegrasyonunda, deploy sonras\u0131 otomatik \u00e7al\u0131\u015facak komutlar tan\u0131mlayabilirsiniz. \u00d6rne\u011fin bir Laravel uygulamas\u0131 i\u00e7in her deploy sonras\u0131:<\/p>\n<ul>\n<li><code>composer install --no-dev --optimize-autoloader<\/code><\/li>\n<li><code>php artisan migrate --force<\/code><\/li>\n<li><code>php artisan config:cache<\/code><\/li>\n<\/ul>\n<p>gibi komutlar\u0131 tetiklemek isteyebilirsiniz.<\/p>\n<p>Plesk Git ayarlar\u0131nda <strong>\u201cAdditional deployment actions\u201d<\/strong> veya benzeri bir alan g\u00f6r\u00fcyorsan\u0131z, bu komutlar\u0131 buraya ekleyebilirsiniz. Daha detayl\u0131 bir Laravel prod ortam rehberi ar\u0131yorsan\u0131z, <a href=\"https:\/\/www.dchost.com\/blog\/laravel-prod-ortam-optimizasyonu-nasil-yapilir-php%E2%80%91fpm-opcache-octane-queue-horizon-ve-redisi-el-ele-calistirmak\/\">Laravel prod ortam optimizasyonu<\/a> yaz\u0131m\u0131z\u0131 da bu yap\u0131 ile birlikte okuyabilirsiniz.<\/p>\n<h3><span id=\"4_Pleskte_Staging_Ortami_ve_Branch_Yonetimi\">4. Plesk\u2019te Staging Ortam\u0131 ve Branch Y\u00f6netimi<\/span><\/h3>\n<p>Plesk, ayn\u0131 domain i\u00e7in birden fazla Git repo veya ayn\u0131 repo i\u00e7in farkl\u0131 hedef dizinler kullanman\u0131za izin verir. Bu sayede:<\/p>\n<ul>\n<li><strong>main<\/strong> branch\u2019ini canl\u0131ya,<\/li>\n<li><strong>develop<\/strong> branch\u2019ini staging alt alan\u0131na,<\/li>\n<\/ul>\n<p>deploy edecek iki ayr\u0131 repo tan\u0131m\u0131 olu\u015fturabilirsiniz. Staging domain\u2019inizi \u00f6rne\u011fin <code>staging.ornekalanadi.com<\/code> olarak kurgulay\u0131p, dok\u00fcman k\u00f6k\u00fcn\u00fc farkl\u0131 bir klas\u00f6re ayarlayarak \u00fcretim \u00f6ncesi son kontrol ortam\u0131n\u0131 kurabilirsiniz.<\/p>\n<h2><span id=\"VPS_Uzerinde_Git_Tabanli_Deploy_Mimarisi\">VPS \u00dczerinde Git Tabanl\u0131 Deploy Mimarisi<\/span><\/h2>\n<p>VPS veya dedicated sunucuda tam yetkiniz oldu\u011funda, Git deploy mimarisini \u00e7ok daha esnek ve g\u00fc\u00e7l\u00fc \u015fekilde tasarlayabilirsiniz. DCHost\u2019un NVMe diskli Linux VPS\u2019leri \u00fczerinde en s\u0131k kurdu\u011fumuz yap\u0131; \u00f6zel bir deploy kullan\u0131c\u0131s\u0131, bare repo, \u00e7al\u0131\u015fma dizininde s\u00fcr\u00fcm klas\u00f6rleri ve sembolik link ile <strong>s\u0131f\u0131ra yak\u0131n kesinti<\/strong> sa\u011flayan bir mimari.<\/p>\n<h3><span id=\"1_Deploy_Kullanicisi_Olusturma\">1. Deploy Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/span><\/h3>\n<p>\u00d6nce root ile ba\u011flan\u0131p, ayr\u0131 bir kullan\u0131c\u0131 a\u00e7al\u0131m:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">adduser deploy\nusermod -aG www-data deploy   # web sunucusu grubuna ekleyebilirsiniz\n<\/code><\/pre>\n<p>Ard\u0131ndan SSH anahtar\u0131n\u0131z\u0131 bu kullan\u0131c\u0131n\u0131n <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131na ekleyin. B\u00f6ylece repo push\/pull i\u015flemlerini <strong>root olmadan<\/strong> y\u00f6netebilirsiniz.<\/p>\n<h3><span id=\"2_Bare_Repo_ve_Surum_Klasorleri\">2. Bare Repo ve S\u00fcr\u00fcm Klas\u00f6rleri<\/span><\/h3>\n<p>Deploy kullan\u0131c\u0131s\u0131yla giri\u015f yap\u0131p dizinleri olu\u015ftural\u0131m:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">mkdir -p ~\/repos\/proje.git\nmkdir -p ~\/apps\/proje\/releases\nmkdir -p ~\/apps\/proje\/shared\ncd ~\/repos\/proje.git\ngit init --bare\n<\/code><\/pre>\n<p>Burada:<\/p>\n<ul>\n<li><code>repos\/proje.git<\/code>: Bare repo; push buraya gelir.<\/li>\n<li><code>apps\/proje\/releases<\/code>: Her deploy i\u00e7in ayr\u0131 bir s\u00fcr\u00fcm klas\u00f6r\u00fc.<\/li>\n<li><code>apps\/proje\/shared<\/code>: Log, upload gibi payla\u015f\u0131lan klas\u00f6rler.<\/li>\n<\/ul>\n<h3><span id=\"3_Zero-Downtimea_Yakin_Deploy_Icin_post-receive_Hook\">3. Zero-Downtime\u2019a Yak\u0131n Deploy \u0130\u00e7in post-receive Hook<\/span><\/h3>\n<p><code>post-receive<\/code> hook\u2019unda, her deploy\u2019da yeni bir s\u00fcr\u00fcm klas\u00f6r\u00fc olu\u015fturup sembolik link\u2019i g\u00fcncelleyebilirsiniz. \u00d6rne\u011fin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd ~\/repos\/proje.git\/hooks\nnano post-receive\n<\/code><\/pre>\n<p>\u0130\u00e7erik:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">#!\/bin\/bash\nset -e\n\nAPP_DIR=\/home\/deploy\/apps\/proje\nRELEASES_DIR=&quot;$APP_DIR\/releases&quot;\nSHARED_DIR=&quot;$APP_DIR\/shared&quot;\nNOW=$(date +%Y%m%d%H%M%S)\nNEW_RELEASE=&quot;$RELEASES_DIR\/$NOW&quot;\n\nmkdir -p &quot;$NEW_RELEASE&quot;\nGIT_WORK_TREE=&quot;$NEW_RELEASE&quot; GIT_DIR=\/home\/deploy\/repos\/proje.git \n  git checkout -f main\n\n# Payla\u015f\u0131lan klas\u00f6rleri ba\u011fla (\u00f6rnek)\nln -sfn &quot;$SHARED_DIR\/storage&quot; &quot;$NEW_RELEASE\/storage&quot;\n\n# Gerekirse composer\/npm, migrate vs.\ncd &quot;$NEW_RELEASE&quot;\n# composer install --no-dev --optimize-autoloader\n# php artisan migrate --force\n\n# Sembolik link ile canl\u0131 s\u00fcr\u00fcm\u00fc g\u00fcncelle\nln -sfn &quot;$NEW_RELEASE&quot; &quot;$APP_DIR\/current&quot;\n<\/code><\/pre>\n<p>Dosyay\u0131 \u00e7al\u0131\u015ft\u0131r\u0131labilir yap\u0131n:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">chmod +x post-receive\n<\/code><\/pre>\n<p>Art\u0131k <code>~\/apps\/proje\/current<\/code> her zaman en g\u00fcncel s\u00fcr\u00fcm\u00fc i\u015faret ediyor olacak. Nginx veya Apache sanal host\u2019unuzu bu <code>current<\/code> klas\u00f6r\u00fcn\u00fc dok\u00fcman k\u00f6k\u00fc olarak kullanacak \u015fekilde ayarlarsan\u0131z, deploy s\u0131ras\u0131nda mevcut istekler eski s\u00fcr\u00fcmden yan\u0131tlan\u0131rken, yeni istekler saniyeler i\u00e7inde yeni s\u00fcr\u00fcme y\u00f6nlenir. Bu mimariyi daha da detayland\u0131rmak isterseniz, <a href=\"https:\/\/www.dchost.com\/blog\/vpse-sifir-kesinti-ci-cd-nasil-kurulur-rsync-sembolik-surumler-ve-systemd-ile-sicacik-bir-yolculuk\/\">s\u0131f\u0131r kesinti CI\/CD rehberimizi<\/a> mutlaka inceleyin.<\/p>\n<h3><span id=\"4_Lokal_Repodan_VPSe_Push\">4. Lokal Repo\u2019dan VPS\u2019e Push<\/span><\/h3>\n<p>Lokal geli\u015fim ortam\u0131n\u0131zda, VPS\u2019e bir remote ekleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">git remote add production ssh:\/\/deploy@vps-ip-adresi\/home\/deploy\/repos\/proje.git\n<\/code><\/pre>\n<p>\u0130lk deploy:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">git push production main\n<\/code><\/pre>\n<p>Bu push tamamland\u0131\u011f\u0131nda <code>post-receive<\/code> tetiklenecek, yeni bir s\u00fcr\u00fcm klas\u00f6r\u00fc olu\u015fturulacak ve <code>current<\/code> link\u2019i g\u00fcncellenecek. B\u00f6ylece manuel FTP veya kopyalama ile u\u011fra\u015fmadan, tek komutla canl\u0131ya kod g\u00f6ndermi\u015f olursunuz.<\/p>\n<h3><span id=\"5_Geri_Donus_Rollback_Stratejisi\">5. Geri D\u00f6n\u00fc\u015f (Rollback) Stratejisi<\/span><\/h3>\n<p>Her deploy\u2019un kendi klas\u00f6r\u00fcnde durmas\u0131, rollback\u2019i de son derece basit hale getirir. \u00d6rne\u011fin bir \u00f6nceki klas\u00f6re d\u00f6nmek i\u00e7in:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">cd \/home\/deploy\/apps\/proje\/releases\nls -1    # S\u00fcr\u00fcm klas\u00f6rlerini g\u00f6r\u00fcn\n<\/code><\/pre>\n<p>Ard\u0131ndan istedi\u011finiz s\u00fcr\u00fcm\u00fc se\u00e7ip:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">ln -sfn \/home\/deploy\/apps\/proje\/releases\/20241202153000 \/home\/deploy\/apps\/proje\/current\n<\/code><\/pre>\n<p>komutuyla sembolik link\u2019i geriye alabilirsiniz. \u0130sterseniz bu i\u015flemi k\u00fc\u00e7\u00fck bir <code>rollback.sh<\/code> script\u2019i haline getirip, etiket ad\u0131yla otomatik e\u015fle\u015ftirecek bir sistem de geli\u015ftirebilirsiniz.<\/p>\n<h2><span id=\"Gizli_Bilgiler_env_ve_Guvenlik_Konulari\">Gizli Bilgiler, .env ve G\u00fcvenlik Konular\u0131<\/span><\/h2>\n<p>Git ile otomatik deploy kurarken en s\u0131k g\u00f6rd\u00fc\u011f\u00fcm\u00fcz hatalardan biri, <strong>.env dosyas\u0131 gibi gizli bilgilerin<\/strong> repoya dahil edilmesi. Bu, hem g\u00fcvenlik hem de operasyonel a\u00e7\u0131dan ciddi risk olu\u015fturur.<\/p>\n<h3><span id=\"1_gitignore_ve_Ortam_Dosyalari\">1. .gitignore ve Ortam Dosyalar\u0131<\/span><\/h3>\n<p>\u00d6ncelikle <code>.gitignore<\/code> dosyan\u0131za en az\u0131ndan \u015funlar\u0131 ekleyin:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">.env\n.env.*\n\/storage\/\n\/node_modules\/\n\/vendor\/\n<\/code><\/pre>\n<p>.env dosyas\u0131n\u0131 her ortamda (lokal, staging, prod) ayr\u0131 ayr\u0131 olu\u015fturun ve Git\u2019e asla eklemeyin. VPS taraf\u0131nda ortam de\u011fi\u015fkenlerini:<\/p>\n<ul>\n<li>systemd unit dosyas\u0131nda <code>Environment=<\/code> sat\u0131rlar\u0131yla,<\/li>\n<li>veya web sunucusu (Nginx\/Apache) konfig\u00fcrasyonunda,<\/li>\n<\/ul>\n<p>tan\u0131mlamak daha g\u00fcvenlidir. VPS\u2019te gizli bilgiler i\u00e7in daha geli\u015fmi\u015f bir yakla\u015f\u0131m ar\u0131yorsan\u0131z, <a href=\"https:\/\/www.dchost.com\/blog\/vpste-secrets-yonetimi-nasil-tatli-tatli-cozulur-sops-age-gitops-akisi-systemd-ve-rotasyon\/\">VPS\u2019te secrets y\u00f6netimi<\/a> rehberimiz tam bu konuya odaklan\u0131yor.<\/p>\n<h3><span id=\"2_Dosya_Izinleri_ve_Sahiplik\">2. Dosya \u0130zinleri ve Sahiplik<\/span><\/h3>\n<p>Deploy sonras\u0131nda dosya izinlerinin do\u011fru olmas\u0131, \u00f6zellikle PHP tabanl\u0131 projelerde kritik \u00f6nem ta\u015f\u0131r:<\/p>\n<ul>\n<li>Uygulama dosyalar\u0131 genellikle <strong>okunabilir<\/strong> olmal\u0131; yaz\u0131labilir olmamal\u0131.<\/li>\n<li>Cache, log, upload klas\u00f6rleri ise web sunucusunun yazma iznine sahip olmal\u0131.<\/li>\n<\/ul>\n<p>VPS senaryosunda, <code>post-receive<\/code> i\u00e7inde <code>chown<\/code> ve <code>chmod<\/code> komutlar\u0131 ile bu izinleri her deploy sonras\u0131 otomatik olarak d\u00fczenleyebilirsiniz.<\/p>\n<h3><span id=\"3_SSH_Anahtarlari_ve_Yetkiler\">3. SSH Anahtarlar\u0131 ve Yetkiler<\/span><\/h3>\n<p>Git ile deploy\u2019un en g\u00fcvenli y\u00f6ntemi, <strong>SSH anahtar\u0131<\/strong> kullanmakt\u0131r. Payla\u015f\u0131ml\u0131 hosting veya cPanel senaryosunda:<\/p>\n<ul>\n<li>cPanel\u2019in \u201cSSH Access\u201d b\u00f6l\u00fcm\u00fcnden public key\u2019inizi ekleyin.<\/li>\n<li>Gerekirse anahtar\u0131 \u201cauthorized\u201d hale getirin.<\/li>\n<li>\u015eifreli root\/ana kullan\u0131c\u0131 parolas\u0131 ile de\u011fil, sadece anahtar ile giri\u015f yapmaya \u00e7al\u0131\u015f\u0131n.<\/li>\n<\/ul>\n<p>VPS\u2019lerde ise, <a href=\"https:\/\/www.dchost.com\/blog\/vpste-ssh-guvenligi-nasil-saglamlasir-fido2-anahtarlari-ssh-ca-ve-rotasyonun-sicacik-yolculugu\/\">SSH g\u00fcvenli\u011fi<\/a> rehberimizde anlatt\u0131\u011f\u0131m\u0131z FIDO2 anahtarlar\u0131 ve anahtar rotasyonu gibi y\u00f6ntemlerle eri\u015fimi \u00e7ok daha sa\u011flam hale getirebilirsiniz.<\/p>\n<h2><span id=\"Hangi_Senaryoda_cPanel_Plesk_veya_VPS_Daha_Mantikli\">Hangi Senaryoda cPanel, Plesk veya VPS Daha Mant\u0131kl\u0131?<\/span><\/h2>\n<p>Elinizdeki proje ve ekibin yetkinlikleri, hangi yakla\u015f\u0131m\u0131n sizin i\u00e7in ideal oldu\u011funu belirler.<\/p>\n<h3><span id=\"cPanel_ile_Git_Deploy_Ne_Zaman_Yeterli\">cPanel ile Git Deploy Ne Zaman Yeterli?<\/span><\/h3>\n<ul>\n<li>K\u00fc\u00e7\u00fck\/orta \u00f6l\u00e7ekli WordPress veya PHP tabanl\u0131 siteleriniz varsa,<\/li>\n<li>Tek geli\u015ftirici veya k\u00fc\u00e7\u00fck bir ekiple \u00e7al\u0131\u015f\u0131yorsan\u0131z,<\/li>\n<li>SSH eri\u015fimi var ama root yetkisi yoksa,<\/li>\n<\/ul>\n<p>bare repo + <code>post-receive<\/code> modeli fazlas\u0131yla i\u015f g\u00f6r\u00fcr. DCHost\u2019un cPanel\u2019li hosting ve reseller \u00e7\u00f6z\u00fcmlerinde bu yap\u0131y\u0131 rahatl\u0131kla uygulayabilirsiniz. Birden fazla m\u00fc\u015fteri sitesini y\u00f6neten ajanslar i\u00e7in, Git tabanl\u0131 deploy\u2019u <a href=\"https:\/\/www.dchost.com\/blog\/ajanslar-ve-freelancerlar-icin-hosting-mimarisi-20-wordpress-sitesini-tek-altyapida-guvenle-yonetmek\/\">ajanslara \u00f6zel hosting mimarisi<\/a> yaz\u0131m\u0131zdaki \u00f6nerilerle birlikte d\u00fc\u015f\u00fcnmek iyi bir ba\u015flang\u0131\u00e7 olur.<\/p>\n<h3><span id=\"Plesk_ile_Git_Deploy_Hangi_Projelere_Uygun\">Plesk ile Git Deploy Hangi Projelere Uygun?<\/span><\/h3>\n<ul>\n<li>PHP\/Laravel ba\u015fta olmak \u00fczere, .NET veya Node.js gibi \u00e7oklu stack y\u00f6netiyorsan\u0131z,<\/li>\n<li>Panel \u00fczerinden otomatik deploy\u2019u daha g\u00f6rsel ve y\u00f6netilebilir buluyorsan\u0131z,<\/li>\n<li>Deploy sonras\u0131 komutlar\u0131 panelden tan\u0131mlamak istiyorsan\u0131z,<\/li>\n<\/ul>\n<p>Plesk\u2019in Git uzant\u0131s\u0131 olduk\u00e7a konforlu bir deneyim sunar. DCHost \u00fczerinde Plesk\u2019li VPS veya dedicated sunucu tercih ederek, hem panel kolayl\u0131\u011f\u0131n\u0131 hem de Git tabanl\u0131 otomatik deploy\u2019u bir arada kullanabilirsiniz.<\/p>\n<h3><span id=\"Tam_Esneklik_Icin_VPSte_Git_Deploy\">Tam Esneklik \u0130\u00e7in VPS\u2019te Git Deploy<\/span><\/h3>\n<p>A\u015fa\u011f\u0131daki \u00f6zelliklerden birka\u00e7\u0131na ihtiya\u00e7 duyuyorsan\u0131z, VPS taraf\u0131ndaki mimariyi d\u00fc\u015f\u00fcnme zaman\u0131 gelmi\u015f demektir:<\/p>\n<ul>\n<li>Sembolik link ile <strong>zero-downtime\u2019a yak\u0131n deploy<\/strong>,<\/li>\n<li>Birden fazla uygulama, mikroservis veya \u00f6zel portta \u00e7al\u0131\u015fan servisler,<\/li>\n<li>\u00d6zel firewall, WAF, mTLS gibi geli\u015fmi\u015f g\u00fcvenlik politikalar\u0131,<\/li>\n<li>\u00d6l\u00e7eklenebilir kaynaklar (vCPU, RAM, NVMe disk) ve esnek altyap\u0131.<\/li>\n<\/ul>\n<p>Bu noktada Git deploy\u2019u; Nginx, PHP-FPM, Redis, veritaban\u0131 k\u00fcmeleri ve izleme ara\u00e7lar\u0131 ile entegre, daha b\u00fcy\u00fck resmin bir par\u00e7as\u0131 olarak d\u00fc\u015f\u00fcnmek gerekir. DCHost\u2019un <a href=\"https:\/\/www.dchost.com\/blog\/vps-hosting-nedir-kucuk-isletmeler-icin-avantajlari-ve-kullanim-alanlari\/\">VPS hosting rehberi<\/a> ve farkl\u0131 uygulama t\u00fcrlerine \u00f6zel yaz\u0131lar\u0131m\u0131z (Laravel, Node.js, WooCommerce vb.) ile birlikte okudu\u011funuzda, u\u00e7tan uca bir \u00fcretim mimarisi planlayabilirsiniz.<\/p>\n<h2><span id=\"Sonuc_Git_ile_Otomatik_Deployu_Bugun_Kurmaya_Deger_mi\">Sonu\u00e7: Git ile Otomatik Deploy\u2019u Bug\u00fcn Kurmaya De\u011fer mi?<\/span><\/h2>\n<p>Git tabanl\u0131 otomatik deploy, ilk bak\u0131\u015fta birka\u00e7 ekstra ad\u0131m gibi g\u00f6r\u00fcnebilir; ancak ger\u00e7ek hayatta kazand\u0131rd\u0131\u011f\u0131 s\u00fcre ve azalan hata oran\u0131, bu maliyeti fazlas\u0131yla geri \u00f6der. Bug\u00fcn k\u00fc\u00e7\u00fck g\u00f6r\u00fcnen bir proje bile, birka\u00e7 ay sonra onlarca commit, eklenti, konfig\u00fcrasyon ve yama i\u00e7eren karma\u015f\u0131k bir yap\u0131ya d\u00f6n\u00fc\u015febiliyor. B\u00f6yle bir ortamda manuel FTP veya kopyalama ile ilerlemek, hem geli\u015ftirme ekibini hem de altyap\u0131y\u0131 gereksiz risklere a\u00e7\u0131k b\u0131rak\u0131yor.<\/p>\n<p>Bu rehberde; cPanel, Plesk ve VPS i\u00e7in Git ile otomatik deploy i\u015f ak\u0131\u015flar\u0131n\u0131 ad\u0131m ad\u0131m ele ald\u0131k. Art\u0131k elinizde \u00fc\u00e7 temel ara\u00e7 var: payla\u015f\u0131ml\u0131 hostingte pratik bare repo + hook yakla\u015f\u0131m\u0131, Plesk\u2019in dahili Git uzant\u0131s\u0131n\u0131n sundu\u011fu konfor ve VPS \u00fczerinde tam kontrolle kurabilece\u011finiz, neredeyse kesintisiz \u00e7al\u0131\u015fan geli\u015fmi\u015f bir da\u011f\u0131t\u0131m mimarisi.<\/p>\n<p>E\u011fer DCHost \u00fczerinde yeni bir proje planl\u0131yorsan\u0131z veya mevcut sitenizi Git tabanl\u0131 deploy yap\u0131s\u0131na ta\u015f\u0131mak istiyorsan\u0131z, ihtiya\u00e7 duydu\u011funuz cPanel hosting, Plesk\u2019li VPS, NVMe diskli Linux VPS, dedicated sunucu veya colocation \u00e7\u00f6z\u00fcmlerini birlikte de\u011ferlendirebiliriz. Altyap\u0131 taraf\u0131n\u0131 biz stabilize ederken, siz Git repo\u2019nuzdan tek komutla, g\u00fcvenle \u00fcretime kod g\u00f6ndermenin rahatl\u0131\u011f\u0131n\u0131 ya\u015fayabilirsiniz.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Web projeleriniz b\u00fcy\u00fcd\u00fck\u00e7e, canl\u0131 ortama kod g\u00f6ndermek (deploy) en zay\u0131f halkalardan biri haline gelir. Elle FTP ile dosya atmak, yanl\u0131\u015f klas\u00f6re y\u00fcklemek, eski dosyalar\u0131 silmeyi unutmak veya son komiti de\u011fil de bir \u00f6nceki komiti g\u00f6ndermek; hepsi ger\u00e7ek hayatta g\u00f6rd\u00fc\u011f\u00fcm\u00fcz, can s\u0131k\u0131c\u0131 hatalar. Oysa Git tabanl\u0131 otomatik deploy i\u015f ak\u0131\u015flar\u0131 ile bu s\u00fcreci hem tekrarlanabilir hem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2707,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-2706","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/2706","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=2706"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/2706\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/2707"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=2706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=2706"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=2706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}