GUI (Grafiksel Kullanıcı Arayüzü)
Heroku'da Go Uygulaması Yayınlama

Öncelikle Bilmeyenler İçin Heroku Nedir?

Kısaca Heroku, JavaScript, Go, Ruby, Python, Scala, PHP, Java, Clojure ile geliştirdiğimiz sunucu uygulamalarını ücretsiz barındırabileceğimiz bir platformdur.
Aşağıdaki bağlantıdaki blog yazısını okumanızı tavsiye ederim.
Heroku Nedir?

Projemizi Planlayalım

Bu örneğimizde bir web sunucu oluşturacağız. Öncelikle Go modules kullanacağımız için projemizi kullanıcının go dizinine oluştumalıyız.
Komut satırını açalım ve aşağıdaki komutu yazarak bahsettiğimiz dizine geçelim.
Windows'ta:
cd C:\\Users\%username%\go\src
GNU/Linux ve MacOS'te:
cd ~/go/src
Bu konuma proje dizinimizi oluşturalım
mkdir heroku-app
heroku-app klasörü projemizin ana dizini olacak. Aşağıdaki komut ile proje ana dizinimize girelim.
cd heroku-app
Daha sonra bu dizini code . komutu ile VSCode üzerinde açalım.
main.go dosyamızı oluşturalım ve aşağıdaki gibi olsun.
1
package main
2
3
import (
4
"fmt"
5
"net/http"
6
"os"
7
)
8
9
func main() {
10
port := os.Getenv("PORT")
11
http.HandleFunc("/", anaSayfa)
12
http.ListenAndServe(":"+port, nil)
13
}
14
15
func anaSayfa(w http.ResponseWriter, r *http.Request) {
16
port := os.Getenv("PORT")
17
fmt.Fprintf(w, "Merhaba Dünya!\nKullanılan Port: "+port)
18
}
Copied!
Yukarıda normal web sunucu oluşturma kodlarından biraz farklı işlemler var. Bunları açıklamak gerekir ise:
port değişkenimiz sistemden string tipinde PORT ortam değişkenini alıyor. Yani port değişkeni sunucumuzun hangi portta çalışacağını belirliyor. Uygulamamızı Heroku'ya yükledikten sonra sistemimiz Heroku olduğu için port ortam değişkenini Heroku'dan almış olacağız. Sunucunun çalışacağı portu Heroku belirlediği için portu kendimiz kodlar içinde belirleyemiyoruz.
http.ListenAndServe() fonksiyonuna da parametre olarak ":"+port vererek devam ediyoruz.
Sunucumuzun ana dizinini yakalacak olan anaSayfa fonksiyonumuza bakalım.
Yine burada sistemden portu istedik. Hemen aşağısında "Merhaba Dünya!" ve kullanılan portun çıktısını vermesini sağladık. Kodlarımız artık hazır.
Bu projemizde dışarıdan bir pakete ihtiyacımız olmadı. Hepsi Go'nun hazır paketlerinden. Eğer dışarıdan paketler olsa ne yapacaktık? Hadi hemen görelim.
Komut satırına go modules için aşağıdaki komutu yazalım.
go mod init
Eğer projenizi go/src klasörü içinde oluşturmazsanız bu komut hata verecektir.
go modules örnek
Böylece go.mod dosyamızı oluşturduk. Dışarıdan paket bağımlılıklarını yüklemek için aşağıdaki komutu yazalım.
go mod vendor
Bu komutu yazdığınızda paket bağımlılığınız yoksa aşağıdaki gibi bir çıktı alacaksınız.
vendor örneği
Eğer paket bağımlılığınız varsa projenizin ana dizininde vendor adında bir klasör oluşacak ve bu klasörün içinde dış paketlerin kaynak kodları bulunanacak.

Versiyon sistemli hale getirelim

Heroku platformu versiyon kontrol sistemi ile çalıştığı için, öncelikle git projemizi oluşturalım. Projemizin ana dizinindeyken komut satırına:
git init
Daha sonra oluşturduğumuz projeyi staging'e almak için:
git add .
yazalım. Commit oluşturmak için ise:
git commit -m "Heroku uygulamamı oluşturdum."

Heroku'da Yayınlama

