Bloğa geri dön

Ubuntu 22.04 üzerinde Nginx kullanarak bir Go Web Uygulaması Dağıtma

Ubuntu 22.04 üzerinde Nginx kullanarak bir Go Web Uygulaması Dağıtma

Go açık kaynaklı, genel amaçlı bir programlama dilidir. Python'ın üretkenliğinden esinlenirken C'nin yeteneklerini sunar. İlk olarak Google tarafından kendi kod tabanlarında karşılaştıkları sorunları (kod karmaşıklığı ve uzun derleme süresi) çözmek amacıyla geliştirilmiştir. Diğer tüm modern programlama dilleri gibi Go da her türlü amaca uygundur. Örneğin, web geliştirme, komut satırı betikleri, ağ sunucusu uygulamaları, ön uç geliştirme vb. için kullanılabilir.

Bu kılavuzda, size Ubuntu 22.04 LTS üzerinde basit bir Go web uygulamasını dağıtma adımlarında yol göstereceğiz. Trafik yükünü yönetmek için bir Nginx ters proxy'si de uygulayacağız.

Önkoşullar

Bu kılavuzda gösterilen adımları gerçekleştirmek için önceden yapılandırılmış aşağıdaki bileşenlere ihtiyacınız olacaktır:

Hizmete bir alan adı üzerinden erişilecekse, sunucuya yönlendirilmiş bir FQDN'niz olmalıdır. Bu durumda, Nginx'i SSL ile güvence altına almanız önerilir. Şu konudan daha fazla bilgi edinebilirsiniz: eğitimimizden Ubuntu üzerinde Let’s Encrypt ile Nginx'i güvence altına alma.

Adım 1 – Bir Go Web Uygulaması Oluşturma

Alan adına erişildiğinde ekrana –Hello World– yazdıracak basit bir Go web uygulaması oluşturacağız. Ayrıca uygulama, şuraya erişildiğinde kullanıcıyı selamlayacaktır: <domain>/greet/<username>.

Şunun altında yeni bir proje oluşturarak başlayın: $GOPATH. Proje dizinini oluşturun:

Go Web Application Make Dir

Mevcut dizini değiştirin:

Go Web Application Change Dir

Ardından, bir proje başlatın:

Go Web Application Init Project

Ardından, şunu oluşturun: main.go bu dosya Go uygulamamızın kökü olarak hizmet edecektir. Web uygulamamızın kaynak kodunu barındıracaktır:

Projeyi VS Code'da açın:

Aşağıdaki kodu şu dosyaya yapıştırın: main.go:

Go Web Application Main Go

Yeni oluşturduğumuz Go programının hızlı bir analizini yapalım:

  • Şu terim: package main uygulamamızın giriş noktası olarak hizmet eder. Ayrıca Go derleyicisine dosyayı paylaşılan bir kitaplık yerine yürütülebilir bir dosya olarak derlemesini söyler.
  • Şu import ifadesi, programın çalışması için gereken tüm ek modülleri içe aktarır. Burada, fmt (metinleri yazdırmak için) ve net/http (web sunucusu uygulamaları için) paketlerini içe aktardık.
  • Şu işlevi kullanarak: http.HandleFunc, iki rota oluşturduk:
    • İlk rota / şunun içinde ana rota olarak hizmet eder: func main.
    • İkinci rota /greet/ bir URL parametresi (bu durumda bir dize) kabul eder. Dize daha sonra karşılama mesajı eşliğinde görüntülenir.
      • URL Yolu, şundan sonraki değeri saklamak için kullanılır: /greet/. Değer daha sonra URL parametresinin name i olarak aktarılır.
    • The http.ListenAndServe fonksiyonu web sunucusunu başlatır. Burada, şu portu dinliyor: 9990.

Artık programımız hazır olduğuna göre, dosyayı çalıştırılabilir bir dosyaya derleyin:

Go derleyicisi, dosyayla aynı ada sahip çalıştırılabilir bir dosya oluşturacaktır. Çıktıya göz atın:

Go Web Application ls -lh

Adım 2 – Arka Planda Çalıştırma için bir systemd Birim Dosyası Yapılandırma

