Cara Deploy Aplikasi Golang ke Heroku

​Perlu diketahui Heroku Cloud Application Platform adalah Platform as a Service (PaaS) yang memungkinkan kita untuk menjalankan, membangun, dan mengoperasikan aplikasi sepenuhnya di cloud.

Apa sih platform Heroku itu? silahkan simak postingan ini ya .

 

 

langsung saja kita akan mendeploy web aplikasi golang kita ke Heroku. Simak step by step ya

Install Heroku CLI

Kalian diharapkan untuk mendownload Heroku CLI terlebih dahulu di link ini.

Ikuti langkah demi langkah hingga sukses menginstall Heroku CLI tersebut.

Kita versi Heroku CLI dengan perintah heroku --version

 

Siapkan Project Golang

Dalam tutorial ini kita akan mendeploy aplikasi ini . Pastikan sudah membaca file README.md ya .

Atau siapkan sendiri project golang kalian.

 

Module Init

Setelah menyiapkan project golang, silahkan buat module pada project kamu.

Saya sarankan baiknya mengikuti format yang saya berikan dibawah ini

go mod init github.com/[user_name]/[project_name]

ubah user_name sesuai username akun github kamu,

ubah project_name sesuai nama project kamu.

 

Buat Procfile

Kita buat Procfile di Root folder project kita.

Ketikkan kode dibawah ini letakkan pada file Procfile

web: bin/[project_name]

Silahkan Ubah project_name sesuai nama project kamu.

Dalam kode diatas maksudnya adalah biarkan Heroku menjalan servernya berdasarkan hasil binary file project kita. Jadi tidak membaca sebagai file berekstensi .go

Nah, nanti dijelaskan pada langkah ke 8.

 

Inisialisasi Git Repo

Karena Heroku mirip konsepnya dengan Git pada umumnya untuk versioning maupun deploy, kita perlu inisialisasi git pada project kita terlebih dahulu.

Ketikkan perintah

git init

 

Login ke Heroku CLI

Selanjutnya kita perlu login terlebih dahulu lewat Command Promp/Terminal masing-masing.

Jalankan perintah

heroku login

 

Buat Heroku Application

Disini akan membuat nama aplikasi kita di Heroku

Jalankan perintah

heroku create 

Ubah sesuai nama aplikasi yang ingin kamu buat.

Misalnya disini saya beri nama aplikasinya go-perpustakaan-api.

 

Local Test

Lanjut pembahasan point ke 2, pada langkah ini kita akan build project kita menjadi binary file,

hasil dari binary file ini nantinya akan dibaca di server heroku.

Silahkan ketikkan perintah terminal dibawah ini

mkdir bin

penjelasan:

Kita hanya membuat folder bin kosong saja, agar nantinya sistem di heroku membaca file binary terletak di folder bin

jika ingin testing di local development, jalankan perintah

heroku local

 

Konfigurasi Database di Heroku

Inilah yang ditunggu-tunggu, bagaimana kita akan mengkoneksikan database ke project kita yang ada di Heroku.

Disini saya menggunakan postgres yang dimiliki oleh Heroku sendiri.

Jalankan perintah dibawah ini untuk membuat PGSQL database di Project kita

heroku addons:create heroku-postgresql:hobby-dev

Setelah itu kita perlu mencari tau informasi dbname, host, port, user, password yang ada di postgres Heroku.

Maksudnya apa? tanpa kita mengetahui itu semua kita tidak akan bisa terkoneksi dengan database.

Jalankan perintah dibawah ini untuk mendapatkan itu semua

heroku pg:credentials:url

Maka akan nampak seperti dibawah ini

Connection information for default credential.
Connection info string:
   "dbname= host= port=5432 user= password= sslmode=require"
Connection URL:
   postgres://:@:5432/

Setelah mendapatkan informasi diatas, selanjutnya kita akan menambahkan Config Variable pada Heroku, isikan sesuai hasil yang ada seperti contoh atas,  disini saya memecah semua variable mengikuti file .env ini, jadi mungkin teman-teman bisa mencustomisasi sesuai kebutuhan, berikut adalah Cofig Variable milikku diantaranya :

DB_HOST untuk mencari alamat host / domain database

heroku config:add DB_HOST=

DB_DRIVER untuk driver koneksi ke database

heroku config:add DB_DRIVER=postgres

DB_PORT untuk membuka port yang terbuka, alias biar bisa saling berkomunikasi

heroku config:add DB_PORT=5432

DB_NAME untuk mengetahui database mana yang dipakai dalam project ini

heroku config:add DB_DATABASE=

DB_USER untuk memberikan akses ke database

heroku config:add DB_USER=

DB_PASSWORD untuk memberikan akses ke database

heroku config:add DB_PASSWORD=

SSL_MODE untuk mengaktifkan/mengnonaktifkan ssl mode yang ada pada koneksi ke driver

heroku config:add SSL_MODE=require

TIMEZONE untuk memberi konfigurasi timezone pada database

heroku config:add TIMEZONE=Asia/Jakarta

 

OPTIONAL

MIGRATE untuk memberi konfigurasi apakah ingin migrating database atau tidak

heroku config:add MIGRATE=true

API_SECRET untuk menampung secret key pada API

heroku config:add API_SECRET=mjhsdbfjkghsbdfkjgbsdfg

WAJIB ADA!!

GOVERSION untuk memberi konfigurasi versi golang yang kita butuhkan [reference]

heroku config:add GOVERSION=go1.15

untuk mengecek ketersediaan versi yang lain, silahkan simak artikel ini .

 

Deployment

Setelah itu semua project kita kita add ke Git terlebih dahulu

git add .

Berikan Commit pada fiel yang telah kita add

git commit -m "deploy ke heroku"

Setelah itu Push ke Heroku Server

git push heroku master

Akan terlihat prosesnya seperti ini

Note!!!

Lakukanlah debugging dengan cara, buka terminal jalankan commad dibawah

heroku logs --tail

Jika mengalami error seperti dibawah ini

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

Silahkan ubah portnya jadi bawaan dari heroku, like this [reference]

port := os.Getenv("PORT")
	if port == "" {
		port = "8000"
	}

log.Fatal(http.ListenAndServe(":"+port, r))

Maksud dari os.Getenv("PORT") adalah sistem akan mengambil default port yang disediakan oleh heroku

Buka aplikasi kembali melalui url .herokuapp.com/

punya saya telah berhasil https://go-perpustakaan-api.herokuapp.com/

Yap, kita sampai sini kita sudah berhasil Mendeploy Aplikasi Golang ke Heroku serta konfigurasi database dengan PostgreSql.

Cukup sekian ya teman-teman, semoga artikelnya membantu.

​

Apabila artikel ini membantu kamu, dan jika kamu memiliki sedikit rezeki, mohon dukungannya dalam bentuk segelas kopi melalui URL dibawah ini:

Last Updated: Selasa, 17 Agustus 2021 5:25 GMT+7

Comments