Öncelikle Heroku'nun komut satırı uygulamasını bilgisayarımıza kuralım.
Windows, MacOS ve Ubuntu için bu adresten kurabilirsiniz.
Arch Linux ve türevleri için kolaylık açısından AUR üzerinden heroku-cli-bin aratarak kurabilirsiniz.
Uygulamayı kurduktan sonra Heroku Hesabımıza bağlayalım.
Komut satırına aşağıdakileri yazalım.
heroku login
Şöyle bir çıktı verecek:
Heroku cli Login
q tuşuna basınca giriş yapmayı iptal eder. O yüzden giriş yapmak için herhangi bir tuşa başabilirsiniz. (Lütfen bilgisayarınızın güç tuşuna basmayın 🙂)
Daha sonra varsayılan tarayıcınız üzerinden giriş yapma sayfası açılacak. Heroku hesabınıza girdikdek sonra tarayıcınızda girişin başarılı olduğunu söylecek.
Heroku tarayıcı girişi
Komut satırında da aşağıdaki gibi bir çıktı göreceksiniz. Kendi bilgilerim olduğu için birazını sansürledim.
Heroku cli başarılı giriş
Böylece başarıyla giriş yapmış olduk.
Heroku projemizi oluşturalım.
heroku create
Şöyle bir çıktı alacağız.
heroku uygulama oluşturma
Yazdığımız kodları Heroku uygulamamıza yükleyelim.
git push heroku master
Bu komut sonrasında aşağıdakine benzer bir sonuç almanız gerekir.
1
[[email protected] heroku-app]$ git push heroku master
2
Enumerating objects: 4, done.
3
Counting objects: 100% (4/4), done.
4
Delta compression using up to 4 threads
5
Compressing objects: 100% (3/3), done.
6
Writing objects: 100% (4/4), 477 bytes | 477.00 KiB/s, done.
7
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
8
remote: Compressing source files... done.
9
remote: Building source:
10
remote:
11
remote: -----> Go app detected
12
remote: -----> Fetching jq... done
13
remote: -----> Fetching stdlib.sh.v8... done
14
remote: ----->
15
remote: Detected go modules via go.mod
16
remote: ----->
17
remote: Detected Module Name: heroku-app
18
remote: ----->
19
remote: !! The go.mod file for this project does not specify a Go version
20
remote: !!
21
remote: !! Defaulting to go1.12.17
22
remote: !!
23
remote: !! For more details see: https://devcenter.heroku.com/articles/go-apps-with-modules#build-configuration
24
remote: !!
25
remote: -----> New Go Version, clearing old cache
26
remote: -----> Installing go1.12.17
27
remote: -----> Fetching go1.12.17.linux-amd64.tar.gz... done
28
remote: -----> Determining packages to install
29
remote:
30
remote: Detected the following main packages to install:
31
remote: heroku-app
32
remote:
33
remote: -----> Running: go install -v -tags heroku heroku-app
34
remote: heroku-app
35
remote:
36
remote: Installed the following binaries:
37
remote: ./bin/heroku-app
38
remote:
39
remote: Created a Procfile with the following entries:
40
remote: web: bin/heroku-app
41
remote:
42
remote: If these entries look incomplete or incorrect please create a Procfile with the required entries.
43
remote: See https://devcenter.heroku.com/articles/procfile for more details about Procfiles
44
remote:
45
remote: -----> Discovering process types
46
remote: Procfile declares types -> web
47
remote:
48
remote: -----> Compressing...
49
remote: Done: 3.6M
50
remote: -----> Launching...
51
remote: Released v3
52
remote: https://obscure-ocean-33068.herokuapp.com/ deployed to Heroku
53
remote:
54
remote: Verifying deploy... done.
55
To https://git.heroku.com/obscure-ocean-33068.git
56
* [new branch] master -> master
Copied!
Yukarıdaki çıktıya göre aşağıdaki işaretlediğim yerde uygulamamızın adresi olacak.
Heroku Push sonuç
Bu adres tabiki de sizde farlı olacak. Buradan girip uygulamanızı kontrol edebilirsiniz. Benim sonucum ise şu şekilde:
Site sonucu
Last modified 1yr ago