{"id":34347,"date":"2025-11-15T12:40:45","date_gmt":"2025-11-15T09:40:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34347"},"modified":"2025-11-15T12:40:45","modified_gmt":"2025-11-15T09:40:45","slug":"go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/","title":{"rendered":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, web uygulamalar\u0131n\u0131n h\u0131zl\u0131, g\u00fcvenilir ve \u00f6l\u00e7eklenebilir olmas\u0131 b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r. Go (Golang), Google taraf\u0131ndan geli\u015ftirilen, e\u015fzamanl\u0131l\u0131k yetenekleri, y\u00fcksek performans\u0131 ve basitli\u011fi sayesinde modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler bir dil haline gelmi\u015ftir. \u00d6zellikle mikro servis mimarileri ve y\u00fcksek trafikli sistemler i\u00e7in tercih edilen Go, derlenmi\u015f bir dil oldu\u011fu i\u00e7in d\u00fc\u015f\u00fck seviyeli kaynak kullan\u0131m\u0131 ve h\u0131zl\u0131 ba\u015flang\u0131\u00e7 s\u00fcreleri sunar.<\/p>\n<p>Ancak bir Go web uygulamas\u0131n\u0131 geli\u015ftirmek kadar, onu \u00fcretim ortam\u0131na do\u011fru bir \u015fekilde da\u011f\u0131tmak da kritik bir ad\u0131md\u0131r. Bu noktada Nginx gibi g\u00fc\u00e7l\u00fc bir ters proxy sunucu devreye girer. Nginx, statik dosya sunumu, y\u00fck dengeleme, SSL\/TLS sonland\u0131rma ve \u00f6zellikle Go uygulamalar\u0131 gibi arka u\u00e7 servisleri i\u00e7in ters proxy g\u00f6revi g\u00f6rerek uygulaman\u0131n do\u011frudan internete a\u00e7\u0131k olmas\u0131n\u0131n getirdi\u011fi g\u00fcvenlik risklerini azalt\u0131r ve performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p>Bu rehber, Go web uygulaman\u0131z\u0131 Ubuntu 18.04 i\u015fletim sistemi \u00fczerinde Nginx kullanarak nas\u0131l da\u011f\u0131tabilece\u011finizi ad\u0131m ad\u0131m detayland\u0131rmaktad\u0131r. Ubuntu 18.04, uzun s\u00fcreli destek (LTS) sunan stabil bir s\u00fcr\u00fcm oldu\u011fu i\u00e7in \u00fcretim ortamlar\u0131nda s\u0131k\u00e7a tercih edilmektedir. Bu makalede, Go uygulaman\u0131z\u0131n haz\u0131rlanmas\u0131ndan, systemd ile servis olarak \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na, Nginx ile ters proxy yap\u0131land\u0131rmas\u0131na ve SSL\/TLS g\u00fcvenli\u011finin sa\u011flanmas\u0131na kadar t\u00fcm s\u00fcre\u00e7leri ele alaca\u011f\u0131z. Amac\u0131m\u0131z, Go uygulaman\u0131z\u0131n g\u00fcvenli, verimli ve profesyonel bir \u015fekilde canl\u0131ya al\u0131nmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n ko\u015fullar\u0131n yerine getirilmi\u015f olmas\u0131 gerekmektedir:<\/p>\n<p>*   <strong>Ubuntu 18.04 Sunucusu:<\/strong> SSH eri\u015fimi olan ve <code>sudo<\/code> yetkilerine sahip bir Ubuntu 18.04 sunucusuna ihtiyac\u0131n\u0131z var.<br \/>\n*   <strong>Domain Ad\u0131:<\/strong> Uygulaman\u0131za eri\u015fmek i\u00e7in yap\u0131land\u0131r\u0131lm\u0131\u015f bir alan ad\u0131n\u0131z olmal\u0131d\u0131r (\u00f6rne\u011fin, <code>ornekuygulama.com<\/code>). Bu alan ad\u0131n\u0131n DNS kay\u0131tlar\u0131 sunucunuzun IP adresini i\u015faret etmelidir.<br \/>\n*   <strong>Go Derleyici:<\/strong> Sunucunuzda Go derleyicisinin kurulu olmas\u0131 gerekmektedir. E\u011fer kurulu de\u011filse, sonraki b\u00f6l\u00fcmde nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 anlataca\u011f\u0131z.<br \/>\n*   <strong>Nginx:<\/strong> Nginx web sunucusunun kurulu olmas\u0131 gerekmektedir. E\u011fer kurulu de\u011filse, ilgili b\u00f6l\u00fcmde kurulum ad\u0131mlar\u0131n\u0131 bulabilirsiniz.<br \/>\n*   <strong>Basit Bir Go Web Uygulamas\u0131:<\/strong> Da\u011f\u0131t\u0131m\u0131 yap\u0131lacak basit bir Go web uygulaman\u0131z\u0131n olmas\u0131. Bu rehber i\u00e7in \u00f6rnek bir uygulama olu\u015fturaca\u011f\u0131z.<\/p>\n<h3>Go Ortam\u0131n\u0131 Haz\u0131rlama<\/h3>\n<p>Go uygulaman\u0131z\u0131 da\u011f\u0131tmadan \u00f6nce sunucunuzda Go geli\u015ftirme ortam\u0131n\u0131n do\u011fru \u015fekilde kuruldu\u011fundan emin olmal\u0131y\u0131z.<\/p>\n<h4>Go Kurulumu (Gerekliyse)<\/h4>\n<p>E\u011fer Go sunucunuzda kurulu de\u011filse, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek kurabilirsiniz. Bu rehber yaz\u0131ld\u0131\u011f\u0131 s\u0131rada Go&#8217;nun en son stabil s\u00fcr\u00fcm\u00fcn\u00fc kurmak en iyisidir, ancak Ubuntu 18.04&#8217;\u00fcn varsay\u0131lan depolar\u0131nda genellikle daha eski bir s\u00fcr\u00fcm bulunur. En g\u00fcncel s\u00fcr\u00fcm\u00fc kurmak i\u00e7in resmi web sitesinden indirmek daha iyi bir y\u00f6ntemdir.<\/p>\n<p>1.  <strong>G\u00fcncel Go S\u00fcr\u00fcm\u00fcn\u00fc \u0130ndirme:<\/strong><br \/>\n    Go&#8217;nun resmi web sitesinden (https:\/\/golang.org\/dl\/) en son stabil s\u00fcr\u00fcm\u00fcn tarball dosyas\u0131n\u0131n indirme ba\u011flant\u0131s\u0131n\u0131 kopyalay\u0131n. Ard\u0131ndan sunucunuzda <code>wget<\/code> ile indirin:<\/p>\n<pre><code class=\"language-bash\">wget https:\/\/golang.org\/dl\/go1.x.x.linux-amd64.tar.gz<\/code><\/pre>\n<p>    (Burada <code>go1.x.x<\/code> yerine g\u00fcncel s\u00fcr\u00fcm numaras\u0131n\u0131 yazmal\u0131s\u0131n\u0131z, \u00f6rne\u011fin <code>go1.22.1<\/code>).<\/p>\n<p>2.  <strong>Tarball Dosyas\u0131n\u0131 \u00c7\u0131karma:<\/strong><br \/>\n    \u0130ndirdi\u011finiz dosyay\u0131 <code>\/usr\/local<\/code> dizinine \u00e7\u0131kar\u0131n. Bu dizin, Go gibi \u00fc\u00e7\u00fcnc\u00fc taraf yaz\u0131l\u0131mlar i\u00e7in standart bir konumdur.<\/p>\n<pre><code class=\"language-bash\">sudo tar -C \/usr\/local -xzf go1.x.x.linux-amd64.tar.gz<\/code><\/pre>\n<p>3.  <strong>Ortam De\u011fi\u015fkenlerini Ayarlama:<\/strong><br \/>\n    Go&#8217;nun \u00e7al\u0131\u015fabilmesi i\u00e7in <code>PATH<\/code> ortam de\u011fi\u015fkenini g\u00fcncellemeniz gerekmektedir. Bunu, kullan\u0131c\u0131 profilinize veya sistem genelinde <code>profile<\/code> dosyas\u0131na ekleyerek yapabilirsiniz. Genellikle kullan\u0131c\u0131n\u0131n <code>.profile<\/code> veya <code>.bashrc<\/code> dosyas\u0131na eklemek yeterlidir.<\/p>\n<pre><code class=\"language-bash\">echo \"export PATH=$PATH:\/usr\/local\/go\/bin\" >> ~\/.profile\n    source ~\/.profile<\/code><\/pre>\n<p>    Bu komut, Go&#8217;nun <code>bin<\/code> dizinini <code>PATH<\/code> de\u011fi\u015fkeninize ekler ve ard\u0131ndan <code>.profile<\/code> dosyas\u0131n\u0131 yeniden y\u00fckler.<\/p>\n<p>4.  <strong>Kurulumu Do\u011frulama:<\/strong><br \/>\n    Go&#8217;nun do\u011fru bir \u015fekilde kurulup kurulmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in s\u00fcr\u00fcm\u00fcn\u00fc sorgulayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">go version<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131 olarak <code>go version go1.x.x linux\/amd64<\/code> benzeri bir ifade g\u00f6rmelisiniz.<\/p>\n<h4>Basit Bir Go Web Uygulamas\u0131 Olu\u015fturma<\/h4>\n<p>Da\u011f\u0131t\u0131m s\u00fcrecini g\u00f6stermek i\u00e7in basit bir Go web uygulamas\u0131 olu\u015ftural\u0131m. Bu uygulama, gelen isteklere &#8220;Merhaba, Go Uygulamas\u0131!&#8221; mesaj\u0131yla yan\u0131t verecek ve 8080 portunda dinleyecektir.<\/p>\n<p>1.  <strong>Uygulama Dizini Olu\u015fturma:<\/strong><br \/>\n    Go uygulaman\u0131z i\u00e7in bir dizin olu\u015fturun. \u00d6rne\u011fin, <code>\/var\/www\/goapp<\/code> gibi bir konum kullanabiliriz.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/goapp\n    sudo chown -R $USER:$USER \/var\/www\/goapp\n    cd \/var\/www\/goapp<\/code><\/pre>\n<p>    Burada <code>$USER<\/code> yerine kendi kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 yazman\u0131z gerekmektedir.<\/p>\n<p>2.  <strong><code>main.go<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    Uygulaman\u0131n ana kodunu i\u00e7eren <code>main.go<\/code> dosyas\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">nano main.go<\/code><\/pre>\n<p>    \u0130\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-go\">package main\n\n    import (\n    \t\"fmt\"\n    \t\"log\"\n    \t\"net\/http\"\n    )\n\n    func handler(w http.ResponseWriter, r *http.Request) {\n    \tfmt.Fprintf(w, \"Merhaba, Go Uygulamas\u0131! \u0130stek geldi\u011fi adres: %s\\n\", r.Host)\n    \tlog.Printf(\"\u0130stek geldi: %s %s\", r.Method, r.URL.Path)\n    }\n\n    func main() {\n    \thttp.HandleFunc(\"\/\", handler)\n    \tport := \":8080\"\n    \tlog.Printf(\"Go uygulamas\u0131 %s portunda ba\u015flat\u0131l\u0131yor...\", port)\n    \terr := http.ListenAndServe(port, nil)\n    \tif err != nil {\n    \t\tlog.Fatalf(\"Go uygulamas\u0131 ba\u015flat\u0131lamad\u0131: %s\", err)\n    \t}\n    }<\/code><\/pre>\n<p>    Kaydedip kapat\u0131n (<code>Ctrl+X<\/code>, <code>Y<\/code>, <code>Enter<\/code>).<\/p>\n<p>3.  <strong>Go Mod\u00fcl\u00fcn\u00fc Ba\u015flatma:<\/strong><br \/>\n    Go mod\u00fcllerini kullanarak ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmek modern Go projelerinde standart bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-bash\">go mod init goapp<\/code><\/pre>\n<p>    Bu komut, projeniz i\u00e7in bir <code>go.mod<\/code> dosyas\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h3>Go Uygulamas\u0131n\u0131 Derleme ve \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Uygulamam\u0131z\u0131 olu\u015fturduktan sonra onu derleyip \u00e7al\u0131\u015ft\u0131rabiliriz.<\/p>\n<p>1.  <strong>Uygulamay\u0131 Derleme:<\/strong><br \/>\n    Uygulamay\u0131 derlemek i\u00e7in <code>go build<\/code> komutunu kullan\u0131n. Bu, y\u00fcr\u00fct\u00fclebilir bir dosya olu\u015fturacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">go build -o goapp<\/code><\/pre>\n<p>    <code>-o goapp<\/code> bayra\u011f\u0131, y\u00fcr\u00fct\u00fclebilir dosyan\u0131n ad\u0131n\u0131 <code>goapp<\/code> olarak belirler.<\/p>\n<p>2.  <strong>Uygulamay\u0131 Manuel Olarak \u00c7al\u0131\u015ft\u0131rma (Test Ama\u00e7l\u0131):<\/strong><br \/>\n    Uygulaman\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test etmek i\u00e7in manuel olarak ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">.\/goapp<\/code><\/pre>\n<p>    Terminalde &#8220;Go uygulamas\u0131 :8080 portunda ba\u015flat\u0131l\u0131yor&#8230;&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n    Ba\u015fka bir terminalden veya yerel makinenizden <code>curl<\/code> ile test edebilirsiniz (sunucunuzun g\u00fcvenlik duvar\u0131nda 8080 portu a\u00e7\u0131k olmal\u0131 veya i\u00e7eriden test etmelisiniz):<\/p>\n<pre><code class=\"language-bash\">curl localhost:8080<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131 olarak &#8220;Merhaba, Go Uygulamas\u0131! \u0130stek geldi\u011fi adres: localhost:8080&#8221; benzeri bir mesaj almal\u0131s\u0131n\u0131z.<br \/>\n    Testi bitirdikten sonra <code>Ctrl+C<\/code> ile uygulamay\u0131 durdurun.<\/p>\n<h3>Systemd ile Go Uygulamas\u0131n\u0131 Y\u00f6netme<\/h3>\n<p>\u00dcretim ortam\u0131nda Go uygulaman\u0131z\u0131 manuel olarak \u00e7al\u0131\u015ft\u0131rmak pratik de\u011fildir. Uygulaman\u0131n sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131, \u00e7\u00f6kt\u00fc\u011f\u00fcnde otomatik olarak yeniden ba\u015flat\u0131lmas\u0131 ve loglar\u0131n\u0131 y\u00f6netmek i\u00e7in <code>systemd<\/code> kullanaca\u011f\u0131z.<\/p>\n<p>1.  <strong>Systemd Servis Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    Go uygulamam\u0131z i\u00e7in bir <code>systemd<\/code> servis dosyas\u0131 olu\u015ftural\u0131m. Bu dosya <code>\/etc\/systemd\/system\/<\/code> dizininde yer alacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/systemd\/system\/goapp.service<\/code><\/pre>\n<p>    \u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-ini\">[Unit]\n    Description=Go Web Uygulamas\u0131\n    After=network.target\n\n    [Service]\n    User=www-data\n    Group=www-data\n    WorkingDirectory=\/var\/www\/goapp\n    ExecStart=\/var\/www\/goapp\/goapp\n    Restart=always\n    RestartSec=5\n    StandardOutput=journal\n    StandardError=journal\n    SyslogIdentifier=goapp\n\n    [Install]\n    WantedBy=multi-user.target<\/code><\/pre>\n<p>    Kaydedip kapat\u0131n.<\/p>\n<p>    <strong>A\u00e7\u0131klamalar:<\/strong><br \/>\n    *   <strong><code>[Unit]<\/code><\/strong>: Servisin temel bilgilerini i\u00e7erir. <code>Description<\/code> servisin ne oldu\u011funu, <code>After=network.target<\/code> ise a\u011f servisi ba\u015flad\u0131ktan sonra bu servisin ba\u015flamas\u0131 gerekti\u011fini belirtir.<br \/>\n    *   <strong><code>[Service]<\/code><\/strong>: Servisin nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 tan\u0131mlar.<br \/>\n        *   <code>User<\/code> ve <code>Group<\/code>: Uygulaman\u0131n hangi kullan\u0131c\u0131 ve grup alt\u0131nda \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirler. <code>www-data<\/code> genellikle web sunucular\u0131 i\u00e7in kullan\u0131lan ayr\u0131cal\u0131ks\u0131z bir kullan\u0131c\u0131d\u0131r. Uygulama dizininin ve y\u00fcr\u00fct\u00fclebilir dosyan\u0131n bu kullan\u0131c\u0131 taraf\u0131ndan okunabilir ve \u00e7al\u0131\u015ft\u0131r\u0131labilir oldu\u011fundan emin olun.<br \/>\n        *   <code>WorkingDirectory<\/code>: Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 dizini belirtir.<br \/>\n        *   <code>ExecStart<\/code>: Uygulamay\u0131 ba\u015flatan komutu belirtir.<br \/>\n        *   <code>Restart=always<\/code>: Uygulama herhangi bir nedenle \u00e7\u00f6kerse veya durursa, <code>systemd<\/code> taraf\u0131ndan otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<br \/>\n        *   <code>RestartSec=5<\/code>: Yeniden ba\u015flatma denemeleri aras\u0131nda 5 saniye bekler.<br \/>\n        *   <code>StandardOutput=journal<\/code> ve <code>StandardError=journal<\/code>: Uygulaman\u0131n standart \u00e7\u0131kt\u0131 ve hata ak\u0131\u015flar\u0131n\u0131 <code>systemd<\/code> g\u00fcnl\u00fc\u011f\u00fcne (journal) y\u00f6nlendirir. Bu, loglar\u0131 <code>journalctl<\/code> ile kolayca izlemenizi sa\u011flar.<br \/>\n        *   <code>SyslogIdentifier=goapp<\/code>: G\u00fcnl\u00fcklerde bu servisi <code>goapp<\/code> olarak tan\u0131mlar.<br \/>\n    *   <strong><code>[Install]<\/code><\/strong>: Servisin sistem a\u00e7\u0131l\u0131\u015f\u0131nda nas\u0131l etkinle\u015ftirilece\u011fini belirtir. <code>WantedBy=multi-user.target<\/code> sistemi \u00e7ok kullan\u0131c\u0131l\u0131 moda ge\u00e7ti\u011finde bu servisin ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>2.  <strong>Dosya \u0130zinlerini Ayarlama:<\/strong><br \/>\n    Uygulama dizininin ve y\u00fcr\u00fct\u00fclebilir dosyan\u0131n <code>www-data<\/code> kullan\u0131c\u0131s\u0131 taraf\u0131ndan okunabilir ve \u00e7al\u0131\u015ft\u0131r\u0131labilir oldu\u011fundan emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo chown -R www-data:www-data \/var\/www\/goapp\n    sudo chmod +x \/var\/www\/goapp\/goapp<\/code><\/pre>\n<p>3.  <strong>Systemd Servisini Etkinle\u015ftirme ve Ba\u015flatma:<\/strong><br \/>\n    Servis dosyas\u0131n\u0131 olu\u015fturduktan sonra <code>systemd<\/code>&#8216;ye yeni servisi tan\u0131tmal\u0131, etkinle\u015ftirmeli ve ba\u015flatmal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo systemctl daemon-reload # systemd'yi yap\u0131land\u0131rma de\u011fi\u015fikliklerini yeniden y\u00fcklemesi i\u00e7in bilgilendir\n    sudo systemctl enable goapp   # sistem a\u00e7\u0131l\u0131\u015f\u0131nda otomatik ba\u015flamas\u0131 i\u00e7in servisi etkinle\u015ftir\n    sudo systemctl start goapp    # servisi ba\u015flat<\/code><\/pre>\n<p>4.  <strong>Servis Durumunu Kontrol Etme:<\/strong><br \/>\n    Servisin ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status goapp<\/code><\/pre>\n<p>    \u00c7\u0131kt\u0131da <code>active (running)<\/code> ifadesini g\u00f6rmelisiniz.<br \/>\n    Uygulaman\u0131n loglar\u0131n\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sudo journalctl -u goapp.service -f<\/code><\/pre>\n<p>    Bu komut, uygulaman\u0131n g\u00fcnl\u00fcklerini ger\u00e7ek zamanl\u0131 olarak g\u00f6sterir (<code>-f<\/code> bayra\u011f\u0131 &#8220;follow&#8221; anlam\u0131na gelir).<\/p>\n<p>5.  <strong>Uygulaman\u0131n \u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Do\u011frulama:<\/strong><br \/>\n    Tekrar <code>curl<\/code> ile test ederek uygulaman\u0131n 8080 portunda dinledi\u011finden emin olun:<\/p>\n<pre><code class=\"language-bash\">curl localhost:8080<\/code><\/pre>\n<p>    Hala &#8220;Merhaba, Go Uygulamas\u0131!&#8221; mesaj\u0131n\u0131 al\u0131yorsan\u0131z, uygulaman\u0131z <code>systemd<\/code> alt\u0131nda ba\u015far\u0131yla \u00e7al\u0131\u015f\u0131yor demektir.<\/p>\n<h3>Nginx Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Go uygulamam\u0131z art\u0131k arka planda \u00e7al\u0131\u015f\u0131yor. \u015eimdi Nginx&#8217;i kurup yap\u0131land\u0131rarak gelen web isteklerini bu uygulamaya y\u00f6nlendirece\u011fiz.<\/p>\n<h4>Nginx Kurulumu (Gerekliyse)<\/h4>\n<p>E\u011fer Nginx sunucunuzda kurulu de\u011filse, a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyerek kurabilirsiniz:<\/p>\n<p>1.  <strong>Nginx Kurulumu:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install nginx<\/code><\/pre>\n<p>2.  <strong>Nginx&#8217;in Durumunu Kontrol Etme:<\/strong><br \/>\n    Kurulumdan sonra Nginx otomatik olarak ba\u015flamal\u0131d\u0131r. Durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl status nginx<\/code><\/pre>\n<p>    <code>active (running)<\/code> olarak g\u00f6r\u00fcnmelidir.<\/p>\n<p>3.  <strong>Firewall Ayarlar\u0131:<\/strong><br \/>\n    Ubuntu&#8217;da UFW (Uncomplicated Firewall) genellikle varsay\u0131lan g\u00fcvenlik duvar\u0131d\u0131r. Nginx&#8217;in web trafi\u011fi alabilmesi i\u00e7in HTTP (80) ve HTTPS (443) portlar\u0131n\u0131 a\u00e7man\u0131z gerekir.<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 'Nginx HTTP'\n    sudo ufw allow 'Nginx HTTPS' # SSL yap\u0131land\u0131rmas\u0131 yapacaksan\u0131z \u015fimdiden a\u00e7\u0131n\n    sudo ufw enable             # UFW etkin de\u011filse etkinle\u015ftirin\n    sudo ufw status             # Kurallar\u0131 kontrol edin<\/code><\/pre>\n<p>    <code>Nginx Full<\/code> profilini de kullanabilirsiniz, bu hem HTTP hem de HTTPS&#8217;i a\u00e7ar.<\/p>\n<h4>Nginx&#8217;i Ters Proxy Olarak Yap\u0131land\u0131rma<\/h4>\n<p>\u015eimdi Nginx&#8217;i gelen web isteklerini 8080 portunda \u00e7al\u0131\u015fan Go uygulamam\u0131za y\u00f6nlendirecek \u015fekilde yap\u0131land\u0131ral\u0131m.<\/p>\n<p>1.  <strong>Yeni Bir Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma:<\/strong><br \/>\n    Nginx yap\u0131land\u0131rma dosyalar\u0131 genellikle <code>\/etc\/nginx\/sites-available\/<\/code> dizininde bulunur. Uygulaman\u0131z i\u00e7in yeni bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/goapp<\/code><\/pre>\n<p>    \u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n (alan ad\u0131n\u0131z\u0131 <code>ornekuygulama.com<\/code> ile de\u011fi\u015ftirin):<\/p>\n<pre><code class=\"language-nginx\">server {\n        listen 80;\n        listen [::]:80;\n        server_name ornekuygulama.com www.ornekuygulama.com;\n\n        location \/ {\n            proxy_pass http:\/\/localhost:8080;\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        # \u0130ste\u011fe ba\u011fl\u0131: Statik dosyalar\u0131n\u0131z varsa (CSS, JS, resimler vb.)\n        # ayr\u0131 bir location blo\u011fu ile Nginx \u00fczerinden do\u011frudan sunabilirsiniz.\n        # Bu, Go uygulaman\u0131z\u0131n y\u00fck\u00fcn\u00fc azalt\u0131r.\n        # \u00d6rne\u011fin, \/var\/www\/goapp\/static dizinindeki dosyalar i\u00e7in:\n        # location \/static\/ {\n        #     alias \/var\/www\/goapp\/static\/;\n        #     expires 30d;\n        #     add_header Cache-Control \"public\";\n        # }\n    }<\/code><\/pre>\n<p>    Kaydedip kapat\u0131n.<\/p>\n<p>    <strong>A\u00e7\u0131klamalar:<\/strong><br \/>\n    *   <strong><code>listen 80;<\/code><\/strong>: Nginx&#8217;in 80 (HTTP) portunu dinlemesini sa\u011flar.<br \/>\n    *   <strong><code>server_name ornekuygulama.com www.ornekuygulama.com;<\/code><\/strong>: Bu yap\u0131land\u0131rman\u0131n hangi alan adlar\u0131 i\u00e7in ge\u00e7erli oldu\u011funu belirtir. Alan ad\u0131n\u0131z\u0131 buraya yazmal\u0131s\u0131n\u0131z.<br \/>\n    *   <strong><code>location \/ { ... }<\/code><\/strong>: T\u00fcm gelen isteklerin nas\u0131l i\u015flenece\u011fini tan\u0131mlar.<br \/>\n        *   <strong><code>proxy_pass http:\/\/localhost:8080;<\/code><\/strong>: Gelen t\u00fcm istekleri 8080 portunda \u00e7al\u0131\u015fan Go uygulamam\u0131za y\u00f6nlendirir. <code>localhost<\/code> kullanmam\u0131z\u0131n nedeni, Nginx ve Go uygulamas\u0131n\u0131n ayn\u0131 sunucuda olmas\u0131d\u0131r.<br \/>\n        *   <strong><code>proxy_set_header ...<\/code><\/strong>: Bu ba\u015fl\u0131klar, orijinal istemci bilgilerini (IP adresi, host ad\u0131 vb.) Go uygulamas\u0131na iletmek i\u00e7in \u00f6nemlidir. Go uygulaman\u0131z bu bilgilere eri\u015fmek isterse, bu ba\u015fl\u0131klar sayesinde eri\u015febilir.<\/p>\n<p>2.  <strong>Yap\u0131land\u0131rmay\u0131 Etkinle\u015ftirme:<\/strong><br \/>\n    Yeni yap\u0131land\u0131rma dosyas\u0131n\u0131 etkinle\u015ftirmek i\u00e7in <code>sites-available<\/code> dizininden <code>sites-enabled<\/code> dizinine sembolik bir ba\u011flant\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/goapp \/etc\/nginx\/sites-enabled\/<\/code><\/pre>\n<p>3.  <strong>Varsay\u0131lan Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma (Gerekliyse):<\/strong><br \/>\n    E\u011fer varsay\u0131lan Nginx sayfas\u0131 hala g\u00f6r\u00fcn\u00fcyorsa, varsay\u0131lan yap\u0131land\u0131rma dosyas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakman\u0131z gerekebilir:<\/p>\n<pre><code class=\"language-bash\">sudo unlink \/etc\/nginx\/sites-enabled\/default<\/code><\/pre>\n<p>4.  <strong>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme:<\/strong><br \/>\n    De\u011fi\u015fiklikleri uygulamadan \u00f6nce Nginx yap\u0131land\u0131rma dosyas\u0131nda s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek \u00f6nemlidir:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>    E\u011fer <code>syntax is ok<\/code> ve <code>test is successful<\/code> mesajlar\u0131n\u0131 g\u00f6r\u00fcrseniz, her \u015fey yolunda demektir.<\/p>\n<p>5.  <strong>Nginx&#8217;i Yeniden Ba\u015flatma:<\/strong><br \/>\n    Yap\u0131land\u0131rma de\u011fi\u015fikliklerini uygulamak i\u00e7in Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart nginx<\/code><\/pre>\n<p>Art\u0131k web taray\u0131c\u0131n\u0131zdan <code>http:\/\/ornekuygulama.com<\/code> adresine gitti\u011finizde, Nginx iste\u011fi yakalayacak ve Go uygulaman\u0131za y\u00f6nlendirecektir. Go uygulaman\u0131zdan gelen yan\u0131t\u0131 taray\u0131c\u0131n\u0131zda g\u00f6rmelisiniz.<\/p>\n<h3>SSL\/TLS Yap\u0131land\u0131rmas\u0131 (Certbot ile)<\/h3>\n<p>Web sitenizin g\u00fcvenli\u011fi ve SEO performans\u0131 i\u00e7in HTTPS kullanmak g\u00fcn\u00fcm\u00fczde bir zorunluluktur. Let&#8217;s Encrypt ve Certbot ile \u00fccretsiz SSL\/TLS sertifikalar\u0131 almak ve yap\u0131land\u0131rmak olduk\u00e7a kolayd\u0131r.<\/p>\n<p>1.  <strong>Certbot Kurulumu:<\/strong><br \/>\n    Certbot&#8217;u Nginx eklentisiyle birlikte kurun:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install certbot python3-certbot-nginx<\/code><\/pre>\n<p>2.  <strong>SSL Sertifikas\u0131 Alma:<\/strong><br \/>\n    Certbot&#8217;u Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak alg\u0131lamas\u0131 ve SSL sertifikas\u0131n\u0131 almas\u0131 i\u00e7in \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d ornekuygulama.com -d www.ornekuygulama.com<\/code><\/pre>\n<p>    Certbot sizden bir e-posta adresi isteyecek ve hizmet \u015fartlar\u0131n\u0131 kabul etmenizi isteyecektir. Ard\u0131ndan, HTTP trafi\u011fini otomatik olarak HTTPS&#8217;e y\u00f6nlendirip y\u00f6nlendirmeyece\u011fini soracakt\u0131r. Genellikle <code>2: Redirect<\/code> se\u00e7ene\u011fini se\u00e7mek iyi bir uygulamad\u0131r.<\/p>\n<p>3.  <strong>Certbot&#8217;un Otomatik Yenilemesini Test Etme:<\/strong><br \/>\n    Let&#8217;s Encrypt sertifikalar\u0131 90 g\u00fcn ge\u00e7erlidir, ancak Certbot bunlar\u0131 otomatik olarak yenileyecek \u015fekilde yap\u0131land\u0131r\u0131l\u0131r. Yenileme i\u015fleminin d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run<\/code><\/pre>\n<p>    E\u011fer herhangi bir hata g\u00f6rmezseniz, otomatik yenileme do\u011fru \u015fekilde ayarlanm\u0131\u015f demektir.<\/p>\n<p>Art\u0131k taray\u0131c\u0131n\u0131zdan <code>https:\/\/ornekuygulama.com<\/code> adresine gitti\u011finizde, ba\u011flant\u0131n\u0131n g\u00fcvenli oldu\u011funu ve Nginx&#8217;in HTTPS \u00fczerinden Go uygulaman\u0131za istekleri iletti\u011fini g\u00f6rmelisiniz.<\/p>\n<h3>Da\u011f\u0131t\u0131m\u0131n Test Edilmesi<\/h3>\n<p>Da\u011f\u0131t\u0131m s\u00fcrecini tamamlad\u0131ktan sonra her \u015feyin beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in kapsaml\u0131 testler yapmal\u0131s\u0131n\u0131z.<\/p>\n<p>1.  <strong>Web Taray\u0131c\u0131s\u0131 ile Eri\u015fim:<\/strong><br \/>\n    Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve alan ad\u0131n\u0131z\u0131 (\u00f6rne\u011fin, <code>https:\/\/ornekuygulama.com<\/code>) ziyaret edin. Go uygulaman\u0131zdan gelen &#8220;Merhaba, Go Uygulamas\u0131!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Taray\u0131c\u0131n\u0131z\u0131n adres \u00e7ubu\u011funda kilit simgesinin (g\u00fcvenli ba\u011flant\u0131) g\u00f6r\u00fcnd\u00fc\u011f\u00fcnden emin olun.<\/p>\n<p>2.  <strong>Nginx Loglar\u0131n\u0131 Kontrol Etme:<\/strong><br \/>\n    Nginx&#8217;in gelen istekleri do\u011fru \u015fekilde i\u015fleyip Go uygulamas\u0131na y\u00f6nlendirdi\u011fini do\u011frulamak i\u00e7in eri\u015fim ve hata loglar\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo tail -f \/var\/log\/nginx\/access.log\n    sudo tail -f \/var\/log\/nginx\/error.log<\/code><\/pre>\n<p>    <code>access.log<\/code> dosyas\u0131nda kendi IP adresinizden gelen istekleri ve <code>200<\/code> (OK) durum kodlar\u0131n\u0131 g\u00f6rmelisiniz. <code>error.log<\/code> dosyas\u0131nda herhangi bir hata olmamal\u0131d\u0131r.<\/p>\n<p>3.  <strong>Go Uygulamas\u0131 Loglar\u0131n\u0131 Kontrol Etme:<\/strong><br \/>\n    Go uygulaman\u0131z\u0131n loglar\u0131n\u0131 kontrol ederek uygulaman\u0131n istekleri do\u011fru \u015fekilde ald\u0131\u011f\u0131ndan ve i\u015fledi\u011finden emin olun:<\/p>\n<pre><code class=\"language-bash\">sudo journalctl -u goapp.service -f<\/code><\/pre>\n<p>    Taray\u0131c\u0131dan her istek g\u00f6nderdi\u011finizde, Go uygulamas\u0131n\u0131n loglar\u0131nda &#8220;\u0130stek geldi: GET \/&#8221; benzeri giri\u015fler g\u00f6rmelisiniz. Bu, uygulaman\u0131n Nginx \u00fczerinden gelen istekleri ba\u015far\u0131yla i\u015fledi\u011fini g\u00f6sterir.<\/p>\n<p>4.  <strong>Sunucuyu Yeniden Ba\u015flatma Testi:<\/strong><br \/>\n    Sunucuyu yeniden ba\u015flatarak Go uygulaman\u0131z\u0131n ve Nginx&#8217;in otomatik olarak ba\u015flay\u0131p ba\u015flamad\u0131\u011f\u0131n\u0131 kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo reboot<\/code><\/pre>\n<p>    Sunucu yeniden ba\u015flad\u0131ktan sonra tekrar web taray\u0131c\u0131n\u0131zdan uygulaman\u0131za eri\u015fmeye \u00e7al\u0131\u015f\u0131n ve <code>systemctl status goapp<\/code> ile <code>systemctl status nginx<\/code> komutlar\u0131yla servislerin durumunu kontrol edin.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular ve Sorun Giderme<\/h3>\n<p>Da\u011f\u0131t\u0131m s\u0131ras\u0131nda veya sonras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Nginx 502 Bad Gateway Hatas\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Bu hata genellikle Nginx&#8217;in Go uygulaman\u0131za ula\u015famad\u0131\u011f\u0131 anlam\u0131na gelir.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Go uygulaman\u0131z\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 kontrol edin: <code>sudo systemctl status goapp<\/code>. E\u011fer \u00e7al\u0131\u015fm\u0131yorsa, <code>sudo systemctl start goapp<\/code> ile ba\u015flat\u0131n ve <code>sudo journalctl -u goapp.service -f<\/code> ile loglar\u0131n\u0131 kontrol edin.<br \/>\n        *   Go uygulamas\u0131n\u0131n do\u011fru portta (bu rehberde 8080) dinledi\u011finden emin olun.<br \/>\n        *   Nginx yap\u0131land\u0131rman\u0131zdaki <code>proxy_pass<\/code> adresinin do\u011fru oldu\u011fundan emin olun (<code>http:\/\/localhost:8080<\/code>).<\/p>\n<p>*   <strong>Web Sitesi Eri\u015filemiyor \/ Ba\u011flant\u0131 Zaman A\u015f\u0131m\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Taray\u0131c\u0131da siteye eri\u015filemiyor veya ba\u011flant\u0131 zaman a\u015f\u0131m\u0131na u\u011fruyor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Sunucunuzun IP adresine ping atarak sunucunun a\u011f ba\u011flant\u0131s\u0131n\u0131 kontrol edin.<br \/>\n        *   Firewall (UFW) ayarlar\u0131n\u0131 kontrol edin. HTTP (80) ve HTTPS (443) portlar\u0131n\u0131n a\u00e7\u0131k oldu\u011fundan emin olun: <code>sudo ufw status<\/code>. Gerekirse <code>sudo ufw allow 'Nginx Full'<\/code> komutunu kullan\u0131n.<br \/>\n        *   DNS kay\u0131tlar\u0131n\u0131z\u0131n alan ad\u0131n\u0131z\u0131 sunucunuzun IP adresine do\u011fru \u015fekilde y\u00f6nlendirdi\u011finden emin olun. <code>dig ornekuygulama.com<\/code> komutuyla kontrol edebilirsiniz.<\/p>\n<p>*   <strong>Nginx Yap\u0131land\u0131rma Hatas\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Nginx&#8217;i yeniden ba\u015flat\u0131rken hata al\u0131yorsunuz veya <code>sudo nginx -t<\/code> komutu hata veriyor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Nginx yap\u0131land\u0131rma dosyan\u0131zdaki (\u00f6rne\u011fin <code>\/etc\/nginx\/sites-available\/goapp<\/code>) s\u00f6zdizimini dikkatlice kontrol edin. \u00d6zellikle noktal\u0131 virg\u00fcllere (<code>;<\/code>) ve s\u00fcsl\u00fc parantezlere (<code>{}<\/code>) dikkat edin.<br \/>\n        *   Hata mesaj\u0131 genellikle hatan\u0131n hangi sat\u0131rda oldu\u011funu belirtir.<\/p>\n<p>*   <strong>Go Uygulamas\u0131 Ba\u015flam\u0131yor veya \u00c7\u00f6k\u00fcyor:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>systemctl status goapp<\/code> komutu uygulaman\u0131n \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 g\u00f6steriyor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   <code>sudo journalctl -u goapp.service -f<\/code> komutuyla uygulaman\u0131n loglar\u0131n\u0131 kontrol edin. Hata mesajlar\u0131, uygulaman\u0131n neden ba\u015flamad\u0131\u011f\u0131n\u0131 veya \u00e7\u00f6kt\u00fc\u011f\u00fcn\u00fc a\u00e7\u0131klayabilir.<br \/>\n        *   <code>ExecStart<\/code> yolunun (<code>\/var\/www\/goapp\/goapp<\/code>) do\u011fru oldu\u011fundan ve y\u00fcr\u00fct\u00fclebilir dosyan\u0131n mevcut oldu\u011fundan emin olun.<br \/>\n        *   <code>User<\/code> ve <code>Group<\/code> ayarlar\u0131n\u0131n (<code>www-data<\/code>) uygulama dizini ve y\u00fcr\u00fct\u00fclebilir dosya i\u00e7in uygun izinlere sahip oldu\u011fundan emin olun (<code>sudo chown -R www-data:www-data \/var\/www\/goapp<\/code>).<\/p>\n<p>*   <strong>SSL Sertifikas\u0131 Hatas\u0131 \/ G\u00fcvenli De\u011fil Uyar\u0131s\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Taray\u0131c\u0131da siteniz g\u00fcvenli g\u00f6r\u00fcnm\u00fcyor veya sertifika hatas\u0131 al\u0131yorsunuz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong><br \/>\n        *   Certbot kurulumunun ve SSL sertifikas\u0131n\u0131n do\u011fru \u015fekilde al\u0131nd\u0131\u011f\u0131ndan emin olun. <code>sudo certbot certificates<\/code> komutuyla sertifikalar\u0131n\u0131z\u0131 listeleyebilirsiniz.<br \/>\n        *   Nginx yap\u0131land\u0131rman\u0131z\u0131n (Certbot taraf\u0131ndan otomatik olarak g\u00fcncellenmi\u015f olmas\u0131 gerekir) HTTPS trafi\u011fini do\u011fru \u015fekilde i\u015fledi\u011finden emin olun.<br \/>\n        *   Firewall&#8217;da 443 (HTTPS) portunun a\u00e7\u0131k oldu\u011fundan emin olun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Go web uygulaman\u0131z\u0131 Ubuntu 18.04 sunucusu \u00fczerinde Nginx ile g\u00fcvenli ve verimli bir \u015fekilde nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011frendiniz. S\u00fcrecin her a\u015famas\u0131n\u0131 detayl\u0131 bir \u015fekilde ele ald\u0131k:<\/p>\n<p>*   Go ortam\u0131n\u0131n kurulumu ve basit bir web uygulamas\u0131n\u0131n olu\u015fturulmas\u0131.<br \/>\n*   Go uygulamas\u0131n\u0131n derlenmesi ve test edilmesi.<br \/>\n*   <code>systemd<\/code> kullanarak Go uygulamas\u0131n\u0131n bir servis olarak y\u00f6netilmesi, b\u00f6ylece otomatik ba\u015flatma ve yeniden ba\u015flatma yetenekleri kazanmas\u0131.<br \/>\n*   Nginx&#8217;in kurulmas\u0131 ve Go uygulamas\u0131 i\u00e7in bir ters proxy olarak yap\u0131land\u0131r\u0131lmas\u0131, statik dosya sunumu ve performans iyile\u015ftirmeleri i\u00e7in zemin haz\u0131rlanmas\u0131.<br \/>\n*   Certbot ile \u00fccretsiz SSL\/TLS sertifikalar\u0131n\u0131n al\u0131nmas\u0131 ve Nginx ile HTTPS&#8217;in etkinle\u015ftirilmesi, b\u00f6ylece uygulaman\u0131z\u0131n g\u00fcvenli\u011fi ve SEO uyumlulu\u011fu sa\u011flanmas\u0131.<br \/>\n*   Da\u011f\u0131t\u0131m\u0131n test edilmesi ve yayg\u0131n sorun giderme ipu\u00e7lar\u0131.<\/p>\n<p>Bu ad\u0131mlar\u0131 takip ederek Go uygulaman\u0131z\u0131 \u00fcretim ortam\u0131na ba\u015far\u0131yla ta\u015f\u0131yabilir ve kullan\u0131c\u0131lara g\u00fcvenli ve h\u0131zl\u0131 bir deneyim sunabilirsiniz. Ancak da\u011f\u0131t\u0131m s\u00fcreci burada bitmiyor. Uygulaman\u0131z\u0131n performans\u0131n\u0131 ve g\u00fcvenli\u011fini s\u00fcrekli olarak izlemek, loglar\u0131 takip etmek, d\u00fczenli yedeklemeler yapmak ve g\u00fcvenlik g\u00fcncellemelerini uygulamak, ba\u015far\u0131l\u0131 bir \u00fcretim ortam\u0131 y\u00f6netimi i\u00e7in kritik \u00f6neme sahiptir. Gelecekteki ad\u0131mlar aras\u0131nda CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) boru hatlar\u0131 kurarak da\u011f\u0131t\u0131m s\u00fcrecini otomatikle\u015ftirmek ve Prometheus, Grafana gibi ara\u00e7larla uygulaman\u0131z\u0131n ve sunucunuzun metriklerini izlemek yer alabilir. Unutmay\u0131n, iyi bir da\u011f\u0131t\u0131m, iyi bir uygulaman\u0131n sadece ba\u015flang\u0131c\u0131d\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, web uygulamalar","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":[1468],"tags":[],"class_list":{"0":"post-34347","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","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>Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, web uygulamalar\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-15T09:40:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2025-11-15T09:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\"},\"wordCount\":2954,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\",\"name\":\"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-15T09:40:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma 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":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi","og_description":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, web uygulamalar","og_url":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-15T09:40:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi","datePublished":"2025-11-15T09:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/"},"wordCount":2954,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/","name":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-15T09:40:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-ubuntu-18-04-uzerinde-nginx-ile-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Go Web Uygulamas\u0131n\u0131 Ubuntu 18.04 \u00dczerinde Nginx ile Da\u011f\u0131tma 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\/34347","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=34347"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34347\/revisions"}],"predecessor-version":[{"id":34348,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34347\/revisions\/34348"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}