How to Deploy Your Go API on Elestio

As a developer, you might have built multiple APIs and integrated them with your web application. So, In today's tutorial, we are going to see how you can quickly build a simple Ping-Pong API and deploy it easily and quickly on Elestio.

Let's set it up!

I presume you already have an API ready that you want to deploy. But for this tutorial, I will start you through the steps from the very beginning so feel free to skip some steps (But remember not all) as your codebase will need some changes to make your deployment successful. Let's start with creating a GitHub repository for your API

Next, we will go ahead and open this newly created repository in GitHub Codespaces. As I said if you already have the repo I recommend you use GitHub Codespaces or the code editor where you have already set your project

Building your Go API

This is an optional step, if you already have an API, please feel free to skip this

Once the codespaces are launched, head over to the terminal and enter the following command that will create a .modfolder in the repository

go mod init github.com/<username>/<repo-name>

Next, create main.go file in the root directory

Inside main.go file add the following code. In this tutorial, I won't be explaining the code if you want that let me know in the comments and I will get you a dedicated tutorial on it.

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {

	fmt.Println("Welcome to the Ping-Pong API")

	//Initializing the gin package
	router := gin.Default()

	//Endpoint we are going to use today
	router.GET("/ping", handlePing)

	//Server runs on everywhere IP and on 8080 port
	router.Run("0.0.0.0:8080")
}

//Function to handle the /ping endpoint
func handlePing(g *gin.Context) {
	g.IndentedJSON(http.StatusOK, gin.H{"message": "Pong!"})
}

After you have added the code main.go file, head over to the terminal and run the following command. It will create a .sum file with all the required libraries mentioned in .mod the file

go get .

After this, you can try out running your API and testing the /ping endpoint using curl or the "Open in browser" option

Deploying your API

Go ahead and create another file called elestio.yaml in your root directory and add the following code to it

config:
  runTime: "GO"
  version: ""
  framework: "GO"
  buildCommand: "go build -o main"
  buildDir: "./"
  runCommand: "./main"
ports:
  - protocol: "HTTPS"
    targetProtocol: "HTTP"
    listeningPort: "443"
    targetPort: "8080"
    targetIP: "172.17.0.1"
    public: true
    path: "/"
    isAuth: false
    login: ""
    password: ""
exposedPorts:
  - protocol: "HTTP"
    hostPort: "8080"
    containerPort: "8080"
    interface: "172.17.0.1"
environments:
  - key: "ENV"
    value: "production"
webUI:
  - url: "https://[CI_CD_DOMAIN]/ping"
    label: "Website"

This file states the configurations for your applications like the build and run commands you want to run to start your go API, then ports. Here the reverse proxy configuration is listening to the port 443 of the public IP address and the port 8080 is the port exposed by the Docker containers. All the traffic to the port 443 will be redirected to the port 8080 . Environment variables are stated with the webUI link you want to show to quickly access the API from the Elestio dashboard.

After adding this file, commit your code to the repository.

Now go to Elestio, and login and set up the account if you don't already have one set up.

Click on the "CI/CD" section from the left panel select your repository host and the repository that has your Api and click on "Import"

Now select your preferred cloud service provider

Give the deployment a name of your choice (You can keep the default name too)

Add a name to your project and Create a CI/CD pipeline

Awesome! You have successfully created a CI/CD pipeline that gets your API to the VMs.

Moving next, click on the "Services" Tab on the left and click on the service you just created.

Now check all the information on the overview if you want else head over to the Pipeline tab

After heading inside you will find an option "Website" Click on it and head over to the link provided in it. It's the API endpoint.

Note that because we only had /ping endpoint, I appended it to the URL provided in the configs. In the general scenario as you have multiple endpoints you can choose the URL to not append /ping and change it to /

As mentioned above if you have multiple API endpoints then it's a bad idea to add them to the URL, you can remove the /ping to get displayed in the URL by updating the elestio.yaml in your code to the following

#Before
webUI:
  - url: "https://[CI_CD_DOMAIN]/ping"
    label: "Website"
#=======================================================
#After
webUI:
  - url: "https://[CI_CD_DOMAIN]/"
    label: "Website"

Accessing your API

You can directly click on the link provided in the dashboard and you will see your response as follows

or you can make a curl request from the terminal in your local computer like

curl <url-from-the-dashboard>/ping

Where to go from here?

You can now successfully go ahead and insert this URL into your frontend application and fetch the responses from the new hosted API endpoints. Additionally, you can integrate your Go API with a couple of other databases (again all of them are present on Elestio to easily configure).

More tutorials around the same will be published to help your Go API integrate seamlessly with different databases and effortlessly host them onto Elestio

Thanks for reading ❤️

If you like the blog, then do try out creating your pipelines and if you want to support us then you can add the "Deploy on Elest.io" button to your open source project. Well, that's it for this blog, we will catch up with you in the next one 👋