{"id":33078,"date":"2025-10-29T08:41:00","date_gmt":"2025-10-29T05:41:00","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=33078"},"modified":"2025-10-29T08:41:00","modified_gmt":"2025-10-29T05:41:00","slug":"go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/","title":{"rendered":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi<\/h2>\n<p>Bu makale, Go ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Docker konteynerleri kullanarak Ubuntu 22.04 sunucusu \u00fczerinde Nginx ters proxy&#8217;si arkas\u0131na nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r. Modern web uygulamalar\u0131n\u0131n da\u011f\u0131t\u0131m\u0131nda s\u0131k\u00e7a tercih edilen bu g\u00fc\u00e7l\u00fc kombinasyon, \u00f6l\u00e7eklenebilirlik, g\u00fcvenlik ve y\u00f6netim kolayl\u0131\u011f\u0131 sunar.<\/p>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen teknoloji d\u00fcnyas\u0131nda, uygulamalar\u0131 h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir \u015fekilde da\u011f\u0131tmak kritik \u00f6neme sahiptir. Go (Golang), y\u00fcksek performans, e\u015fzamanl\u0131l\u0131k ve derlenmi\u015f yap\u0131s\u0131 sayesinde web servisleri ve mikroservisler i\u00e7in pop\u00fcler bir dil haline gelmi\u015ftir. Docker, uygulamalar\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131yla birlikte izole edilmi\u015f konteynerler i\u00e7inde paketleyerek &#8220;bir kez yaz, her yerde \u00e7al\u0131\u015ft\u0131r&#8221; felsefesini hayata ge\u00e7irir. Nginx ise y\u00fcksek performansl\u0131 bir ters proxy, y\u00fck dengeleyici ve web sunucusu olarak, gelen trafi\u011fi Docker konteynerlerindeki Go uygulamam\u0131za y\u00f6nlendirirken ek g\u00fcvenlik ve performans katmanlar\u0131 sa\u011flar. Ubuntu 22.04, kararl\u0131 ve yayg\u0131n kullan\u0131lan bir Linux da\u011f\u0131t\u0131m\u0131 olarak bu da\u011f\u0131t\u0131m i\u00e7in ideal bir temel sunar.<\/p>\n<p>Bu rehberde, basit bir Go web uygulamas\u0131n\u0131 Dockerize edecek, Nginx&#8217;i ters proxy olarak yap\u0131land\u0131racak, Let&#8217;s Encrypt ile SSL\/TLS sertifikalar\u0131 alacak ve t\u00fcm bu bile\u015fenleri Docker Compose ile y\u00f6netilebilir bir sistemde bir araya getirece\u011fiz. Amac\u0131m\u0131z, geli\u015ftiricilere ve sistem y\u00f6neticilerine sa\u011flam ve g\u00fcvenilir bir da\u011f\u0131t\u0131m s\u00fcreci sunmakt\u0131r.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Bu rehberi takip edebilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n ko\u015fullar\u0131n yerine getirilmi\u015f olmas\u0131 gerekmektedir:<\/p>\n<ul>\n<li><strong>Ubuntu 22.04 Sunucusu:<\/strong> SSH eri\u015fimine sahip, <code>sudo<\/code> yetkileri olan bir Ubuntu 22.04 sunucusu.<\/li>\n<li><strong>Alan Ad\u0131:<\/strong> Uygulaman\u0131za eri\u015fmek i\u00e7in yap\u0131land\u0131r\u0131lm\u0131\u015f bir alan ad\u0131 (\u00f6rn: <code>ornekuygulama.com<\/code>). Bu alan ad\u0131n\u0131n A kayd\u0131n\u0131n sunucunuzun IP adresine i\u015faret etti\u011finden emin olun.<\/li>\n<li><strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 kullan\u0131m\u0131 ve temel Linux komutlar\u0131 hakk\u0131nda bilgi.<\/li>\n<li><strong>Temel Go Bilgisi:<\/strong> Go programlama dili hakk\u0131nda temel bilgi.<\/li>\n<li><strong>Temel Docker Bilgisi:<\/strong> Docker konteynerleri ve imajlar\u0131 hakk\u0131nda temel bilgi.<\/li>\n<li><strong>Temel Nginx Bilgisi:<\/strong> Nginx&#8217;in temel yap\u0131land\u0131rmas\u0131 hakk\u0131nda bilgi.<\/li>\n<\/ul>\n<p>Ba\u015flamadan \u00f6nce sunucunuzu g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y\n<\/code><\/pre>\n<h3>Go Web Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>\u0130lk ad\u0131m olarak, da\u011f\u0131taca\u011f\u0131m\u0131z basit bir Go web uygulamas\u0131 olu\u015ftural\u0131m. Bu uygulama, gelen isteklere &#8220;Merhaba, Docker ve Nginx ile Go!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcrecektir.<\/p>\n<h4>Go Uygulamas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>Sunucunuzda veya yerel makinenizde (daha sonra sunucuya aktaraca\u011f\u0131z) projeniz i\u00e7in bir dizin olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">mkdir go-web-app\ncd go-web-app\n<\/code><\/pre>\n<p>\u015eimdi <code>main.go<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-go\">\/\/ main.go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net\/http\"\n)\n\nfunc main() {\n\thttp.HandleFunc(\"\/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, \"Merhaba, Docker ve Nginx ile Go!\\n\")\n\t})\n\n\tport := \":8080\"\n\tlog.Printf(\"Go uygulamas\u0131 %s portunda dinliyor...\", port)\n\tlog.Fatal(http.ListenAndServe(port, nil))\n}\n<\/code><\/pre>\n<p>Bu basit uygulama, t\u00fcm gelen HTTP isteklerini <code>\/<\/code> yolunda dinler ve sabit bir metin yan\u0131t\u0131 d\u00f6ner. Uygulama <code>8080<\/code> portunda \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<h4>Go Mod\u00fcllerini Ba\u015flatma<\/h4>\n<p>Go mod\u00fcllerini ba\u015flatarak ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimini sa\u011flayal\u0131m:<\/p>\n<pre><code class=\"language-bash\">go mod init go-web-app\n<\/code><\/pre>\n<p>Bu komut, <code>go.mod<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r. Uygulamam\u0131z harici bir ba\u011f\u0131ml\u0131l\u0131k kullanmad\u0131\u011f\u0131 i\u00e7in ba\u015fka bir i\u015flem yapmam\u0131za gerek yok.<\/p>\n<h3>Dockerize Etme<\/h3>\n<p>\u015eimdi Go uygulamam\u0131z\u0131 bir Docker konteyneri i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirelim. Bunun i\u00e7in bir <code>Dockerfile<\/code> olu\u015fturaca\u011f\u0131z.<\/p>\n<h4>Dockerfile Olu\u015fturma<\/h4>\n<p>Proje dizininizde <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-dockerfile\"># Multi-stage build kullanarak k\u00fc\u00e7\u00fck bir nihai imaj elde ediyoruz.\n\n<h2>A\u015fama 1: Builder imaj\u0131 - Go uygulamas\u0131n\u0131 derlemek i\u00e7in<\/h2>\nFROM golang:1.22-alpine AS builder\n\nWORKDIR \/app\n\n<h2>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 indirmek i\u00e7in go.mod ve go.sum dosyalar\u0131n\u0131 kopyala<\/h2>\nCOPY go.mod .\/\nCOPY go.sum .\/\nRUN go mod download\n\n<h2>Uygulama kaynak kodunu kopyala<\/h2>\nCOPY . .\n\n<h2>Uygulamay\u0131 derle<\/h2>\n<h2>CGO_ENABLED=0 statik olarak ba\u011fl\u0131 bir ikili dosya olu\u015fturur<\/h2>\n<h2>-a bayra\u011f\u0131 t\u00fcm paketleri yeniden derler<\/h2>\n<h2>-installsuffix cgo ek CGO k\u00fct\u00fcphanelerinin kurulumunu engeller<\/h2>\n<h2>-ldflags \"-s -w\" ikili dosyan\u0131n boyutunu azalt\u0131r (sembol tablolar\u0131n\u0131 ve hata ay\u0131klama bilgilerini kald\u0131r\u0131r)<\/h2>\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags \"-s -w\" -o go-web-app .\n\n<h2>A\u015fama 2: \u00c7al\u0131\u015fma zaman\u0131 imaj\u0131 - Derlenmi\u015f uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in<\/h2>\nFROM alpine:latest\n\n<h2>G\u00fcvenlik i\u00e7in non-root kullan\u0131c\u0131 olu\u015fturma<\/h2>\nRUN adduser -D appuser\nUSER appuser\n\nWORKDIR \/app\n\n<h2>Builder a\u015famas\u0131ndan derlenmi\u015f ikili dosyay\u0131 kopyala<\/h2>\nCOPY --from=builder \/app\/go-web-app .\n\n<h2>Uygulaman\u0131n dinleyece\u011fi portu belirt<\/h2>\nEXPOSE 8080\n\n<h2>Uygulamay\u0131 ba\u015flat<\/h2>\nCMD [\".\/go-web-app\"]\n<\/code><\/pre>\n<p>Bu <code>Dockerfile<\/code>, multi-stage build (\u00e7ok a\u015famal\u0131 derleme) kullanarak nihai Docker imaj\u0131n\u0131n boyutunu minimize eder. \u0130lk a\u015famada Go uygulamas\u0131 derlenir, ikinci a\u015famada ise sadece derlenmi\u015f ikili dosya ve Alpine Linux&#8217;un minimum bile\u015fenleri i\u00e7eren k\u00fc\u00e7\u00fck bir imaj olu\u015fturulur. Ayr\u0131ca, g\u00fcvenlik i\u00e7in uygulamay\u0131 non-root bir kullan\u0131c\u0131 olarak \u00e7al\u0131\u015ft\u0131r\u0131r\u0131z.<\/p>\n<h4>.dockerignore Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Docker imaj\u0131n\u0131z\u0131n boyutunu daha da optimize etmek ve gereksiz dosyalar\u0131n kopyalanmas\u0131n\u0131 engellemek i\u00e7in <code>.dockerignore<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-text\"># Git ile ilgili dosyalar\u0131 yoksay\n.git\n.gitignore\n\n<h2>Go mod\u00fcl \u00f6nbelle\u011fini ve derlenmi\u015f ikili dosyay\u0131 yoksay<\/h2>\n*.mod\n*.sum\ngo-web-app\n<\/code><\/pre>\n<h4>Docker \u0130maj\u0131n\u0131 Olu\u015fturma<\/h4>\n<p>\u015eimdi Docker imaj\u0131m\u0131z\u0131 olu\u015ftural\u0131m. Proje dizininizdeyken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker build -t go-web-app:latest .\n<\/code><\/pre>\n<p>Bu komut, mevcut dizindeki <code>Dockerfile<\/code>&#8216;\u0131 kullanarak <code>go-web-app<\/code> ad\u0131nda ve <code>latest<\/code> etiketli bir Docker imaj\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h4>Docker \u0130maj\u0131n\u0131 Test Etme (\u0130ste\u011fe Ba\u011fl\u0131)<\/h4>\n<p>\u0130maj\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in yerel olarak test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">docker run -p 8080:8080 go-web-app:latest\n<\/code><\/pre>\n<p>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine giderek &#8220;Merhaba, Docker ve Nginx ile Go!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Testi bitirdi\u011finizde <code>Ctrl+C<\/code> ile konteyneri durdurabilirsiniz.<\/p>\n<h3>Nginx Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Nginx, gelen HTTP isteklerini Go uygulamam\u0131z\u0131n konteynerine y\u00f6nlendirecek bir ters proxy g\u00f6revi g\u00f6recektir. Ayr\u0131ca SSL sonland\u0131rmas\u0131 ve y\u00fck dengeleme gibi g\u00f6revleri de \u00fcstlenebilir.<\/p>\n<h4>Nginx Kurulumu<\/h4>\n<p>Ubuntu sunucunuzda Nginx&#8217;i kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo apt install nginx -y\nsudo systemctl enable nginx\nsudo systemctl start nginx\n<\/code><\/pre>\n<p>Kurulumdan sonra, taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine giderek Nginx&#8217;in varsay\u0131lan kar\u015f\u0131lama sayfas\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Uygulamam\u0131z i\u00e7in yeni bir Nginx sunucu blo\u011fu yap\u0131land\u0131rma dosyas\u0131 olu\u015ftural\u0131m. <code>your_domain<\/code> yerine kendi alan ad\u0131n\u0131z\u0131 kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/sites-available\/your_domain\n<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen [::]:80;\n    server_name your_domain www.your_domain;\n\n    location \/ {\n        proxy_pass http:\/\/go-web-app:8080; # Docker Compose i\u00e7indeki servis ad\u0131 ve portu\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<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, Nginx&#8217;in <code>your_domain<\/code> ve <code>www.your_domain<\/code> adreslerine gelen HTTP isteklerini dinlemesini ve t\u00fcm istekleri <code>http:\/\/go-web-app:8080<\/code> adresine y\u00f6nlendirmesini sa\u011flar. <code>go-web-app<\/code> burada Docker Compose a\u011f\u0131ndaki servisimizin ad\u0131 olacakt\u0131r. <code>proxy_set_header<\/code> direktifleri, orijinal istemci bilgilerinin Go uygulamas\u0131na iletilmesini sa\u011flar.<\/p>\n<h4>Yap\u0131land\u0131rmay\u0131 Etkinle\u015ftirme ve Test Etme<\/h4>\n<p>Yeni yap\u0131land\u0131rmay\u0131 etkinle\u015ftirmek i\u00e7in <code>sites-enabled<\/code> dizinine sembolik bir ba\u011flant\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo ln -s \/etc\/nginx\/sites-available\/your_domain \/etc\/nginx\/sites-enabled\/\n<\/code><\/pre>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rmas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rakmak iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-bash\">sudo unlink \/etc\/nginx\/sites-enabled\/default\n<\/code><\/pre>\n<p>Nginx yap\u0131land\u0131rman\u0131z\u0131n s\u00f6zdizimini kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t\n<\/code><\/pre>\n<p>E\u011fer &#8220;syntax is ok&#8221; ve &#8220;test is successful&#8221; mesajlar\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, Nginx&#8217;i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl restart nginx\n<\/code><\/pre>\n<h3>Sertifika Y\u00f6netimi (Let&#8217;s Encrypt ile SSL\/TLS)<\/h3>\n<p>Web uygulamalar\u0131n\u0131n g\u00fcvenli\u011fi i\u00e7in HTTPS kullan\u0131m\u0131 olmazsa olmazd\u0131r. Let&#8217;s Encrypt, \u00fccretsiz SSL\/TLS sertifikalar\u0131 sa\u011flayarak bu s\u00fcreci kolayla\u015ft\u0131r\u0131r. Certbot arac\u0131 ile Nginx yap\u0131land\u0131rmam\u0131z\u0131 otomatik olarak g\u00fcncelleyebiliriz.<\/p>\n<h4>Certbot Kurulumu<\/h4>\n<p>Certbot&#8217;u ve Nginx eklentisini kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo snap install core\nsudo snap refresh core\nsudo snap install --classic certbot\nsudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot\n<\/code><\/pre>\n<h4>SSL Sertifikas\u0131 Alma<\/h4>\n<p>\u015eimdi Certbot&#8217;u kullanarak Nginx i\u00e7in SSL sertifikalar\u0131n\u0131 alal\u0131m. Certbot, Nginx yap\u0131land\u0131rman\u0131z\u0131 otomatik olarak alg\u0131layacak ve g\u00fcncelleyecektir:<\/p>\n<pre><code class=\"language-bash\">sudo certbot --nginx -d your_domain -d www.your_domain\n<\/code><\/pre>\n<p>Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Certbot size birka\u00e7 soru soracakt\u0131r (e-posta adresi, hizmet \u015fartlar\u0131n\u0131 kabul etme vb.). Ba\u015far\u0131l\u0131 olursa, Nginx yap\u0131land\u0131rma dosyan\u0131z otomatik olarak HTTPS i\u00e7in g\u00fcncellenecek ve HTTP istekleri HTTPS&#8217;ye y\u00f6nlendirilecektir.<\/p>\n<p>Certbot&#8217;un otomatik olarak ekledi\u011fi Nginx yap\u0131land\u0131rmas\u0131 yakla\u015f\u0131k olarak \u015f\u00f6yle g\u00f6r\u00fcnecektir:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen [::]:80;\n    server_name your_domain www.your_domain;\n\n    location \/ {\n        return 301 https:\/\/$host$request_uri;\n    }\n\n    # Certbot taraf\u0131ndan eklenenler\n    # include \/etc\/letsencrypt\/options-ssl-nginx.conf;\n    # ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem;\n}\n\nserver {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name your_domain www.your_domain;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/your_domain\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/your_domain\/privkey.pem;\n\n    include \/etc\/letsencrypt\/options-ssl-nginx.conf;\n    ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem;\n\n    location \/ {\n        proxy_pass http:\/\/go-web-app: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<\/code><\/pre>\n<p>Certbot ayr\u0131ca sertifikalar\u0131n otomatik olarak yenilenmesini sa\u011flayan bir cron job veya systemd timer da kuracakt\u0131r. Yenilemenin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in test edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo certbot renew --dry-run\n<\/code><\/pre>\n<h3>Docker Compose ile Da\u011f\u0131t\u0131m<\/h3>\n<p>Uygulamam\u0131z\u0131 ve Nginx&#8217;i ayr\u0131 Docker konteynerleri olarak \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z ve bu konteynerlerin birbirleriyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flamak i\u00e7in Docker Compose kullanaca\u011f\u0131z. Docker Compose, \u00e7oklu konteyner Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r.<\/p>\n<h4>Docker ve Docker Compose Kurulumu<\/h4>\n<p>E\u011fer hen\u00fcz kurulu de\u011filse, Ubuntu sunucunuzda Docker ve Docker Compose&#8217;u kural\u0131m:<\/p>\n<pre><code class=\"language-bash\"># Docker Kurulumu\nsudo apt update\nsudo apt install ca-certificates curl gnupg -y\nsudo install -m 0755 -d \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\nsudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\necho \\\n  \"deb [arch=\"$(dpkg --print-architecture)\" signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\n  \"$(. \/etc\/os-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y\n\n<h2>Mevcut kullan\u0131c\u0131y\u0131 docker grubuna ekleyerek sudo kullanmadan docker komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmay\u0131 sa\u011flar<\/h2>\nsudo usermod -aG docker $USER\nnewgrp docker # De\u011fi\u015fikli\u011fin hemen etkili olmas\u0131 i\u00e7in (veya oturumu kapat\u0131p a\u00e7\u0131n)\n<\/code><\/pre>\n<p>Kurulumu test edin:<\/p>\n<pre><code class=\"language-bash\">docker run hello-world\ndocker compose version\n<\/code><\/pre>\n<h4>Docker Compose Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Go uygulama projenizin k\u00f6k dizininde (<code>go-web-app<\/code> dizini) <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">cd go-web-app # E\u011fer farkl\u0131 bir dizindeyseniz\nnano docker-compose.yml\n<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\n\nservices:\n  go-app:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    image: go-web-app:latest\n    container_name: go-web-app\n    restart: always\n    environment:\n      - PORT=8080 # Go uygulamam\u0131z\u0131n dinledi\u011fi port\n    expose:\n      - \"8080\" # Sadece Docker i\u00e7indeki di\u011fer servisler eri\u015febilir\n\n  nginx:\n    image: nginx:latest\n    container_name: nginx-proxy\n    restart: always\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - .\/nginx\/conf.d:\/etc\/nginx\/conf.d:ro # Nginx yap\u0131land\u0131rma dosyas\u0131\n      - \/etc\/letsencrypt:\/etc\/letsencrypt:ro # Let's Encrypt sertifikalar\u0131\n      - \/var\/log\/nginx:\/var\/log\/nginx # Nginx loglar\u0131 i\u00e7in\n    depends_on:\n      - go-app\n    networks:\n      - webapp-network\n\nnetworks:\n  webapp-network:\n    driver: bridge\n<\/code><\/pre>\n<p>Bu <code>docker-compose.yml<\/code> dosyas\u0131 iki servis tan\u0131mlar:<\/p>\n<ul>\n<li><strong><code>go-app<\/code>:<\/strong> Daha \u00f6nce olu\u015fturdu\u011fumuz <code>Dockerfile<\/code>&#8216;\u0131 kullanarak Go uygulamam\u0131z\u0131n imaj\u0131n\u0131 olu\u015fturur ve \u00e7al\u0131\u015ft\u0131r\u0131r. <code>expose<\/code> ile sadece Docker a\u011f\u0131 i\u00e7inde 8080 portunu a\u00e7ar.<\/li>\n<li><strong><code>nginx<\/code>:<\/strong> Nginx&#8217;in resmi Docker imaj\u0131n\u0131 kullan\u0131r. Sunucunun 80 ve 443 portlar\u0131n\u0131 konteynerin 80 ve 443 portlar\u0131na e\u015fler. Nginx yap\u0131land\u0131rma dosyam\u0131z\u0131 (<code>nginx\/conf.d\/default.conf<\/code> olarak belirtilecek), Let&#8217;s Encrypt sertifikalar\u0131n\u0131 ve Nginx loglar\u0131n\u0131 sunucudaki dizinlerden konteynere ba\u011flar (volume mount). <code>depends_on: go-app<\/code>, Nginx servisinin Go uygulamas\u0131 servisinden sonra ba\u015flat\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<h4>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Docker Compose \u0130\u00e7in Ayarlama<\/h4>\n<p>Nginx konteynerinin yap\u0131land\u0131rma dosyas\u0131n\u0131 sunucudan almak yerine, Docker Compose ile y\u00f6netmek i\u00e7in projemiz i\u00e7inde bir Nginx yap\u0131land\u0131rma dizini olu\u015ftural\u0131m. Go uygulama projenizin k\u00f6k dizininde (<code>go-web-app<\/code>) a\u015fa\u011f\u0131daki dizin yap\u0131s\u0131n\u0131 olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">mkdir -p nginx\/conf.d\n<\/code><\/pre>\n<p>\u015eimdi <code>nginx\/conf.d\/default.conf<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">nano nginx\/conf.d\/default.conf\n<\/code><\/pre>\n<p>\u0130\u00e7ine daha \u00f6nce Certbot taraf\u0131ndan g\u00fcncellenen Nginx yap\u0131land\u0131rmas\u0131n\u0131 yap\u0131\u015ft\u0131r\u0131n. <strong>\u00d6nemli:<\/strong> Nginx konteyneri, Go uygulamas\u0131n\u0131 <code>go-web-app<\/code> servis ad\u0131 \u00fczerinden bulacakt\u0131r, bu y\u00fczden <code>proxy_pass<\/code> i\u00e7indeki IP adresini veya <code>localhost<\/code>&#8216;u <code>http:\/\/go-web-app:8080<\/code> olarak de\u011fi\u015ftirdi\u011finizden emin olun.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    listen [::]:80;\n    server_name your_domain www.your_domain;\n\n    location \/ {\n        return 301 https:\/\/$host$request_uri;\n    }\n}\n\nserver {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name your_domain www.your_domain;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/your_domain\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/your_domain\/privkey.pem;\n\n    include \/etc\/letsencrypt\/options-ssl-nginx.conf;\n    ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem;\n\n    location \/ {\n        proxy_pass http:\/\/go-web-app:8080; # Buras\u0131 \u00f6nemli! go-web-app servis ad\u0131n\u0131 kullan\u0131yoruz.\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<\/code><\/pre>\n<p><strong>Not:<\/strong> Certbot&#8217;u sunucunuzda do\u011frudan Nginx ile \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131z i\u00e7in <code>\/etc\/letsencrypt<\/code> dizini zaten sunucunuzda mevcuttur. <code>docker-compose.yml<\/code> dosyas\u0131ndaki <code>- \/etc\/letsencrypt:\/etc\/letsencrypt:ro<\/code> sat\u0131r\u0131 bu dizini Nginx konteynerine salt okunur olarak ba\u011flar, b\u00f6ylece sertifikalara eri\u015febilir. Bu yakla\u015f\u0131m, Certbot&#8217;u ayr\u0131 bir konteynerde \u00e7al\u0131\u015ft\u0131rmaktan daha basit ve \u00e7o\u011fu senaryo i\u00e7in yeterlidir.<\/p>\n<h4>Uygulamay\u0131 Docker Compose ile Ba\u015flatma<\/h4>\n<p>Go uygulama projenizin k\u00f6k dizininde (<code>go-web-app<\/code> dizini) a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker compose up -d\n<\/code><\/pre>\n<ul>\n<li><code>docker compose up<\/code>: <code>docker-compose.yml<\/code> dosyas\u0131ndaki servisleri ba\u015flat\u0131r.<\/li>\n<li><code>-d<\/code>: Servisleri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>\u0130lk \u00e7al\u0131\u015ft\u0131rmada Docker imajlar\u0131 indirilecek\/olu\u015fturulacak ve konteynerler ba\u015flayacakt\u0131r. Kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker compose ps\n<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da hem <code>go-web-app<\/code> hem de <code>nginx-proxy<\/code> servislerinin <code>running<\/code> durumda oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h4>Loglar\u0131 Kontrol Etme<\/h4>\n<p>Konteynerlerin loglar\u0131n\u0131 takip etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker compose logs -f\n<\/code><\/pre>\n<p>Belirli bir servisin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in (\u00f6rn. Go uygulamas\u0131):<\/p>\n<pre><code class=\"language-bash\">docker compose logs -f go-app\n<\/code><\/pre>\n<h3>Uygulamay\u0131 Test Etme<\/h3>\n<p>Her \u015feyin do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in uygulaman\u0131z\u0131 test edin.<\/p>\n<ol>\n<li><strong>Taray\u0131c\u0131dan Eri\u015fim:<\/strong> Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve <code>https:\/\/your_domain<\/code> adresine gidin. &#8220;Merhaba, Docker ve Nginx ile Go!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Ayr\u0131ca taray\u0131c\u0131n\u0131z\u0131n adres \u00e7ubu\u011funda bir kilit simgesi veya &#8220;G\u00fcvenli&#8221; ibaresi ile HTTPS ba\u011flant\u0131s\u0131n\u0131n aktif oldu\u011funu kontrol edin.<\/li>\n<li><strong><code>curl<\/code> ile Test:<\/strong> Sunucunuzdan veya yerel makinenizden <code>curl<\/code> komutunu kullanarak test yapabilirsiniz:\n<pre><code class=\"language-bash\">curl -I https:\/\/your_domain\ncurl https:\/\/your_domain\n<\/code><\/pre>\n<p><code>-I<\/code> bayra\u011f\u0131 sadece HTTP ba\u015fl\u0131klar\u0131n\u0131 g\u00f6sterir ve <code>HTTP\/2 200<\/code> gibi bir durum kodu ile SSL&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 teyit eder. \u0130kinci komut ise sayfan\u0131n i\u00e7eri\u011fini g\u00f6sterir.<\/p>\n<\/ol>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu rehberde, Go ile geli\u015ftirilmi\u015f basit bir web uygulamas\u0131n\u0131 Docker kullanarak konteynerle\u015ftirdik, Nginx&#8217;i ters proxy olarak yap\u0131land\u0131rd\u0131k ve Let&#8217;s Encrypt ile g\u00fcvenli HTTPS ba\u011flant\u0131s\u0131 sa\u011flad\u0131k. Son olarak, t\u00fcm bu bile\u015fenleri Docker Compose ile bir araya getirerek kolayca y\u00f6netilebilir bir da\u011f\u0131t\u0131m ortam\u0131 olu\u015fturduk. Bu yakla\u015f\u0131m, modern web uygulamalar\u0131n\u0131n h\u0131zl\u0131, g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131 i\u00e7in sa\u011flam bir temel sunar.<\/p>\n<p>Bu kurulum, uygulaman\u0131z\u0131 \u00fcretim ortam\u0131nda \u00e7al\u0131\u015ft\u0131rmak i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak, daha b\u00fcy\u00fck \u00f6l\u00e7ekli veya daha kritik uygulamalar i\u00e7in a\u015fa\u011f\u0131daki ek ad\u0131mlar\u0131 ve konular\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak isteyebilirsiniz:<\/p>\n<ul>\n<li><strong>Veritaban\u0131 Entegrasyonu:<\/strong> Uygulaman\u0131z bir veritaban\u0131 kullan\u0131yorsa, veritaban\u0131 servisini de Docker Compose dosyas\u0131na ekleyebilir veya harici bir y\u00f6netilen veritaban\u0131 hizmeti kullanabilirsiniz.<\/li>\n<li><strong>Ortam De\u011fi\u015fkenleri:<\/strong> Hassas bilgiler (API anahtarlar\u0131, veritaban\u0131 kimlik bilgileri) i\u00e7in <code>.env<\/code> dosyalar\u0131 veya Docker Secret&#8217;lar\u0131 kullan\u0131n.<\/li>\n<li><strong>Log Y\u00f6netimi:<\/strong> Uygulama ve Nginx loglar\u0131n\u0131 merkezi bir log y\u00f6netim sistemine (\u00f6rn. ELK Stack, Grafana Loki) g\u00f6ndermeyi d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n<li><strong>\u0130zleme ve G\u00f6zetim:<\/strong> Prometheus ve Grafana gibi ara\u00e7larla uygulaman\u0131z\u0131n ve sunucunuzun performans\u0131n\u0131 izleyin.<\/li>\n<li><strong>CI\/CD Boru Hatt\u0131:<\/strong> Uygulama g\u00fcncellemelerini otomatik hale getirmek i\u00e7in bir S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) boru hatt\u0131 kurun.<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131:<\/strong> Sunucunuzun g\u00fcvenlik duvar\u0131n\u0131 (UFW) sadece gerekli portlar\u0131 (80, 443, 22) a\u00e7acak \u015fekilde yap\u0131land\u0131r\u0131n.<\/li>\n<li><strong>Yedekleme:<\/strong> Uygulama verilerinizin ve yap\u0131land\u0131rmalar\u0131n\u0131z\u0131n d\u00fczenli yedeklerini al\u0131n.<\/li>\n<\/ul>\n<p>Bu rehberin, Go web uygulamalar\u0131n\u0131z\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00fczerinde ba\u015far\u0131yla da\u011f\u0131tman\u0131za yard\u0131mc\u0131 oldu\u011funu umuyoruz. \u0130yi geli\u015ftirmeler ve da\u011f\u0131t\u0131mlar dileriz!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi\nBu makale, Go ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Docker kon","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-33078","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 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine 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-docker-ve-nginx-ile-ubuntu-22-04-uzerine-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 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi Bu makale, Go ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Docker kon\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-29T05:41:00+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=\"15 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-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2025-10-29T05:41:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\"},\"wordCount\":2032,\"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-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\",\"name\":\"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-29T05:41:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-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 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine 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 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine 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-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi","og_description":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi Bu makale, Go ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131 Docker kon","og_url":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-29T05:41:00+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi","datePublished":"2025-10-29T05:41:00+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/"},"wordCount":2032,"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-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/","name":"Go Web Uygulamas\u0131n\u0131 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-29T05:41:00+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/go-web-uygulamasini-docker-ve-nginx-ile-ubuntu-22-04-uzerine-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 Docker ve Nginx ile Ubuntu 22.04 \u00dczerine 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\/33078","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=33078"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33078\/revisions"}],"predecessor-version":[{"id":33079,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33078\/revisions\/33079"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}