Şu ana kadar, mevcut kullanıcı sistemden çıkış yaparsa Go web uygulaması çalışmayı durduracaktır. Bu, bir web sunucusu için kötü bir tasarımdır. Bu sorunu çözmek için, kullanıcı sunucudan çıkış yapsa bile arka planda çalışmaya devam etmesini sağlayacak bir systemd birim dosyası oluşturacağız. Bu, yapılandırmayı üretim düzeyinde bir dağıtıma bir adım daha yaklaştırır.

Özel bir systemd dosyası oluşturun: goweb.service şunun altında: /lib/systemd/system:

Birim dosyasına aşağıdaki kod parçacığını ekleyin:

go web service

Burada,

  • The variable ExecStart değişkeni, proje dizinimizde bulunan ana çalıştırılabilir dosya aracılığıyla hizmetin giriş noktasını belirtir ( $GOPATH/go-web). $GOPATH belirtmek yerine çalıştırılabilir dosyanın tam yolunu yazdığımıza dikkat edin. Bunun nedeni, $GOPATH değişkeninin yalnızca kullanıcı tarafından görülebilmesidir.
  • The variable Restart değişkeni, systemd birimine programın çalışması durduğunda ne yapacağını söyler. always değeri, systemd birimine program her durduğunda onu yeniden başlatmasını söyler.
  • RestartSec değişkeni, systemd birimine programı yeniden başlatmayı denemeden önce belirli bir süre beklemesini söyler. Burada değer şu şekilde ayarlanmıştır: 5s (5 saniye).
  • Şu ifade: WantedBy=multi-user.target, systemd biriminin hizmeti hangi durumda etkinleştireceğini belirtir.

Dosyayı kaydedip düzenleyiciyi kapatın. Hizmeti başlatın:

go web start

Hizmetin çalışır durumda olup olmadığını doğrulayın:

go web status

Çıktının da gösterdiği gibi, uygulama çalışır durumdadır. Artık Nginx'i ters proxy (reverse proxy) olarak kullanmaya hazırız.

Adım 3 – Nginx'i Ters Proxy Olarak Yapılandırma

Şimdi, Nginx'in ters proxy olarak çalışması için bir sunucu bloğu (server block) oluşturacağız. Web uygulaması, ters proxy aracılığıyla internete açılacaktır (ek performans ve güvenlik için).

Mevcut aktif dizini şununla değiştirin: sites-available:

cd

Şimdi, uygulamanızı sunmak istediğiniz alan adıyla bir dosya oluşturun. Gösterim amacıyla şunu kullanacağız: example.com:

 

Blok dosyasına aşağıdaki kodu girin:

example.com

Burada, Go web uygulamasını sunucunun IP adresinde (localhost) proxy_pass kullanarak şu portta sunuyoruz: 9990.

Nginx bloğunu etkinleştirmek için, dosyanın sites-enabled klasörüne bir sembolik bağlantısını (symlink veya soft link olarak da bilinir) oluşturun:

create sym

Değişikliklerin geçerli olması için Nginx yapılandırmasını yeniden yükleyin:

reload nginx

Adım 4 – Doğrulama

Her şey beklendiği gibi gittiyse, web uygulamasına artık şuradan erişilebiliyor olmalıdır: localhost:9990 ve yapılandırdığımız alan adı. URL'yi bir web tarayıcısında açın:

Hello World

Beklendiği gibi, uygulama ekrana “Hello World” yazdırıyor. Bu, birincil rotanın görevidir. Ardından, aşağıdaki URL'yi ziyaret ederek ikinci rotayı test edin:

Hello Cloud

Uygulama, URL'den alınan parametredeki isimle birlikte basit karşılama mesajını başarıyla döndürüyor.

Voila! Yerel sunucumuzda bir Go web uygulamasını başarıyla dağıttık!

Son Düşünceler

Bu kılavuzda, Go standart kütüphanelerinin yardımıyla basit bir Go web uygulamasını dağıtmayı gösterdik. Ayrıca Nginx kullanarak bir ters proxy dağıttık. Gösterim yerel bir sunucuda yapılmış olsa da, genel bir sunucu için, internete güvenli bir şekilde açılmak amacıyla bir SSL sertifikası kurmanız şiddetle önerilir. Daha fazla Go programlama için, şu eğitimimize göz atabilirsiniz: Go Programlarını Derleme ve Kurma.

Keyifli Kodlamalar!

author

Pranay Kapgate

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.