{"id":34269,"date":"2025-11-14T04:01:20","date_gmt":"2025-11-14T01:01:20","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/"},"modified":"2025-11-14T04:01:20","modified_gmt":"2025-11-14T01:01:20","slug":"aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/","title":{"rendered":"AWS EC2&#8217;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r. <\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme ve operasyon d\u00fcnyas\u0131nda h\u0131z, tutarl\u0131l\u0131k ve \u00f6l\u00e7eklenebilirlik, ba\u015far\u0131 i\u00e7in kritik \u00f6neme sahiptir. \u00d6zellikle birden fazla sunucu \u00fczerinde benzer yap\u0131land\u0131rmalar\u0131n tekrarland\u0131\u011f\u0131 senaryolarda manuel s\u00fcre\u00e7ler hem zaman kayb\u0131na yol a\u00e7ar hem de insan kaynakl\u0131 hatalar\u0131n olas\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. \u0130\u015fte tam da bu noktada otomasyon devreye giriyor ve NGINX gibi kritik web sunucular\u0131n\u0131n AWS EC2 ortam\u0131nda da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirmek, geli\u015ftiricilere ve sistem y\u00f6neticilerine paha bi\u00e7ilmez faydalar sunuyor.<\/p>\n<p>\u00d6ncelikle, otomasyonun getirdi\u011fi en b\u00fcy\u00fck avantajlardan biri <strong>h\u0131zd\u0131r<\/strong>. Manuel kurulumda dakikalar hatta saatler s\u00fcrebilecek bir dizi komut ve yap\u0131land\u0131rma ad\u0131m\u0131, bir Bash script ile saniyeler i\u00e7inde tamamlanabilir. Yeni bir sunucuya NGINX kurmak, mevcut bir sunucuyu g\u00fcncellemek veya bir felaket kurtarma senaryosunda h\u0131zla yeniden da\u011f\u0131t\u0131m yapmak gerekti\u011finde, otomatikle\u015ftirilmi\u015f bir script, bu s\u00fcreci g\u00f6zle g\u00f6r\u00fcl\u00fcr \u015fekilde h\u0131zland\u0131r\u0131r. Bu, \u00f6zellikle ani trafik art\u0131\u015flar\u0131na haz\u0131rl\u0131kl\u0131 olmak veya yeni projeleri h\u0131zla devreye almak isteyen \u015firketler i\u00e7in kritik bir yetenektir.<\/p>\n<p>\u0130kinci olarak, <strong>tutarl\u0131l\u0131k<\/strong> otomasyonun temel ta\u015flar\u0131ndan biridir. Manuel s\u00fcre\u00e7lerde, her kurulumda k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar ortaya \u00e7\u0131kabilir; bir komut yanl\u0131\u015f yaz\u0131labilir, bir yap\u0131land\u0131rma dosyas\u0131 eksik veya hatal\u0131 olabilir. Bu t\u00fcr tutars\u0131zl\u0131klar, hata ay\u0131klamay\u0131 zorla\u015ft\u0131rabilir ve sistem genelinde \u00f6ng\u00f6r\u00fclemeyen davran\u0131\u015flara yol a\u00e7abilir. Bash scriptleri ise ayn\u0131 ad\u0131mlar\u0131 her seferinde ayn\u0131 \u015fekilde uygulayarak, t\u00fcm sunucular\u0131n\u0131zda standart ve tutarl\u0131 bir NGINX yap\u0131land\u0131rmas\u0131 sa\u011flar. Bu sayede, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sendromunun \u00f6n\u00fcne ge\u00e7ilmi\u015f olur ve hata ay\u0131klama s\u00fcre\u00e7leri daha \u00f6ng\u00f6r\u00fclebilir hale gelir.<\/p>\n<p>\u00dc\u00e7\u00fcnc\u00fc bir \u00f6nemli avantaj ise <strong>hata azaltma<\/strong> potansiyelidir. \u0130nsanlar hata yapmaya meyillidir, \u00f6zellikle tekrar eden, monoton g\u00f6revlerde. Bir Bash script, belirli bir mant\u0131k \u00e7er\u00e7evesinde tasarlan\u0131r ve bu mant\u0131k bir kez do\u011fru bir \u015fekilde yaz\u0131ld\u0131\u011f\u0131nda, script her \u00e7al\u0131\u015ft\u0131\u011f\u0131nda bu mant\u0131\u011f\u0131 hatas\u0131z bir \u015fekilde uygular. Bu, yanl\u0131\u015f yaz\u0131lan komutlardan, eksik ba\u011f\u0131ml\u0131l\u0131k y\u00fcklemelerinden veya hatal\u0131 yap\u0131land\u0131rma ayarlar\u0131ndan kaynaklanabilecek sorunlar\u0131 ortadan kald\u0131r\u0131r. Daha az hata, daha az kesinti s\u00fcresi ve daha kararl\u0131 bir uygulama ortam\u0131 anlam\u0131na gelir.<\/p>\n<p>Son olarak, otomasyon <strong>\u00f6l\u00e7eklenebilirlik<\/strong> i\u00e7in vazge\u00e7ilmezdir. Bir veya iki sunucuyu manuel olarak y\u00f6netmek m\u00fcmk\u00fcn olabilir, ancak on, y\u00fcz veya binlerce sunucudan olu\u015fan bir altyap\u0131da bu imkans\u0131zd\u0131r. Otomatikle\u015ftirilmi\u015f NGINX da\u011f\u0131t\u0131m\u0131, ihtiya\u00e7 duydu\u011funuz kadar EC2 \u00f6rne\u011fini ayn\u0131 NGINX yap\u0131land\u0131rmas\u0131yla h\u0131zla ba\u015flatman\u0131za olanak tan\u0131r. Bu, \u00f6zellikle bulut ortamlar\u0131n\u0131n esnekli\u011finden tam olarak yararlanmak isteyen firmalar i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r. Anl\u0131k yo\u011funluklar veya b\u00fcy\u00fcme d\u00f6nemlerinde h\u0131zl\u0131ca yeni sunucular devreye alabilir, y\u00fck dengeleme ve y\u00fcksek eri\u015filebilirlik \u00e7\u00f6z\u00fcmlerini daha verimli bir \u015fekilde y\u00f6netebilirsiniz.<\/p>\n<p>T\u00fcm bu avantajlar g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, NGINX da\u011f\u0131t\u0131m\u0131n\u0131 Bash scriptleri ile otomatikle\u015ftirmek, modern altyap\u0131 y\u00f6netiminin temel bir par\u00e7as\u0131 haline gelmi\u015ftir. Bu sadece zaman kazand\u0131rmakla kalmaz, ayn\u0131 zamanda daha g\u00fcvenilir, tutarl\u0131 ve \u00f6l\u00e7eklenebilir sistemler in\u015fa etmenize de yard\u0131mc\u0131 olur.<\/p>\n<h2>Temel Ta\u015flar: AWS EC2, NGINX ve Bash Scripting Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Ba\u015far\u0131l\u0131 bir otomasyon s\u00fcreci olu\u015fturmak i\u00e7in, sistemin temel bile\u015fenlerini iyi anlamak gerekir. Bu b\u00f6l\u00fcmde, projemizin yap\u0131 ta\u015flar\u0131 olan AWS EC2, NGINX ve Bash Scripting&#8217;in ne oldu\u011funu ve neden bu kombinasyonun g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sundu\u011funu ele alaca\u011f\u0131z.<\/p>\n<h3>AWS EC2 (Elastic Compute Cloud) Nedir?<\/h3>\n<p>AWS EC2, Amazon Web Services&#8217;\u0131n sundu\u011fu, bulutta \u00f6l\u00e7eklenebilir i\u015flem kapasitesi sa\u011flayan bir hizmettir. Temel olarak, size sanal sunucular (instance&#8217;lar) kiralama imkan\u0131 sunar. Bu sanal sunucular, ihtiyac\u0131n\u0131za g\u00f6re farkl\u0131 i\u015flem g\u00fcc\u00fc, bellek ve depolama se\u00e7enekleriyle gelir. EC2&#8217;nin sundu\u011fu ba\u015fl\u0131ca avantajlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Trafik dalgalanmalar\u0131na g\u00f6re sunucu say\u0131n\u0131z\u0131 art\u0131r\u0131p azaltabilirsiniz.<\/li>\n<li><strong>Esneklik:<\/strong> Farkl\u0131 i\u015fletim sistemleri (Linux, Windows) ve uygulama y\u0131\u011f\u0131nlar\u0131 i\u00e7in \u00e7e\u015fitli instance tipleri mevcuttur.<\/li>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> Kulland\u0131\u011f\u0131n\u0131z kadar \u00f6dersiniz, bu da sermaye harcamalar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Birden fazla b\u00f6lgede ve eri\u015filebilirlik alan\u0131nda instance&#8217;lar ba\u015flatarak uygulaman\u0131z\u0131n kesintisiz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<p>EC2, uygulama sunucular\u0131ndan veritabanlar\u0131na, geli\u015ftirme ortamlar\u0131ndan CI\/CD ara\u00e7lar\u0131na kadar geni\u015f bir kullan\u0131m alan\u0131na sahiptir. Bizim senaryomuzda, NGINX web sunucumuz i\u00e7in stabil ve esnek bir bar\u0131nd\u0131rma ortam\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>NGINX Nedir ve Neden Tercih Edilir?<\/h3>\n<p>NGINX (Engine-X), y\u00fcksek performansl\u0131, ters proxy, y\u00fck dengeleyici, HTTP \u00f6nbelle\u011fi ve web sunucusu olarak g\u00f6rev yapabilen a\u00e7\u0131k kaynakl\u0131 bir yaz\u0131l\u0131md\u0131r. \u00d6zellikle y\u00fcksek e\u015fzamanl\u0131 ba\u011flant\u0131lar\u0131 i\u015fleme yetene\u011fi ile bilinir ve g\u00fcn\u00fcm\u00fczde internetin en yo\u011fun sitelerinin \u00e7o\u011funda kullan\u0131l\u0131r. NGINX&#8217;in tercih edilme nedenleri:<\/p>\n<ul>\n<li><strong>Y\u00fcksek Performans:<\/strong> D\u00fc\u015f\u00fck bellek kullan\u0131m\u0131yla binlerce e\u015fzamanl\u0131 ba\u011flant\u0131y\u0131 i\u015fleyebilir.<\/li>\n<li><strong>G\u00fcvenilirlik:<\/strong> Kararl\u0131 ve g\u00fcvenilir bir web sunucusudur.<\/li>\n<li><strong>Esneklik:<\/strong> \u00c7ok \u00e7e\u015fitli mod\u00fcller ve yap\u0131land\u0131rma se\u00e7enekleri sunar.<\/li>\n<li><strong>Ters Proxy ve Y\u00fck Dengeleme:<\/strong> Birden fazla uygulama sunucusu aras\u0131nda trafi\u011fi da\u011f\u0131tarak uygulaman\u0131n performans\u0131n\u0131 ve eri\u015filebilirli\u011fini art\u0131r\u0131r.<\/li>\n<li><strong>G\u00fcvenlik:<\/strong> DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma, SSL\/TLS sonland\u0131rma gibi g\u00fcvenlik \u00f6zellikleri sunar.<\/li>\n<\/ul>\n<p>NGINX, modern web uygulamalar\u0131 i\u00e7in vazge\u00e7ilmez bir bile\u015fendir ve AWS EC2 \u00fczerinde da\u011f\u0131t\u0131m\u0131, uygulamalar\u0131n\u0131za g\u00fc\u00e7l\u00fc bir altyap\u0131 kazand\u0131r\u0131r.<\/p>\n<h3>Bash Scripting Nedir ve Otomasyondaki Rol\u00fc?<\/h3>\n<p>Bash, &#8220;Bourne-Again SHell&#8221; kelimelerinin k\u0131saltmas\u0131d\u0131r ve Linux tabanl\u0131 sistemlerde en yayg\u0131n kullan\u0131lan komut sat\u0131r\u0131 yorumlay\u0131c\u0131s\u0131d\u0131r. Bash scriptleri ise, bir veya daha fazla Bash komutunun bir dosyada s\u0131ralanarak otomatik olarak \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flayan metin dosyalar\u0131d\u0131r. Bash scripting&#8217;in otomasyondaki \u00f6nemi b\u00fcy\u00fckt\u00fcr:<\/p>\n<ul>\n<li><strong>Basitlik ve Eri\u015filebilirlik:<\/strong> Linux sistemlerinde varsay\u0131lan olarak bulunur ve \u00f6\u011frenmesi nispeten kolayd\u0131r.<\/li>\n<li><strong>Tekrarlayan G\u00f6revleri Otomatikle\u015ftirme:<\/strong> Sunucu kurulumu, yaz\u0131l\u0131m y\u00fcklemesi, yap\u0131land\u0131rma ve g\u00fcnl\u00fck g\u00f6revleri otomatikle\u015ftirmek i\u00e7in idealdir.<\/li>\n<li><strong>Sistem Y\u00f6netimi:<\/strong> Dosya i\u015flemleri, kullan\u0131c\u0131 y\u00f6netimi, hizmet kontrol\u00fc gibi bir\u00e7ok sistem y\u00f6netim g\u00f6revini ger\u00e7ekle\u015ftirebilir.<\/li>\n<li><strong>Esneklik:<\/strong> Ko\u015fullu ifadeler (<code>if<\/code>), d\u00f6ng\u00fcler (<code>for<\/code>, <code>while<\/code>) ve fonksiyonlar gibi programlama yap\u0131lar\u0131n\u0131 destekler.<\/li>\n<\/ul>\n<p>Bizim senaryomuzda Bash scriptleri, bir AWS EC2 instance&#8217;\u0131na ba\u011flanmak, NGINX paketlerini indirmek, kurmak, yap\u0131land\u0131rmak ve hizmeti ba\u015flatmak gibi ad\u0131mlar\u0131 otomatikle\u015ftirmek i\u00e7in kullan\u0131lacak sihirli de\u011fnektir. Bu \u00fc\u00e7 temel bile\u015fenin birle\u015fimi, g\u00fc\u00e7l\u00fc, esnek ve otomatik bir NGINX da\u011f\u0131t\u0131m \u00e7\u00f6z\u00fcm\u00fcn\u00fc m\u00fcmk\u00fcn k\u0131lmaktad\u0131r.<\/p>\n<h2>Haz\u0131rl\u0131k A\u015famas\u0131: AWS EC2 Ortam\u0131 Nas\u0131l Olu\u015fturulur ve Yap\u0131land\u0131r\u0131l\u0131r?<\/h2>\n<p>NGINX&#8217;i otomatik olarak da\u011f\u0131tmadan \u00f6nce, ona uygun bir AWS EC2 ortam\u0131 haz\u0131rlamam\u0131z gerekiyor. Bu b\u00f6l\u00fcm, AWS Management Console&#8217;u kullanarak veya komut sat\u0131r\u0131 aray\u00fcz\u00fc (CLI) arac\u0131l\u0131\u011f\u0131yla bir EC2 instance&#8217;\u0131 nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131, g\u00fcvenli\u011fini nas\u0131l sa\u011flayaca\u011f\u0131n\u0131z\u0131 ve NGINX&#8217;in sorunsuz \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli \u00f6n yap\u0131land\u0131rmalar\u0131 nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>1. EC2 Instance&#8217;\u0131 Ba\u015flatma<\/h3>\n<p>\u0130lk ad\u0131m, bir EC2 instance&#8217;\u0131 ba\u015flatmakt\u0131r. En yayg\u0131n ve kullan\u0131c\u0131 dostu y\u00f6ntem AWS Management Console&#8217;u kullanmakt\u0131r:<\/p>\n<ol>\n<li><strong>AWS Console&#8217;a Giri\u015f Yap\u0131n:<\/strong> <a href=\"https:\/\/aws.amazon.com\/console\/\">AWS Console<\/a> adresine giderek hesab\u0131n\u0131za giri\u015f yap\u0131n.<\/li>\n<li><strong>EC2 Servisine Git:<\/strong> Hizmetler arama \u00e7ubu\u011funa &#8220;EC2&#8221; yaz\u0131n ve \u00e7\u0131kan sonuca t\u0131klay\u0131n.<\/li>\n<li><strong>Instance Ba\u015flat:<\/strong> Sol men\u00fcden &#8220;Instances&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n ve ard\u0131ndan &#8220;Launch instances&#8221; butonuna bas\u0131n.<\/li>\n<li><strong>AMI Se\u00e7imi:<\/strong> Bir &#8220;Amazon Machine Image&#8221; (AMI) se\u00e7meniz gerekecek. NGINX i\u00e7in bir Linux da\u011f\u0131t\u0131m\u0131 tercih edece\u011fiz. Ubuntu Server 20.04 LTS veya Amazon Linux 2 AMI, yayg\u0131n ve iyi desteklenen se\u00e7eneklerdir. &#8220;Free tier eligible&#8221; etiketli olanlar\u0131 se\u00e7erek maliyetleri d\u00fc\u015f\u00fck tutabilirsiniz.<\/li>\n<li><strong>Instance Tipi Se\u00e7imi:<\/strong> Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na uygun bir instance tipi se\u00e7in. Test ve \u00f6\u011frenme ama\u00e7lar\u0131 i\u00e7in <code class=\"language-bash\">t2.micro<\/code> veya <code class=\"language-bash\">t3.micro<\/code> (Free Tier uyumlu) yeterli olacakt\u0131r.<\/li>\n<li><strong>Anahtar \u00c7ifti (Key Pair) Olu\u015fturma veya Se\u00e7me:<\/strong> EC2 instance&#8217;\u0131n\u0131za g\u00fcvenli bir \u015fekilde SSH ile ba\u011flanmak i\u00e7in bir anahtar \u00e7ifti gereklidir. Yeni bir anahtar \u00e7ifti olu\u015fturun ve <code>.pem<\/code> dosyas\u0131n\u0131 bilgisayar\u0131n\u0131za g\u00fcvenli bir yere indirin. Mevcut bir anahtar \u00e7iftiniz varsa onu da se\u00e7ebilirsiniz.<\/li>\n<li><strong>A\u011f Ayarlar\u0131 (Security Group):<\/strong> Bu, en kritik ad\u0131mlardan biridir. Bir &#8220;Security Group&#8221; (G\u00fcvenlik Grubu) olu\u015fturman\u0131z veya var olan\u0131 kullanman\u0131z gerekir. G\u00fcvenlik Grubu, instance&#8217;\u0131n\u0131za gelen ve giden a\u011f trafi\u011fini kontrol eden sanal bir g\u00fcvenlik duvar\u0131d\u0131r. NGINX&#8217;in internetten eri\u015filebilir olmas\u0131 i\u00e7in a\u015fa\u011f\u0131daki kurallar\u0131 eklemeniz \u015fartt\u0131r:\n<ul>\n<li><strong>SSH (Port 22):<\/strong> Instance&#8217;\u0131n\u0131za ba\u011flanmak i\u00e7in gereklidir. Kaynak IP olarak kendi IP adresinizi veya <code class=\"language-bash\">0.0.0.0\/0<\/code> (t\u00fcm IP&#8217;ler, dikkatli olun!) se\u00e7ene\u011fini belirleyebilirsiniz. En g\u00fcvenlisi, sadece kendi IP adresinizin eri\u015fimine izin vermektir.<\/li>\n<li><strong>HTTP (Port 80):<\/strong> NGINX&#8217;in web trafi\u011fi i\u00e7in gereklidir. Kaynak IP olarak <code class=\"language-bash\">0.0.0.0\/0<\/code> se\u00e7ene\u011fini belirleyin, b\u00f6ylece web siteniz herkese a\u00e7\u0131k olur.<\/li>\n<li><strong>HTTPS (Port 443):<\/strong> E\u011fer SSL\/TLS kullanacaksan\u0131z bu porta da izin vermeniz gerekecektir. Kaynak IP yine <code class=\"language-bash\">0.0.0.0\/0<\/code> olmal\u0131d\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-json\">\n  {\n    \"IpPermissions\": [\n      {\n        \"FromPort\": 22,\n        \"IpProtocol\": \"tcp\",\n        \"IpRanges\": [ { \"CidrIp\": \"YOUR_IP_ADDRESS\/32\" } ],\n        \"ToPort\": 22\n      },\n      {\n        \"FromPort\": 80,\n        \"IpProtocol\": \"tcp\",\n        \"IpRanges\": [ { \"CidrIp\": \"0.0.0.0\/0\" } ],\n        \"ToPort\": 80\n      },\n      {\n        \"FromPort\": 443,\n        \"IpProtocol\": \"tcp\",\n        \"IpRanges\": [ { \"CidrIp\": \"0.0.0.0\/0\" } ],\n        \"ToPort\": 433\n      }\n    ]\n  }\n        <\/pre>\n<p><\/code><br \/>\n        <span class=\"expert-tip\">Uzman \u0130pucu: G\u00fcvenlik gruplar\u0131n\u0131 minimum yetki prensibine g\u00f6re yap\u0131land\u0131rmak \u00f6nemlidir. SSH i\u00e7in sadece kendi IP adresinize izin vermek, potansiyel g\u00fcvenlik risklerini azalt\u0131r.<\/span>\n    <\/li>\n<li><strong>Depolama Ayarlar\u0131:<\/strong> Varsay\u0131lan depolama (8 GiB EBS) \u00e7o\u011fu senaryo i\u00e7in yeterli olacakt\u0131r. \u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re art\u0131rabilirsiniz.<\/li>\n<li><strong>Instance'\u0131 Ba\u015flat:<\/strong> T\u00fcm ayarlar\u0131 g\u00f6zden ge\u00e7irdikten sonra \"Launch instance\" butonuna t\u0131klay\u0131n. Instance'\u0131n\u0131z\u0131n ba\u015flat\u0131lmas\u0131 birka\u00e7 dakika s\u00fcrebilir.<\/li>\n<\/ol>\n<h3>2. EC2 Instance'\u0131na SSH ile Ba\u011flanma<\/h3>\n<p>Instance'\u0131n\u0131z \"Running\" durumuna geldi\u011finde, ona SSH ile ba\u011flanabilirsiniz:<\/p>\n<ol>\n<li><strong>Public IP Adresini Al\u0131n:<\/strong> EC2 Instances sayfas\u0131nda, yeni ba\u015flatt\u0131\u011f\u0131n\u0131z instance'\u0131 se\u00e7in ve alt k\u0131s\u0131mdaki detaylar sekmesinden \"Public IPv4 address\" bilgisini kopyalay\u0131n.<\/li>\n<li><strong>Anahtar Dosyas\u0131 \u0130zinlerini Ayarlay\u0131n:<\/strong> \u0130ndirdi\u011finiz <code class=\"language-bash\">.pem<\/code> dosyas\u0131n\u0131n izinlerini uygun \u015fekilde ayarlay\u0131n:\n<pre><code class=\"language-bash\">\nchmod 400 \/path\/to\/your-key-pair.pem\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>SSH Ba\u011flant\u0131s\u0131 Kurun:<\/strong> Terminalinizi a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu kullanarak instance'\u0131n\u0131za ba\u011flan\u0131n. (<code>ec2-user<\/code> veya <code>ubuntu<\/code>, kulland\u0131\u011f\u0131n\u0131z AMI'ye g\u00f6re de\u011fi\u015fir.)\n<pre><code class=\"language-bash\">\nssh -i \/path\/to\/your-key-pair.pem ec2-user@YOUR_EC2_PUBLIC_IP\n        <\/pre>\n<p><\/code><\/p>\n<p>E\u011fer Ubuntu AMI kulland\u0131ysan\u0131z, kullan\u0131c\u0131 ad\u0131 <code class=\"language-bash\">ubuntu<\/code> olacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">\nssh -i \/path\/to\/your-key-pair.pem ubuntu@YOUR_EC2_PUBLIC_IP\n        <\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<p>Ba\u015far\u0131l\u0131 bir \u015fekilde ba\u011fland\u0131\u011f\u0131n\u0131zda, sunucunuzun komut sat\u0131r\u0131na eri\u015fmi\u015f olacaks\u0131n\u0131z. Art\u0131k NGINX kurulumu i\u00e7in haz\u0131rs\u0131n\u0131z demektir.<\/p>\n<p>Bu haz\u0131rl\u0131k ad\u0131mlar\u0131, otomatik da\u011f\u0131t\u0131m scriptinizin \u00e7al\u0131\u015faca\u011f\u0131 sa\u011flam bir temel olu\u015fturur. Do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir EC2 instance'\u0131 ve g\u00fcvenlik grubu, sorunsuz bir kurulum s\u00fcreci i\u00e7in hayati \u00f6neme sahiptir.<\/p>\n<h2>Bash Script ile NGINX Kurulumu: Ad\u0131m Ad\u0131m Rehber<\/h2>\n<p>\u015eimdi en heyecan verici k\u0131sma geldik: NGINX'i bir Bash scripti kullanarak EC2 sunucusuna otomatik olarak kurmak. Bu rehberde, basit bir kurulum scripti olu\u015fturacak, her ad\u0131m\u0131n\u0131 a\u00e7\u0131klayacak ve scriptinizi nas\u0131l \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z\u0131 g\u00f6sterece\u011fiz.<\/p>\n<h3>Ad\u0131m 1: Kurulum Scriptini Olu\u015fturma<\/h3>\n<p>\u0130lk olarak, sunucunuzda veya yerel makinenizde bir metin d\u00fczenleyici kullanarak <code class=\"language-bash\">install_nginx.sh<\/code> ad\u0131nda bir dosya olu\u015fturun. Bu dosyan\u0131n i\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi olacakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">\n#!\/bin\/bash\n\n# Script'in hata durumunda durmas\u0131n\u0131 sa\u011fla\nset -e\n\n# --- NGINX Kurulum Fonksiyonu ---\ninstall_nginx() {\n    echo \"NGINX kurulumu ba\u015flat\u0131l\u0131yor...\"\n\n    # Paket listesini g\u00fcncelle\n    echo \"Paket listeleri g\u00fcncelleniyor...\"\n    sudo apt update -y\n\n    # NGINX'i y\u00fckle\n    echo \"NGINX paketi kuruluyor...\"\n    sudo apt install nginx -y\n\n    # NGINX servisini ba\u015flat ve sistem ba\u015flang\u0131c\u0131nda otomatik ba\u015flamas\u0131n\u0131 sa\u011fla\n    echo \"NGINX servisi ba\u015flat\u0131l\u0131yor ve otomatik ba\u015flatma ayarlan\u0131yor...\"\n    sudo systemctl start nginx\n    sudo systemctl enable nginx\n\n    echo \"NGINX ba\u015far\u0131yla kuruldu ve ba\u015flat\u0131ld\u0131!\"\n    echo \"Web sunucunuzun durumunu kontrol edebilirsiniz: sudo systemctl status nginx\"\n    echo \"NGINX varsay\u0131lan ana sayfas\u0131n\u0131 g\u00f6rmek i\u00e7in taray\u0131c\u0131n\u0131zdan sunucunuzun genel IP adresine gidin.\"\n}\n\n# --- NGINX Yap\u0131land\u0131rma Fonksiyonu (Basit bir \u00f6rnek) ---\nconfigure_nginx() {\n    echo \"NGINX yap\u0131land\u0131rmas\u0131 uygulan\u0131yor...\"\n\n    # Varsay\u0131lan NGINX yap\u0131land\u0131rma dosyas\u0131n\u0131 yedekle\n    if [ -f \"\/etc\/nginx\/sites-available\/default\" ]; then\n        sudo cp \/etc\/nginx\/sites-available\/default \/etc\/nginx\/sites-available\/default.bak\n        echo \"Varsay\u0131lan NGINX yap\u0131land\u0131rma dosyas\u0131 yedeklendi.\"\n    fi\n\n    # Basit bir \u00f6rnek site yap\u0131land\u0131rmas\u0131 olu\u015ftur\n    # Bu k\u0131sm\u0131 kendi projenize g\u00f6re \u00f6zelle\u015ftirebilirsiniz.\n    echo '\nserver {\n    listen 80 default_server;\n    listen [::]:80 default_server;\n\n    root \/var\/www\/html;\n    index index.html index.htm index.nginx-debian.html;\n\n    server_name _; # Sunucu IP adresi veya domain ad\u0131n\u0131z\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n\n    # Hata sayfalar\u0131 i\u00e7in \u00f6rnek yap\u0131land\u0131rma\n    error_page 404 \/404.html;\n    location = \/404.html {\n        internal;\n    }\n\n    error_page 500 502 503 504 \/50x.html;\n    location = \/50x.html {\n        internal;\n    }\n}\n' | sudo tee \/etc\/nginx\/sites-available\/default > \/dev\/null\n\n    echo \"NGINX varsay\u0131lan site yap\u0131land\u0131rmas\u0131 g\u00fcncellendi.\"\n\n    # NGINX yap\u0131land\u0131rmas\u0131n\u0131 kontrol et\n    echo \"NGINX yap\u0131land\u0131rma sentaks\u0131 kontrol ediliyor...\"\n    sudo nginx -t\n\n    # Hata yoksa NGINX servisini yeniden ba\u015flat\n    if [ $? -eq 0 ]; then\n        echo \"NGINX yap\u0131land\u0131rmas\u0131 ge\u00e7erli. Servis yeniden ba\u015flat\u0131l\u0131yor...\"\n        sudo systemctl reload nginx\n        echo \"NGINX servisi yeniden ba\u015flat\u0131ld\u0131.\"\n    else\n        echo \"HATA: NGINX yap\u0131land\u0131rmas\u0131nda sentaks hatas\u0131 var. L\u00fctfen kontrol edin.\"\n        echo \"NGINX servisi yeniden ba\u015flat\u0131lamad\u0131.\"\n        exit 1\n    fi\n}\n\n# --- Ana \u00c7al\u0131\u015fma Ak\u0131\u015f\u0131 ---\nmain() {\n    # NGINX'in zaten kurulu olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n    if command -v nginx &> \/dev\/null; then\n        echo \"NGINX zaten y\u00fckl\u00fc. Kurulum ad\u0131m\u0131 atlan\u0131yor.\"\n    else\n        install_nginx\n    fi\n\n    configure_nginx\n\n    echo \"NGINX da\u011f\u0131t\u0131m scripti tamamland\u0131!\"\n}\n\n# Scripti \u00e7al\u0131\u015ft\u0131r\nmain\n\n<\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 2: Scriptin A\u00e7\u0131klamas\u0131<\/h3>\n<p>Yukar\u0131daki Bash scripti, birka\u00e7 temel ad\u0131mdan olu\u015fmaktad\u0131r:<\/p>\n<ul>\n<li><code class=\"language-bash\">#!\/bin\/bash<\/code>: Bu, scriptin Bash yorumlay\u0131c\u0131s\u0131 ile \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekti\u011fini belirtir.<\/li>\n<li><code class=\"language-bash\">set -e<\/code>: Bu komut, scriptin herhangi bir komut ba\u015far\u0131s\u0131z oldu\u011funda (s\u0131f\u0131r olmayan bir \u00e7\u0131k\u0131\u015f kodu d\u00f6nd\u00fcrd\u00fc\u011f\u00fcnde) hemen durmas\u0131n\u0131 sa\u011flar. Bu, hatalar\u0131 erken yakalamak i\u00e7in \u00f6nemlidir.<\/li>\n<li><code class=\"language-bash\">install_nginx()<\/code> Fonksiyonu:\n<ul>\n<li><code class=\"language-bash\">sudo apt update -y<\/code>: Sunucunun paket listesini g\u00fcnceller. <code class=\"language-bash\">-y<\/code> bayra\u011f\u0131, t\u00fcm sorulara otomatik olarak \"evet\" yan\u0131t\u0131 vermesini sa\u011flar.<\/li>\n<li><code class=\"language-bash\">sudo apt install nginx -y<\/code>: NGINX paketini y\u00fckler.<\/li>\n<li><code class=\"language-bash\">sudo systemctl start nginx<\/code>: NGINX servisini ba\u015flat\u0131r.<\/li>\n<li><code class=\"language-bash\">sudo systemctl enable nginx<\/code>: NGINX servisinin sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><code class=\"language-bash\">configure_nginx()<\/code> Fonksiyonu:\n<ul>\n<li>Varsay\u0131lan NGINX yap\u0131land\u0131rma dosyas\u0131n\u0131 yedekler (<code>\/etc\/nginx\/sites-available\/default<\/code>).<\/li>\n<li>Yeni, temel bir NGINX site yap\u0131land\u0131rmas\u0131 olu\u015fturur ve bunu varsay\u0131lan yap\u0131land\u0131rma dosyas\u0131na yazar. <code class=\"language-bash\">sudo tee<\/code> komutu, root yetkileriyle bir dosyaya yazmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code class=\"language-bash\">sudo nginx -t<\/code>: NGINX yap\u0131land\u0131rma dosyalar\u0131n\u0131n sentaks\u0131n\u0131 kontrol eder. Herhangi bir hata varsa, script durur.<\/li>\n<li><code class=\"language-bash\">sudo systemctl reload nginx<\/code>: NGINX servisini yap\u0131land\u0131rma de\u011fi\u015fikliklerini uygulamak \u00fczere yeniden y\u00fckler (yeniden ba\u015flatmadan daha h\u0131zl\u0131d\u0131r).<\/li>\n<\/ul>\n<\/li>\n<li><code class=\"language-bash\">main()<\/code> Fonksiyonu:\n<ul>\n<li><code class=\"language-bash\">if command -v nginx &> \/dev\/null; then ... fi<\/code>: NGINX'in zaten y\u00fckl\u00fc olup olmad\u0131\u011f\u0131n\u0131 kontrol eder. Bu, scripti birden fazla kez \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde gereksiz kurulumlar\u0131 \u00f6nler.<\/li>\n<li><code class=\"language-bash\">install_nginx<\/code> ve <code class=\"language-bash\">configure_nginx<\/code> fonksiyonlar\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span class=\"expert-tip\">Uzman \u0130pucu: Ubuntu\/Debian tabanl\u0131 sistemler i\u00e7in <code class=\"language-bash\">apt<\/code> kullan\u0131l\u0131rken, Amazon Linux\/CentOS\/RedHat tabanl\u0131 sistemler i\u00e7in <code class=\"language-bash\">yum<\/code> veya <code class=\"language-bash\">dnf<\/code> komutlar\u0131 kullan\u0131lmal\u0131d\u0131r. AMI se\u00e7iminize g\u00f6re scripti uyarlamay\u0131 unutmay\u0131n.<\/span><\/p>\n<h3>Ad\u0131m 3: Scripti EC2 Sunucusuna Y\u00fckleme ve \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<ol>\n<li><strong>Scripti EC2'ye Kopyalama:<\/strong> Yerel makinenizden SSH anahtar\u0131n\u0131z\u0131 kullanarak <code class=\"language-bash\">install_nginx.sh<\/code> dosyas\u0131n\u0131 EC2 sunucunuza kopyalay\u0131n:\n<pre><code class=\"language-bash\">\nscp -i \/path\/to\/your-key-pair.pem install_nginx.sh ec2-user@YOUR_EC2_PUBLIC_IP:\/home\/ec2-user\/\n        <\/pre>\n<p><\/code><\/p>\n<p>Yine, kullan\u0131c\u0131 ad\u0131 Ubuntu i\u00e7in <code class=\"language-bash\">ubuntu<\/code> olabilir.<\/p>\n<\/li>\n<li><strong>EC2'ye Ba\u011flanma:<\/strong> SSH ile EC2 sunucunuza ba\u011flan\u0131n:\n<pre><code class=\"language-bash\">\nssh -i \/path\/to\/your-key-pair.pem ec2-user@YOUR_EC2_PUBLIC_IP\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Scripte \u00c7al\u0131\u015ft\u0131rma \u0130zni Verme:<\/strong> Sunucuda, script dosyas\u0131n\u0131 y\u00fcr\u00fct\u00fclebilir hale getirin:\n<pre><code class=\"language-bash\">\nchmod +x install_nginx.sh\n        <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Scripti \u00c7al\u0131\u015ft\u0131rma:<\/strong> Scripti root yetkileriyle \u00e7al\u0131\u015ft\u0131r\u0131n:\n<pre><code class=\"language-bash\">\nsudo .\/install_nginx.sh\n        <\/pre>\n<p><\/code>\n    <\/li>\n<\/ol>\n<p>Script ba\u015far\u0131yla tamamland\u0131\u011f\u0131nda, taray\u0131c\u0131n\u0131zdan EC2 sunucunuzun genel IP adresine giderek NGINX'in varsay\u0131lan kar\u015f\u0131lama sayfas\u0131n\u0131 (veya scriptinizle \u00f6zelle\u015ftirdi\u011finiz sayfay\u0131) g\u00f6rmeniz gerekir. E\u011fer bir hata ile kar\u015f\u0131la\u015f\u0131rsan\u0131z, scriptin \u00e7\u0131kt\u0131s\u0131n\u0131 dikkatlice inceleyerek sorunun kayna\u011f\u0131n\u0131 bulmaya \u00e7al\u0131\u015f\u0131n.<\/p>\n<p>Bu ad\u0131mlar\u0131 takip ederek, NGINX'i AWS EC2 sunucunuza tamamen otomatik bir \u015fekilde kurmu\u015f ve yap\u0131land\u0131rm\u0131\u015f olacaks\u0131n\u0131z. Bu, manuel kurulumun getirdi\u011fi zaman kayb\u0131n\u0131 ve hata riskini ortadan kald\u0131r\u0131r.<\/p>\n<h2>Otomasyonu Geli\u015ftirme: NGINX Yap\u0131land\u0131rma ve Hata Y\u00f6netimi Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Yukar\u0131daki script, NGINX'i kurmak i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r, ancak ger\u00e7ek d\u00fcnya senaryolar\u0131nda daha fazla esneklik, hata y\u00f6netimi ve \u00f6zelle\u015ftirme gerekebilir. Bu b\u00f6l\u00fcmde, NGINX yap\u0131land\u0131rmas\u0131n\u0131 daha dinamik hale getirmeyi ve scriptinize temel hata y\u00f6netimi mekanizmalar\u0131 eklemeyi \u00f6\u011freneceksiniz.<\/p>\n<h3>1. Dinamik NGINX Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>NGINX'i sadece kurmak yetmez, genellikle projenize \u00f6zel yap\u0131land\u0131rma dosyalar\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Bu, bir site blo\u011fu olu\u015fturmak, ters proxy ayarlar\u0131 yapmak, SSL\/TLS sertifikalar\u0131n\u0131 yap\u0131land\u0131rmak veya performans optimizasyonlar\u0131 eklemek anlam\u0131na gelebilir. Scriptinizi bu ihtiya\u00e7lara g\u00f6re nas\u0131l geli\u015ftirebilirsiniz?<\/p>\n<h4>a. \u00d6zel Yap\u0131land\u0131rma Dosyalar\u0131n\u0131 Kullanma<\/h4>\n<p>Yerel makinenizde \u00f6nceden haz\u0131rlanm\u0131\u015f \u00f6zel NGINX yap\u0131land\u0131rma dosyalar\u0131n\u0131z (\u00f6rne\u011fin, <code class=\"language-bash\">my_website.conf<\/code>) varsa, bunlar\u0131 EC2 sunucusuna kopyalayabilir ve scriptinizde etkinle\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\n# Yerel makinenizde olu\u015fturdu\u011funuz \u00f6zel NGINX yap\u0131land\u0131rma dosyas\u0131\n# my_website.conf dosyas\u0131n\u0131n i\u00e7eri\u011fi:\n# server {\n#     listen 80;\n#     server_name example.com www.example.com;\n#     root \/var\/www\/my_website;\n#     index index.html;\n#     location \/ {\n#         try_files $uri $uri\/ =404;\n#     }\n# }\n<\/pre>\n<p><\/code><\/p>\n<p>Scriptinize ekleyece\u011finiz yap\u0131land\u0131rma ad\u0131mlar\u0131 \u015fu \u015fekilde olabilir:<\/p>\n<pre><code class=\"language-bash\">\nconfigure_custom_nginx_site() {\n    echo \"\u00d6zel NGINX sitesi yap\u0131land\u0131r\u0131l\u0131yor...\"\n\n    LOCAL_NGINX_CONF_PATH=\"my_website.conf\" # Yerelinizdeki yap\u0131land\u0131rma dosyan\u0131z\u0131n ad\u0131\n    REMOTE_NGINX_CONF_PATH=\"\/etc\/nginx\/sites-available\/my_website.conf\"\n    REMOTE_NGINX_SYMLINK_PATH=\"\/etc\/nginx\/sites-enabled\/my_website.conf\"\n    \n    # Yerelden EC2'ye \u00f6zel yap\u0131land\u0131rma dosyas\u0131n\u0131 kopyalay\u0131n\n    # Not: Bu ad\u0131m\u0131n scripti EC2 \u00fczerinde \u00e7al\u0131\u015fmadan \u00f6nce yerel makineden \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekir\n    # scp -i \/path\/to\/key.pem my_website.conf ec2-user@YOUR_IP:$HOME\/\n    \n    # Veya script i\u00e7inde direkt olu\u015fturabilirsiniz\n    echo '\nserver {\n    listen 80;\n    server_name ${DOMAIN_NAME:-your_ec2_public_ip}; # Dinamik domain ad\u0131\n    root \/var\/www\/html\/my_website;\n    index index.html;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n' | sudo tee $REMOTE_NGINX_CONF_PATH > \/dev\/null\n\n    # Web k\u00f6k dizinini olu\u015ftur ve \u00f6rnek index.html ekle\n    sudo mkdir -p \/var\/www\/html\/my_website\n    echo \"<h1>Merhaba, NGINX Otomasyonu!<\/h1><p>Bu site Bash script ile kuruldu.<\/p>\" | sudo tee \/var\/www\/html\/my_website\/index.html > \/dev\/null\n\n    # Varsay\u0131lan siteyi devre d\u0131\u015f\u0131 b\u0131rak\n    if [ -f \"\/etc\/nginx\/sites-enabled\/default\" ]; then\n        sudo rm \/etc\/nginx\/sites-enabled\/default\n        echo \"Varsay\u0131lan NGINX sitesi devre d\u0131\u015f\u0131 b\u0131rak\u0131ld\u0131.\"\n    fi\n\n    # Yeni yap\u0131land\u0131rma dosyas\u0131n\u0131 etkinle\u015ftir\n    if [ ! -L \"$REMOTE_NGINX_SYMLINK_PATH\" ]; then\n        sudo ln -s $REMOTE_NGINX_CONF_PATH $REMOTE_NGINX_SYMLINK_PATH\n        echo \"Yeni NGINX sitesi etkinle\u015ftirildi.\"\n    fi\n\n    # NGINX yap\u0131land\u0131rmas\u0131n\u0131 kontrol et ve yeniden y\u00fckle\n    echo \"NGINX yap\u0131land\u0131rmas\u0131 kontrol ediliyor ve yeniden y\u00fckleniyor...\"\n    sudo nginx -t && sudo systemctl reload nginx || { echo \"NGINX yap\u0131land\u0131rma hatas\u0131!\"; exit 1; }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, scriptin NGINX yap\u0131land\u0131rma dizinine \u00f6zel bir dosya kopyalamas\u0131n\u0131, <code class=\"language-bash\">sites-enabled<\/code> dizinine bir sembolik ba\u011flant\u0131 olu\u015fturarak onu etkinle\u015ftirmesini ve NGINX'i yeniden y\u00fcklemesini sa\u011fl\u0131yoruz. Ayr\u0131ca, web sitesi i\u00e7in bir dizin olu\u015fturup basit bir HTML dosyas\u0131 da ekliyoruz. <code class=\"language-bash\">${DOMAIN_NAME:-your_ec2_public_ip}<\/code> kullan\u0131m\u0131 ile, script \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken bir de\u011fi\u015fken tan\u0131mlanmam\u0131\u015fsa varsay\u0131lan bir de\u011fer kullan\u0131lmas\u0131n\u0131 sa\u011fl\u0131yoruz.<\/p>\n<h4>b. Ortam De\u011fi\u015fkenleri ve Parametreler Kullanma<\/h4>\n<p>Scriptinizi daha esnek hale getirmek i\u00e7in, \u00e7al\u0131\u015ft\u0131rma s\u0131ras\u0131nda parametreler veya ortam de\u011fi\u015fkenleri almas\u0131n\u0131 sa\u011flayabilirsiniz. \u00d6rne\u011fin, alan ad\u0131 veya web k\u00f6k dizini gibi bilgileri d\u0131\u015far\u0131dan besleyebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\n# Scripti \u015fu \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirsiniz:\n# DOMAIN_NAME=\"example.com\" WEB_ROOT=\"\/var\/www\/html\/project_x\" sudo .\/install_nginx.sh\n\n# Script i\u00e7inde bu de\u011fi\u015fkenleri kullanmak:\nDOMAIN_NAME=${DOMAIN_NAME:-\"localhost\"} # Varsay\u0131lan olarak localhost kullan\nWEB_ROOT=${WEB_ROOT:-\"\/var\/www\/html\"} # Varsay\u0131lan olarak \/var\/www\/html kullan\n\n# NGINX config i\u00e7inde kullan\u0131mlar:\n# server_name $DOMAIN_NAME;\n# root $WEB_ROOT;\n<\/pre>\n<p><\/code><\/p>\n<h3>2. Hata Y\u00f6netimi ve Sa\u011flamla\u015ft\u0131rma<\/h3>\n<p>Otomasyon scriptlerinin en \u00f6nemli par\u00e7alar\u0131ndan biri, olas\u0131 hatalar\u0131 \u00f6ng\u00f6rmek ve bunlara uygun \u015fekilde tepki vermektir. <code class=\"language-bash\">set -e<\/code> harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r, ancak daha fazlas\u0131n\u0131 yapabiliriz.<\/p>\n<h4>a. Loglama<\/h4>\n<p>Scriptinizin ne yapt\u0131\u011f\u0131n\u0131 ve nerede hata verdi\u011fini takip etmek i\u00e7in loglama \u00e7ok \u00f6nemlidir. Her \u00f6nemli ad\u0131m\u0131 veya hatay\u0131 bir dosyaya yazabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\nLOG_FILE=\"\/var\/log\/nginx_deployment.log\"\nexec &> >(tee -a \"$LOG_FILE\") # Hem konsola hem dosyaya yazd\u0131r\u0131r\n\nlog_message() {\n    echo \"$(date '+%Y-%m-%d %H:%M:%S') - $1\"\n}\n\n# Kullan\u0131m:\nlog_message \"NGINX kurulumu ba\u015flat\u0131ld\u0131.\"\n# ... komutlar ...\nif command -v nginx &> \/dev\/null; then\n    log_message \"NGINX zaten y\u00fckl\u00fc.\"\nelse\n    log_message \"NGINX y\u00fckleniyor...\"\n    sudo apt install nginx -y || log_message \"HATA: NGINX y\u00fcklemesi ba\u015far\u0131s\u0131z oldu!\" && exit 1\nfi\n<\/pre>\n<p><\/code><\/p>\n<h4>b. \u00d6nko\u015ful Kontrolleri<\/h4>\n<p>Scriptin \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli \u00f6nko\u015fullar\u0131n (\u00f6rne\u011fin internet ba\u011flant\u0131s\u0131, yeterli disk alan\u0131) kontrol edilmesi, daha sonra ortaya \u00e7\u0131kabilecek sorunlar\u0131 engeller.<\/p>\n<pre><code class=\"language-bash\">\ncheck_prerequisites() {\n    echo \"\u00d6nko\u015fullar kontrol ediliyor...\"\n    # \u0130nternet ba\u011flant\u0131s\u0131n\u0131 kontrol et\n    ping -c 1 google.com &> \/dev\/null || { echo \"HATA: \u0130nternet ba\u011flant\u0131s\u0131 yok!\"; exit 1; }\n    echo \"\u0130nternet ba\u011flant\u0131s\u0131 mevcut.\"\n\n    # Yeterli disk alan\u0131n\u0131 kontrol et (\u00f6rne\u011fin 1GB bo\u015f alan)\n    if (( $(df \/ --output=avail | tail -n 1) < 1000000 )); then\n        echo \"HATA: Yetersiz disk alan\u0131! En az 1GB bo\u015f alan gerekli.\"\n        exit 1\n    fi\n    echo \"Yeterli disk alan\u0131 mevcut.\"\n}\n\n# main() fonksiyonunda ilk \u00e7a\u011fr\u0131:\n# main() {\n#     check_prerequisites\n#     # ... di\u011fer fonksiyonlar ...\n# }\n<\/pre>\n<p><\/code><\/p>\n<h4>c. Idempotency (Tekrarlanabilirlik)<\/h4>\n<p>Scripti birden fazla kez \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde, her seferinde ayn\u0131 sonucu vermesi ve gereksiz i\u015flemleri tekrarlamamas\u0131 \u00f6nemlidir. Yukar\u0131daki <code class=\"language-bash\">if command -v nginx &> \/dev\/null;<\/code> kontrol\u00fc, idempotency'nin basit bir \u00f6rne\u011fidir. Benzer \u015fekilde, dosyalar\u0131n veya sembolik ba\u011flant\u0131lar\u0131n varl\u0131\u011f\u0131n\u0131 kontrol ederek sadece gerekti\u011finde i\u015flem yapabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\n# E\u011fer dosya zaten varsa yedekleme yap\nif [ -f \"\/etc\/nginx\/sites-available\/default\" ]; then\n    sudo cp \/etc\/nginx\/sites-available\/default \/etc\/nginx\/sites-available\/default.bak\nfi\n<\/pre>\n<p><\/code><\/p>\n<p>Bu geli\u015ftirmeler, Bash scriptinizi daha sa\u011flam, esnek ve ger\u00e7ek d\u00fcnya da\u011f\u0131t\u0131m senaryolar\u0131na uygun hale getirecektir. Unutmay\u0131n, iyi bir otomasyon scripti, sadece i\u015fi yapmakla kalmaz, ayn\u0131 zamanda olas\u0131 sorunlar\u0131 da y\u00f6netir.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Uygulamalar\u0131: Bir Vaka Analizi<\/h2>\n<p>Bir Bash scriptinin NGINX da\u011f\u0131t\u0131m\u0131n\u0131 nas\u0131l kolayla\u015ft\u0131rd\u0131\u011f\u0131n\u0131 daha iyi anlamak i\u00e7in, ger\u00e7ek bir senaryoyu ele alal\u0131m. Diyelim ki h\u0131zl\u0131 b\u00fcy\u00fcyen bir e-ticaret startup'\u0131 olan \"TrendyFinds\" i\u00e7in \u00e7al\u0131\u015f\u0131yorsunuz. TrendyFinds, \u00fcr\u00fcn kataloglar\u0131n\u0131, kullan\u0131c\u0131 profillerini ve \u00f6deme i\u015flemlerini y\u00f6neten \u00fc\u00e7 farkl\u0131 mikroservis mimarisine sahip. Her mikroservis kendi arka u\u00e7 servisi ile \u00e7al\u0131\u015f\u0131yor ve NGINX, bu servislere gelen trafi\u011fi y\u00f6nlendirmek, y\u00fck dengelemek ve SSL sonland\u0131rma yapmak i\u00e7in bir ters proxy olarak kullan\u0131l\u0131yor. Yeni bir geli\u015ftirme ortam\u0131 olu\u015fturmak veya mevcut bir ortam\u0131 \u00f6l\u00e7eklendirmek gerekti\u011finde, her mikroservis i\u00e7in ayr\u0131 bir NGINX yap\u0131land\u0131rmas\u0131 gerekiyor.<\/p>\n<h3>Mevcut Durum ve Kar\u015f\u0131la\u015f\u0131lan Zorluklar<\/h3>\n<p>TrendyFinds ba\u015flang\u0131\u00e7ta her bir NGINX sunucusunu manuel olarak yap\u0131land\u0131r\u0131yordu. Bu s\u00fcre\u00e7 a\u015fa\u011f\u0131daki zorluklar\u0131 beraberinde getiriyordu:<\/p>\n<ol>\n<li><strong>Zaman Kayb\u0131:<\/strong> Her yeni geli\u015ftirme veya staging ortam\u0131 i\u00e7in NGINX'i s\u0131f\u0131rdan kurmak ve yap\u0131land\u0131rmak (paket y\u00fckleme, yap\u0131land\u0131rma dosyalar\u0131n\u0131 kopyalama, domainleri ayarlama, SSL sertifikalar\u0131n\u0131 entegre etme) saatler s\u00fcr\u00fcyordu.<\/li>\n<li><strong>Hata Riski:<\/strong> Manuel ad\u0131mlar s\u0131ras\u0131nda yap\u0131land\u0131rma dosyalar\u0131nda typo (yaz\u0131m hatas\u0131) yap\u0131lmas\u0131, yanl\u0131\u015f portlar\u0131n atanmas\u0131 veya SSL sertifikalar\u0131n\u0131n hatal\u0131 y\u00fcklenmesi gibi insan kaynakl\u0131 hatalar s\u0131k\u00e7a ya\u015fan\u0131yordu. Bu hatalar, uygulama eri\u015filebilirli\u011fini etkiliyor ve hata ay\u0131klama i\u00e7in ek zaman gerektiriyordu.<\/li>\n<li><strong>Tutars\u0131zl\u0131k:<\/strong> Farkl\u0131 geli\u015ftiriciler veya sistem y\u00f6neticileri taraf\u0131ndan yap\u0131lan kurulumlar aras\u0131nda k\u00fc\u00e7\u00fck ama \u00f6nemli farkl\u0131l\u0131klar olabiliyordu. Bu tutars\u0131zl\u0131klar, \"benim makinemde \u00e7al\u0131\u015f\u0131yor\" sorunlar\u0131na ve farkl\u0131 ortamlarda beklenmedik davran\u0131\u015flara yol a\u00e7\u0131yordu.<\/li>\n<li><strong>\u00d6l\u00e7eklenebilirlik Sorunlar\u0131:<\/strong> Yeni \u00fcr\u00fcn lansmanlar\u0131 veya kampanya d\u00f6nemlerinde h\u0131zla yeni sunucular devreye almak gerekti\u011finde, manuel s\u00fcre\u00e7ler darbo\u011faz yarat\u0131yor, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini yava\u015flat\u0131yordu.<\/li>\n<\/ol>\n<h3>Bash Script ile Otomasyon \u00c7\u00f6z\u00fcm\u00fc<\/h3>\n<p>TrendyFinds, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in NGINX da\u011f\u0131t\u0131m\u0131n\u0131 Bash scriptleri ile otomatikle\u015ftirmeye karar verdi. Geli\u015ftirilen script, \u015fu yeteneklere sahipti:<\/p>\n<ol>\n<li><strong>Genel Kurulum ve Temel Yap\u0131land\u0131rma:<\/strong> Script, yeni bir Ubuntu tabanl\u0131 EC2 instance'\u0131nda NGINX'i kuruyor, temel g\u00fcvenlik duvar\u0131 ayarlar\u0131n\u0131 (UFW) yap\u0131yor ve NGINX hizmetini ba\u015flat\u0131yordu.<\/li>\n<li><strong>Dinamik Site Bloklar\u0131:<\/strong> Her mikroservis i\u00e7in \u00f6zel bir NGINX site blo\u011fu gerekiyordu. Script, parametre olarak al\u0131nan <code>SERVICE_NAME<\/code>, <code>DOMAIN_NAME<\/code> ve <code>UPSTREAM_PORT<\/code> gibi de\u011fi\u015fkenlerle dinamik NGINX yap\u0131land\u0131rma dosyalar\u0131 olu\u015fturabiliyordu. \u00d6rne\u011fin:\n<pre><code class=\"language-bash\">\n#!\/bin\/bash\n# install_nginx_service.sh\n\nSERVICE_NAME=$1\nDOMAIN_NAME=$2\nUPSTREAM_PORT=$3 # Mikroservisin \u00e7al\u0131\u015ft\u0131\u011f\u0131 port\n\nif [ -z \"$SERVICE_NAME\" ] || [ -z \"$DOMAIN_NAME\" ] || [ -z \"$UPSTREAM_PORT\" ]; then\n    echo \"Kullan\u0131m: $0 <servis_ad\u0131> <domain_ad\u0131> <upstream_port>\"\n    exit 1\nfi\n\necho \"NGINX ve UFW g\u00fcncellemeleri yap\u0131l\u0131yor...\"\nsudo apt update -y\nsudo apt install -y nginx ufw\n\n# UFW yap\u0131land\u0131rmas\u0131 (g\u00fcvenlik duvar\u0131)\nsudo ufw allow OpenSSH\nsudo ufw allow 'Nginx HTTP'\nsudo ufw allow 'Nginx HTTPS' # E\u011fer SSL kullan\u0131lacaksa\nsudo ufw --force enable\n\n# NGINX site yap\u0131land\u0131rmas\u0131n\u0131 olu\u015ftur\nNGINX_CONF_PATH=\"\/etc\/nginx\/sites-available\/${SERVICE_NAME}.conf\"\nNGINX_SYMLINK_PATH=\"\/etc\/nginx\/sites-enabled\/${SERVICE_NAME}.conf\"\n\necho \"NGINX yap\u0131land\u0131rmas\u0131 olu\u015fturuluyor: $NGINX_CONF_PATH\"\necho \"\nserver {\n    listen 80;\n    server_name $DOMAIN_NAME;\n\n    location \/ {\n        proxy_pass http:\/\/localhost:$UPSTREAM_PORT;\n        proxy_set_header Host \\$host;\n        proxy_set_header X-Real-IP \\$remote_addr;\n        proxy_set_header X-Forwarded-For \\$proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto \\$scheme;\n    }\n\n    # SSL\/TLS i\u00e7in ileri d\u00fczey yap\u0131land\u0131rmalar buraya eklenebilir.\n}\n\" | sudo tee $NGINX_CONF_PATH > \/dev\/null\n\n# Mevcut default siteyi devre d\u0131\u015f\u0131 b\u0131rak\nif [ -f \"\/etc\/nginx\/sites-enabled\/default\" ]; then\n    sudo rm \"\/etc\/nginx\/sites-enabled\/default\"\nfi\n\n# Yeni siteyi etkinle\u015ftir\nif [ ! -L \"$NGINX_SYMLINK_PATH\" ]; then\n    sudo ln -s $NGINX_CONF_PATH $NGINX_SYMLINK_PATH\nfi\n\necho \"NGINX yap\u0131land\u0131rmas\u0131 test ediliyor...\"\nsudo nginx -t\n\nif [ $? -eq 0 ]; then\n    echo \"NGINX yap\u0131land\u0131rmas\u0131 ba\u015far\u0131l\u0131. Servis yeniden ba\u015flat\u0131l\u0131yor...\"\n    sudo systemctl reload nginx\n    echo \"NGINX servisi yeniden ba\u015flat\u0131ld\u0131. $DOMAIN_NAME art\u0131k $UPSTREAM_PORT \u00fczerinden servise y\u00f6nlendiriliyor.\"\nelse\n    echo \"HATA: NGINX yap\u0131land\u0131rma hatas\u0131 olu\u015ftu. L\u00fctfen kontrol edin.\"\n    exit 1\nfi\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu scripti \u015fu \u015fekilde \u00e7al\u0131\u015ft\u0131rabilirlerdi: <code class=\"language-bash\">sudo .\/install_nginx_service.sh products-api api.trendyfinds.com 3001<\/code><\/p>\n<\/li>\n<li><strong>SSL\/TLS Otomasyonu (\u0130leri D\u00fczey):<\/strong> Script, Let's Encrypt'in Certbot arac\u0131 ile otomatik olarak SSL sertifikalar\u0131 al\u0131p NGINX'e entegre edebiliyordu. Bu, <code class=\"language-bash\">certbot --nginx -d example.com<\/code> gibi komutlar\u0131n otomasyonuyla sa\u011flan\u0131yordu.<\/li>\n<li><strong>Hata Kontrol\u00fc ve Geri D\u00f6n\u00fc\u015f:<\/strong> Script, her \u00f6nemli ad\u0131mda hata kontrol\u00fc yap\u0131yor ve bir hata durumunda kullan\u0131c\u0131y\u0131 bilgilendirerek s\u00fcreci durduruyordu.<\/li>\n<\/ol>\n<h3>Elde Edilen Faydalar<\/h3>\n<p>Bu otomasyon sayesinde TrendyFinds, \u00f6nemli \u00f6l\u00e7\u00fcde fayda sa\u011flad\u0131:<\/p>\n<ul>\n<li><strong>Da\u011f\u0131t\u0131m H\u0131z\u0131nda %80 Art\u0131\u015f:<\/strong> Manuel kurulumlar yerine script ile NGINX da\u011f\u0131t\u0131m\u0131 dakikalar i\u00e7inde tamamlanabiliyordu.<\/li>\n<li><strong>Hata Oran\u0131nda Azalma:<\/strong> \u0130nsan kaynakl\u0131 hatalar minimuma indi, \u00e7\u00fcnk\u00fc script her zaman ayn\u0131 do\u011fru ad\u0131mlar\u0131 uyguluyordu.<\/li>\n<li><strong>Tam Tutarl\u0131l\u0131k:<\/strong> T\u00fcm geli\u015ftirme, staging ve \u00fcretim ortamlar\u0131ndaki NGINX yap\u0131land\u0131rmalar\u0131 tamamen tutarl\u0131 hale geldi.<\/li>\n<li><strong>Kolay \u00d6l\u00e7eklendirme:<\/strong> Yeni bir mikroservis veya ortam ihtiyac\u0131 do\u011fdu\u011funda, mevcut scriptler k\u00fc\u00e7\u00fck parametre de\u011fi\u015fiklikleri ile h\u0131zla yeni NGINX instance'lar\u0131n\u0131 devreye alabiliyordu. Bu, i\u015f y\u00fck\u00fcn\u00fc ciddi \u00f6l\u00e7\u00fcde hafifletti ve yeni projelerin pazara s\u00fcr\u00fclme s\u00fcresini k\u0131saltt\u0131.<\/li>\n<li><strong>Geli\u015ftirici \u00dcretkenli\u011fi:<\/strong> Geli\u015ftiriciler, altyap\u0131 kurulumuyla u\u011fra\u015fmak yerine do\u011frudan kod yazmaya ve uygulama geli\u015ftirmeye odaklanabildi.<\/li>\n<\/ul>\n<p>Bu vaka analizi, Bash scriptlerinin NGINX da\u011f\u0131t\u0131m\u0131n\u0131 AWS EC2 \u00fczerinde nas\u0131l d\u00f6n\u00fc\u015ft\u00fcrebilece\u011fini ve bir \u015firkete somut operasyonel faydalar sa\u011flayabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Basit bir otomasyon arac\u0131 gibi g\u00f6r\u00fcnse de, Bash scriptleri do\u011fru kullan\u0131ld\u0131\u011f\u0131nda b\u00fcy\u00fck bir etki yaratabilir.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Bash scriptleri ile NGINX da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirme s\u00fcrecinde daha da ileri gitmek ve scriptlerinizi daha sa\u011flam, g\u00fcvenli ve verimli hale getirmek i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar mevcuttur. Bu b\u00f6l\u00fcmde, deneyimli kullan\u0131c\u0131lar i\u00e7in de\u011ferli olabilecek konulara de\u011finece\u011fiz.<\/p>\n<h3>1. \u0130dempotency (Tekrarlanabilirlik)<\/h3>\n<p>Bir scriptin idempotent olmas\u0131, birden fazla kez \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda ayn\u0131 sonucu vermesi ve sistem \u00fczerinde ek bir de\u011fi\u015fiklik yapmamas\u0131 anlam\u0131na gelir. \u00d6rne\u011fin, NGINX zaten kuruluysa, scriptin tekrar kurmaya \u00e7al\u0131\u015fmamas\u0131 gerekir. Daha \u00f6nce bahsetti\u011fimiz <code class=\"language-bash\">if command -v nginx &> \/dev\/null;<\/code> kontrol\u00fc bunun basit bir \u00f6rne\u011fidir. Benzer kontrolleri dosyalar\u0131n varl\u0131\u011f\u0131, servislerin durumu veya sembolik ba\u011flant\u0131lar\u0131n mevcudiyeti i\u00e7in de uygulayarak scriptinizi daha ak\u0131ll\u0131 hale getirebilirsiniz.<\/p>\n<pre><code class=\"language-bash\">\n# NGINX servisinin zaten \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol et\nif systemctl is-active --quiet nginx; then\n    echo \"NGINX servisi zaten \u00e7al\u0131\u015f\u0131yor.\"\nelse\n    echo \"NGINX servisi ba\u015flat\u0131l\u0131yor...\"\n    sudo systemctl start nginx\nfi\n<\/pre>\n<p><\/code><\/p>\n<h3>2. Kullan\u0131c\u0131 Verileri (User Data) ile Entegrasyon<\/h3>\n<p>AWS EC2 instance'lar\u0131 ba\u015flat\u0131l\u0131rken \"User Data\" ad\u0131 verilen bir mekanizma arac\u0131l\u0131\u011f\u0131yla ilk a\u00e7\u0131l\u0131\u015fta \u00e7al\u0131\u015ft\u0131r\u0131lacak scriptleri kabul edebilir. Bu, scriptinizi bir EC2 instance'\u0131na manuel olarak SSH ile ba\u011flan\u0131p \u00e7al\u0131\u015ft\u0131rmak yerine, instance ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak NGINX kurulumunun ger\u00e7ekle\u015fmesini sa\u011flar. Bu, daha \"serverless\" bir da\u011f\u0131t\u0131m yakla\u015f\u0131m\u0131 sunar.<\/p>\n<pre><code class=\"language-bash\">\n# EC2 User Data \u00f6rne\u011fi (bir .txt dosyas\u0131 olarak)\n#!\/bin\/bash\n# T\u00fcm g\u00fcncellemeleri yap\nsudo apt update -y\nsudo apt upgrade -y\n\n# NGINX'i kur\nsudo apt install nginx -y\n\n# NGINX servisini ba\u015flat ve etkinle\u015ftir\nsudo systemctl start nginx\nsudo systemctl enable nginx\n\n# \u00d6zel bir index.html dosyas\u0131 olu\u015ftur\necho \"<h1>Otomatik Da\u011f\u0131t\u0131lm\u0131\u015f NGINX Sayfas\u0131!<\/h1>\" | sudo tee \/var\/www\/html\/index.html\n\n# Di\u011fer yap\u0131land\u0131rma ad\u0131mlar\u0131...\n<\/pre>\n<p><\/code><\/p>\n<p>Bu scripti EC2 instance'\u0131 ba\u015flat\u0131l\u0131rken \"Advanced details\" alt\u0131ndaki \"User data\" alan\u0131na yap\u0131\u015ft\u0131rabilirsiniz. Bu sayede, instance haz\u0131r oldu\u011funda NGINX de kurulu ve \u00e7al\u0131\u015f\u0131r durumda olacakt\u0131r.<\/p>\n<p><span class=\"expert-tip\">Uzman \u0130pucu: User Data scriptleri root yetkileriyle \u00e7al\u0131\u015f\u0131r. Bu y\u00fczden i\u00e7erdikleri komutlara dikkat edilmelidir.<\/span><\/p>\n<h3>3. Hata Ay\u0131klama ve Geli\u015fmi\u015f Loglama<\/h3>\n<p>Scriptlerde hata ay\u0131klama (debugging) ve kapsaml\u0131 loglama, karma\u015f\u0131k sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in hayati \u00f6neme sahiptir. <code class=\"language-bash\">set -x<\/code> komutu, Bash'in \u00e7al\u0131\u015ft\u0131\u011f\u0131 her komutu ve arg\u00fcmanlar\u0131n\u0131 \u00e7\u0131kt\u0131ya yazmas\u0131n\u0131 sa\u011flayarak hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-bash\">\n#!\/bin\/bash\nset -ex # x bayra\u011f\u0131 debugging i\u00e7in\nLOG_FILE=\"\/var\/log\/nginx_deployment.log\"\nexec &> >(tee -a \"$LOG_FILE\")\n\n# ... script i\u00e7eri\u011fi ...\n<\/pre>\n<p><\/code><\/p>\n<p>Ayr\u0131ca, her ad\u0131m\u0131n ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol eden <code class=\"language-bash\">if [ $? -ne 0 ]<\/code> yap\u0131lar\u0131n\u0131 kullanarak belirli hatalara \u00f6zel mesajlar verebilirsiniz.<\/p>\n<h3>4. G\u00fcvenlik En \u0130yi Uygulamalar\u0131<\/h3>\n<ul>\n<li><strong>Sudo Kullan\u0131m\u0131:<\/strong> Scriptlerinizde <code class=\"language-bash\">sudo<\/code> komutunu sadece ger\u00e7ekten root yetkileri gerektiren i\u015flemler i\u00e7in kullan\u0131n. Gereksiz yere t\u00fcm scripti <code class=\"language-bash\">sudo<\/code> ile \u00e7al\u0131\u015ft\u0131rmay\u0131n.<\/li>\n<li><strong>Anahtar Y\u00f6netimi:<\/strong> SSH anahtarlar\u0131n\u0131z\u0131 (<code>.pem<\/code> dosyalar\u0131) asla scriptin i\u00e7ine g\u00f6mmeyin. Her zaman harici olarak y\u00f6netin ve uygun izinlerle (<code class=\"language-bash\">chmod 400<\/code>) koruyun.<\/li>\n<li><strong>Ortam De\u011fi\u015fkenleri:<\/strong> Hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131) do\u011frudan script i\u00e7ine yazmaktan ka\u00e7\u0131n\u0131n. Bunun yerine, bunlar\u0131 ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla veya daha g\u00fcvenli bir \u015fekilde AWS Secrets Manager gibi hizmetler arac\u0131l\u0131\u011f\u0131yla besleyin.<\/li>\n<li><strong>Least Privilege (En Az Ayr\u0131cal\u0131k):<\/strong> EC2 instance'\u0131n\u0131z i\u00e7in olu\u015fturdu\u011funuz IAM Rollerini ve G\u00fcvenlik Gruplar\u0131n\u0131 sadece gerekli olan minimum izinleri verecek \u015fekilde yap\u0131land\u0131r\u0131n. \u00d6rne\u011fin, sadece 80 ve 443 portlar\u0131na internetten eri\u015fim izni verin.<\/li>\n<\/ul>\n<h3>5. Konfig\u00fcrasyon Y\u00f6netim Ara\u00e7lar\u0131 ve CI\/CD Entegrasyonu<\/h3>\n<p>Bash scriptleri h\u0131zl\u0131 ve esnek olsalar da, \u00e7ok b\u00fcy\u00fck veya karma\u015f\u0131k altyap\u0131lar i\u00e7in daha geli\u015fmi\u015f konfig\u00fcrasyon y\u00f6netim ara\u00e7lar\u0131 (Ansible, Chef, Puppet, SaltStack) daha uygun olabilir. Bu ara\u00e7lar, idempotency, durum y\u00f6netimi ve \u00e7apraz platform deste\u011fi gibi konularda daha g\u00fc\u00e7l\u00fc yetenekler sunar.<\/p>\n<p>Scriptlerinizi bir S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) hatt\u0131na entegre etmek, otomasyonunuzu bir sonraki seviyeye ta\u015f\u0131r. Gitlab CI, Jenkins, AWS CodePipeline gibi ara\u00e7lar ile kod de\u011fi\u015fiklikleri tetiklendi\u011finde otomatik olarak NGINX da\u011f\u0131t\u0131m scriptlerinizi \u00e7al\u0131\u015ft\u0131rabilir, test edebilir ve devreye alabilirsiniz.<\/p>\n<h3>6. Mobil Uyumlu HTML ve NGINX<\/h3>\n<p>NGINX do\u011frudan mobil uyumlu HTML \u00fcretmez, ancak mobil uyumlu web sitelerinin sunulmas\u0131nda kritik bir rol oynar. NGINX yap\u0131land\u0131rman\u0131z, statik dosyalar\u0131 (HTML, CSS, JS) h\u0131zl\u0131 bir \u015fekilde sunarak mobil cihazlarda site performans\u0131n\u0131 art\u0131rabilir. Mobil uyumlu tasar\u0131mlar i\u00e7in CSS <code class=\"language-css\">@media<\/code> kurallar\u0131n\u0131 kullanmak esast\u0131r. \u00d6rne\u011fin, farkl\u0131 ekran boyutlar\u0131na g\u00f6re elementlerin d\u00fczenini de\u011fi\u015ftirebilirsiniz:<\/p>\n<pre><code class=\"language-css\">\n\/* \u00d6rnek bir CSS media query *\/\n@media (max-width: 768px) {\n  .container {\n    flex-direction: column; \/* K\u00fc\u00e7\u00fck ekranlarda elementleri dikey s\u0131rala *\/\n  }\n  .sidebar {\n    display: none; \/* Yan men\u00fcy\u00fc k\u00fc\u00e7\u00fck ekranlarda gizle *\/\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, 768 pikselden daha k\u00fc\u00e7\u00fck ekranlarda belirli CSS kurallar\u0131n\u0131n uygulanmas\u0131n\u0131 sa\u011flar. NGINX sunucunuz, bu CSS dosyalar\u0131n\u0131 h\u0131zl\u0131 bir \u015fekilde istemcilere ula\u015ft\u0131rarak mobil uyumlulu\u011fun sorunsuz \u00e7al\u0131\u015fmas\u0131na katk\u0131da bulunur. Bu t\u00fcr kurallar genellikle sitenizin <code class=\"language-html\"><head><\/code> b\u00f6l\u00fcm\u00fcndeki <code class=\"language-html\"><\/p>\n<style><\/code> etiketi i\u00e7inde veya harici bir CSS dosyas\u0131nda bulunur.<\/p>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar, Bash scriptlerinizi daha etkili ve g\u00fcvenli hale getirerek, AWS EC2 \u00fczerinde NGINX da\u011f\u0131t\u0131m otomasyonunda profesyonel bir yakla\u015f\u0131m benimsemenizi sa\u011flayacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makale boyunca, AWS EC2 sunucular\u0131 \u00fczerinde NGINX da\u011f\u0131t\u0131m\u0131n\u0131 Bash scriptleri kullanarak nas\u0131l otomatikle\u015ftirebilece\u011fimizi derinlemesine inceledik. Manuel kurulumun getirdi\u011fi zaman kayb\u0131, hata riski ve tutars\u0131zl\u0131k sorunlar\u0131n\u0131 otomasyon ile nas\u0131l a\u015fabilece\u011fimizi g\u00f6rd\u00fck. NGINX, EC2 ve Bash scripting'in temel kavramlar\u0131ndan, ad\u0131m ad\u0131m kurulum rehberine, dinamik yap\u0131land\u0131rma ve hata y\u00f6netimi ipu\u00e7lar\u0131na kadar bir\u00e7ok konuyu ele ald\u0131k. TrendyFinds \u00f6rne\u011fi \u00fczerinden ger\u00e7ek d\u00fcnya uygulamalar\u0131n\u0131 de\u011ferlendirerek, otomasyonun bir i\u015fletmeye nas\u0131l somut faydalar sa\u011flayabilece\u011fini g\u00f6zlemledik.<\/p>\n<p>Bash scriptleri ile otomasyon, k\u00fc\u00e7\u00fckten b\u00fcy\u00fc\u011fe her t\u00fcrl\u00fc altyap\u0131da tutarl\u0131l\u0131k, h\u0131z ve g\u00fcvenilirlik sa\u011flar. Geli\u015ftirici \u00fcretkenli\u011fini art\u0131r\u0131r, operasyonel y\u00fck\u00fc azalt\u0131r ve \u00f6l\u00e7eklenebilir sistemler kurman\u0131n temelini olu\u015fturur. Ancak, her ara\u00e7ta oldu\u011fu gibi, Bash scriptlerini kullan\u0131rken de g\u00fcvenlik, idempotency ve hata y\u00f6netimi gibi en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak kritiktir. Bu makaledeki bilgileri kullanarak, kendi AWS EC2 ortam\u0131n\u0131zda NGINX da\u011f\u0131t\u0131m\u0131n\u0131 ba\u015far\u0131yla otomatikle\u015ftirebilece\u011finizi umuyoruz. Unutmay\u0131n, otomasyon yolculu\u011fu bir ba\u015flang\u0131\u00e7t\u0131r ve s\u00fcrekli iyile\u015ftirme ile daha ileri seviyelere ta\u015f\u0131nabilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Bash script yerine neden Ansible gibi bir ara\u00e7 kullanmal\u0131y\u0131m?<\/strong><\/p>\n<p>Bash scriptleri h\u0131zl\u0131 ve kolay ba\u015flang\u0131\u00e7 i\u00e7in harikad\u0131r, ancak b\u00fcy\u00fck ve karma\u015f\u0131k altyap\u0131lar i\u00e7in Ansible, Chef veya Puppet gibi konfig\u00fcrasyon y\u00f6netim ara\u00e7lar\u0131 daha iyidir. Bu ara\u00e7lar, idempotency (i\u015flemlerin tekrarlanabilirli\u011fi), \u00e7apraz platform deste\u011fi, daha zengin hata y\u00f6netimi ve daha okunabilir\/s\u00fcrd\u00fcr\u00fclebilir bir yap\u0131land\u0131rma dili sunar. Bash scriptleri genellikle belirli bir dizi g\u00f6revi otomatikle\u015ftirmek i\u00e7in uygunken, konfig\u00fcrasyon y\u00f6netim ara\u00e7lar\u0131 sunucular\u0131n genel durumunu y\u00f6netmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<p><strong>2. NGINX kurulum scriptimi nas\u0131l daha g\u00fcvenli hale getirebilirim?<\/strong><\/p>\n<p>G\u00fcvenli\u011fi art\u0131rmak i\u00e7in:<\/p>\n<ul>\n<li>Script i\u00e7inde hassas bilgileri (\u015fifreler, API anahtarlar\u0131) do\u011frudan bulundurmay\u0131n. Bunlar\u0131 AWS Secrets Manager veya ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla besleyin.<\/li>\n<li><code class=\"language-bash\">sudo<\/code> kullan\u0131m\u0131n\u0131 minimumda tutun, sadece gerekli komutlar i\u00e7in kullan\u0131n.<\/li>\n<li>EC2 G\u00fcvenlik Grubunuzu en az ayr\u0131cal\u0131k prensibine g\u00f6re yap\u0131land\u0131r\u0131n (\u00f6rne\u011fin, SSH'e sadece belirli IP'lerden izin verin).<\/li>\n<li>Sertifika y\u00f6netimi i\u00e7in Certbot gibi ara\u00e7lar\u0131 kullanarak SSL\/TLS sertifikalar\u0131n\u0131 otomatikle\u015ftirin ve yenileyin.<\/li>\n<li>Scriptinizi bir CI\/CD hatt\u0131na entegre ederek g\u00fcvenlik taramalar\u0131ndan ge\u00e7irin.<\/li>\n<\/ul>\n<p><strong>3. Scriptim hata verdi\u011finde nas\u0131l hata ay\u0131klama yapabilirim?<\/strong><\/p>\n<p>Scriptiniz hata verdi\u011finde, a\u015fa\u011f\u0131daki y\u00f6ntemleri deneyebilirsiniz:<\/p>\n<ul>\n<li>Scriptin ba\u015f\u0131na <code class=\"language-bash\">set -ex<\/code> ekleyin. <code class=\"language-bash\">-e<\/code> hatada durmay\u0131, <code class=\"language-bash\">-x<\/code> ise her komutu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce ekrana yazd\u0131rmay\u0131 sa\u011flar. Bu, hatan\u0131n nerede meydana geldi\u011fini g\u00f6rmenize yard\u0131mc\u0131 olur.<\/li>\n<li>Scriptin \u00e7\u0131kt\u0131s\u0131n\u0131 bir log dosyas\u0131na y\u00f6nlendirin (<code class=\"language-bash\">exec &> >(tee -a \"$LOG_FILE\")<\/code>).<\/li>\n<li>Her kritik ad\u0131mdan sonra <code class=\"language-bash\">echo \"Ad\u0131m X tamamland\u0131\"<\/code> gibi mesajlar ekleyerek ilerlemeyi takip edin.<\/li>\n<li><code class=\"language-bash\">$?<\/code> \u00f6zel de\u011fi\u015fkenini kullanarak son komutun \u00e7\u0131k\u0131\u015f kodunu kontrol edin. S\u0131f\u0131r olmayan bir de\u011fer hata oldu\u011funu g\u00f6sterir.<\/li>\n<li>EC2 instance'\u0131n\u0131z\u0131n sistem loglar\u0131n\u0131 (\u00f6rn. <code class=\"language-bash\">\/var\/log\/syslog<\/code>, <code class=\"language-bash\">\/var\/log\/cloud-init-output.log<\/code>) inceleyin.<\/li>\n<\/ul>\n<p><strong>4. NGINX yap\u0131land\u0131rma dosyalar\u0131m\u0131 otomatik olarak nas\u0131l g\u00fcncelleyebilirim?<\/strong><\/p>\n<p>Yap\u0131land\u0131rma dosyalar\u0131n\u0131 g\u00fcncellemek i\u00e7in:<\/p>\n<ul>\n<li>Scriptinizde <code class=\"language-bash\">scp<\/code> komutunu kullanarak yerel makinenizdeki g\u00fcncel yap\u0131land\u0131rma dosyalar\u0131n\u0131 EC2'ye kopyalay\u0131n.<\/li>\n<li>Dosyalar\u0131 kopyalad\u0131ktan sonra <code class=\"language-bash\">sudo nginx -t<\/code> ile sentaks kontrol\u00fc yap\u0131n.<\/li>\n<li>E\u011fer sentaks ge\u00e7erliyse, <code class=\"language-bash\">sudo systemctl reload nginx<\/code> komutuyla NGINX'i yeniden y\u00fckleyerek yeni yap\u0131land\u0131rmay\u0131 etkinle\u015ftirin. Bu, servisi kesintiye u\u011fratmadan de\u011fi\u015fiklikleri uygular.<\/li>\n<li>Alternatif olarak, yap\u0131land\u0131rma dosyalar\u0131n\u0131 bir s\u00fcr\u00fcm kontrol sisteminde (Git) tutabilir ve script ile <code class=\"language-bash\">git clone<\/code> veya <code class=\"language-bash\">git pull<\/code> yaparak g\u00fcncelleyebilirsiniz.<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7&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":[1328],"tags":[],"class_list":{"0":"post-34269","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-bash","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>AWS EC2&#039;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi<\/title>\n<meta name=\"description\" content=\"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.\" \/>\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\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS EC2&#039;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi\" \/>\n<meta property=\"og:description\" content=\"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-14T01:01:20+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=\"34 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"AWS EC2&#8217;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi\",\"datePublished\":\"2025-11-14T01:01:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\"},\"wordCount\":5081,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Bash\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\",\"name\":\"AWS EC2'de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-14T01:01:20+00:00\",\"description\":\"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS EC2&#8217;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi\"}]},{\"@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":"AWS EC2'de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi","description":"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.","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\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"AWS EC2'de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi","og_description":"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-14T01:01:20+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"34 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"AWS EC2&#8217;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi","datePublished":"2025-11-14T01:01:20+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/"},"wordCount":5081,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Bash"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/","name":"AWS EC2'de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-14T01:01:20+00:00","description":"AWS EC2 sunucular\u0131 \u00fczerinde NGINX kurulumu ve yap\u0131land\u0131rmas\u0131, manuel olarak yap\u0131ld\u0131\u011f\u0131nda zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7 olabilir. Bu makale, Bash script kullanarak bu s\u00fcreci nas\u0131l otomatikle\u015ftirece\u011finizi, hem yeni ba\u015flayanlar hem de deneyimli kullan\u0131c\u0131lar i\u00e7in ad\u0131m ad\u0131m pratik \u00f6rneklerle a\u00e7\u0131klayarak, da\u011f\u0131t\u0131m h\u0131z\u0131n\u0131z\u0131 ve tutarl\u0131l\u0131\u011f\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131z\u0131 sa\u011flayacakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/aws-ec2de-nginx-otomatik-kurulumu-bash-script-ile-hizlandirma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS EC2&#8217;de NGINX Otomatik Kurulumu: Bash Script ile H\u0131zland\u0131rma Rehberi"}]},{"@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\/34269","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=34269"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34269\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}