How to deploy golang app in heroku
Heroku is a platform as a service (Paas) that enable you to deploy and building web apps and save to the cloud. Heroku support any languages or framework like NodeJS, Golang, Ruby, PHP, Python, Scala, and Clojure.
You can be using heroku with premium and free features. please check this link to compare it.
Okay, today I’m trying to show you, about how to deploy web build with golang to heroku, before start, please make sure you have an account in heroku, if not please register before.
Lets get started
First step create directory with name deploy-golang-app-in-heroku
and initialize with go module go mod init github.com/<your_username>/deploy-golang-app-in-heroku
so then this command automates generate new file go.mod
in your root directory.
Please create main.go
in the root directory and fill with the example script below.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main
import (
"encoding/json"
"fmt"
_ "github.com/joho/godotenv/autoload"
"log"
"net/http"
"os"
)
// Response types
type Response struct {
Status int `json:"status"`
Response string `json:"response"`
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
res := Response{}
res.Status = http.StatusOK
res.Response = "Hello Golang"
json.NewEncoder(w).Encode(res)
})
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", os.Getenv("PORT")), nil))
}
Okay next create file .env
and fill with PORT=8080
to define dynamic port, and then to read .env
in golang I’m using https://github.com/joho/godotenv
library.
Okay, next let’s create Dockerfile
to define all commands to using for build golang app, and save in root directory.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM golang:latest
ADD . /app
WORKDIR /app
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
RUN chmod +x ./deploy-golang-app-in-heroku
EXPOSE 8080
CMD ./deploy-golag-app-in-heroku
Next create file heroku.yml
to building docker images like docker-compose
in docker, for more references please check this out.
1
2
3
4
5
build:
docker:
web: Dockerfile
worker:
dockerfile: Dockerfile
Okey finish, please push your code to github.
Heroku Dashboard
Please login to heroku dashboard, and create a new app suitable with your repo name to easy maintain in the future, I’m using same name with repository github.
Deployment method, please choose github and then connect with your repository.
Next, please go to the setting
menu in heroku, like image bellow, fill suitable with your .env
.
Okey finish, please see the example repo and demo for this tutorial.
Thanks.