52 Men-deploy graphql-go ke Render/Vercel/Heroku
Catatan: “52” adalah nomor urut dalam seri tutorial saya. Jika Anda ingin tahu lebih banyak tentang berbagai proyek Go, silakan telusuri arsip saya di Medium!
Sebagai backend engineer, saya sering mendapat pertanyaan: “Kalau pakai Go dan framework graphql-go
, gampang gak sih deploy ke cloud provider kayak Render, Vercel, atau Heroku?” Jawaban pendeknya: Gampang, asalkan paham mekanismenya! Di artikel ini, saya akan mengajak Anda men-deploy service GraphQL berbasis Go (graphql-go
) ke tiga platform populer: Render, Vercel, dan Heroku. Saya akan bagikan contoh kode, simulasi skenario, hingga diagram alur deploy.
Setup Service GraphQL dengan graphql-go
Sebelum melakukan deployment, kita mesti punya service GraphQL sederhana dulu. Mari mulai dari hal paling fundamental.
Struktur Proyek
graphql-demo/
├── main.go
├── go.mod
├── schema.graphql
File schema.graphql
type Query {
hello: String!
}
File main.go
package main
import (
"context"
"log"
"net/http"
"github.com/graphql-go/graphql"
"github.com/graphql-go/handler"
)
func main() {
fields := graphql.Fields{
"hello": &graphql.Field{
Type: graphql.String,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
return "Hello world!", nil
},
},
}
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
schema, err := graphql.NewSchema(schemaConfig)
if err != nil {
log.Fatalf("failed to create schema, error: %v", err)
}
h := handler.New(&handler.Config{
Schema: &schema,
Pretty: true,
GraphiQL: true,
})
port := getPort()
http.Handle("/graphql", h)
log.Printf("Server is running on port %s...", port)
log.Fatal(http.ListenAndServe(":"+port, nil))
}
// Mendapatkan port dari environment variable, default ke 8080.
func getPort() string {
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
return port
}
Catatan: Pastikan Anda sudah
go mod init graphql-demo
dan menginstall dua package utama:go get github.com/graphql-go/graphql
go get github.com/graphql-go/handler
1. Deploy ke Render
Render adalah platform cloud yang cukup “developer friendly”, sangat populer di komunitas Go. Render otomatis build dari source code di repository (GitHub/GitLab) dan menjalankan perintah Anda.
Cara Kerja Deploy ke Render
flowchart TD A[Push ke repo Github] --> B[Connect repo ke Render Web Service] B --> C[Render build Go] C --> D[Service jalan di subdomain Render]
Simulasi Deploy
- Push code ke repo GitHub.
- Daftar/login ke Render.
- Pilih
New Web Service
→ connect ke repo. - Isi form:
- Environment: Go
- Build Command: kosongkan (Render otomatis jalankan
go build
) - Start Command:
./graphql-demo
(nama ini sesuai binary hasil build)
- Default port Render: variabel PORT (sudah kita handle di
main.go
). - Klik deploy.
Tabel Konfigurasi Deploy
Field | Value |
---|---|
Runtime | Go |
Build Command | (kosongkan) |
Start Command | ./graphql-demo |
Port env | PORT (default:8080) |
Service type | Web Service |
Testing:
Akses URL https://your-service-name.onrender.com/graphql
, buka GraphiQL dan coba query:
query {
hello
}
2. Deploy ke Heroku
Heroku juga masih jadi favorit, apalagi buat prototyping. Kali ini, kita perlu buat Procfile
di root project:
File Procfile
web: ./graphql-demo
Langkah Deploy Heroku
- Install Heroku CLI (jika belum ada).
heroku create graphql-go-demo
- Set
GOFLAGS
agar hasil build statik:heroku config:set GOFLAGS="-tags heroku"
- Procfile menginstruksikan Heroku menjalankan binary hasil build.
- Jalankan:
git push heroku main
- Tunggu build selesai – Heroku akan otomatis build dan run app.
Pastikan port memakai env PORT
!
Query endpoint di:https://graphql-go-demo.herokuapp.com/graphql
Troubleshooting
Kadang Heroku menolak menjalankan binary Go jika tidak statik. Jika error, gunakan perintah build custom di Makefile
:
build:
CGO_ENABLED=0 GOOS=linux go build -o graphql-demo main.go
Perbarui Procfile
jika perlu.
3. Deploy ke Vercel
Vercel awalnya terkenal untuk frontend (Next.js), namun kini bisa serverless Go!
Bikin API Function di Vercel
Struktur folder harus sesuai Vercel:
/api/graphql/main.go
Isi api/graphql/main.go
menggunakan handler HTTP, tapi gunakan vercel/go-api runtime:
package main
import (
"context"
"github.com/awslabs/aws-lambda-go-api-proxy/httpadapter"
"github.com/graphql-go/graphql"
"github.com/graphql-go/handler"
"github.com/vercel-community/go-api/api"
)
func main() {
fields := graphql.Fields{
"hello": &graphql.Field{
Type: graphql.String,
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
return "Hello from Vercel!", nil
},
},
}
rootQuery := graphql.ObjectConfig{Name: "RootQuery", Fields: fields}
schemaConfig := graphql.SchemaConfig{Query: graphql.NewObject(rootQuery)}
schema, _ := graphql.NewSchema(schemaConfig)
h := handler.New(&handler.Config{
Schema: &schema,
Pretty: true,
GraphiQL: true,
})
httpHandler := httpadapter.NewV2(h)
api.HandleFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) {
httpHandler.ServeHTTP(w, r)
})
}
File vercel.json
{
"version": 2,
"builds": [
{ "src": "api/graphql/main.go", "use": "@vercel/go" }
]
}
Cara Deploy
npm i -g vercel
(install CLI).vercel login
vercel
(follow wizard).
API endpoint tersedia di:https://your-project-name.vercel.app/api/graphql
Perbandingan Platform
Fitur | Render | Heroku | Vercel (Serverless) |
---|---|---|---|
Free tier | Ada | Ada* | Ada |
Proses build | Otomatis | Otomatis | Otomatis |
Konfigurasi port | Gampang | Gampang | Otomatis |
Persistent | Ya | Ya | Stateless, cold start |
Skalabilitas | Mudah | Mudah | Terotomatisasi |
GraphiQL Support | Ya | Ya | Ya |
*Heroku limited free tier sejak akhir 2022.
Kapan Pilih yang Mana?
- Render: Proyek Go production-ready, ingin full control, deploy mudah.
- Heroku: Cepat prototyping, integrasi database yang mudah.
- Vercel: Kebutuhan serverless, API function tanpa state.
Kesimpulan
Deploy graphql-go
ke platform cloud ternyata sangat straightforward, asalkan kita memahami pola build & eksekusi service di masing-masing provider. Kuncinya: handle environment variable PORT
, sediakan file startup (Procfile/vercel.json), dan manfaatkan fitur continuous deploy.
Silakan bereksperimen dan sesuaikan workflow Anda – semoga tidak ragu lagi men-deploy backend Go ke cloud modern!
Referensi Utama:
Sampai jumpa di artikel selanjutnya dalam seri 53!
74. Integrasi gRPC dengan Envoy Proxy
Artikel Terhangat
56 Apa Itu Subscription di GraphQL?
08 Aug 2025
78. Men-deploy gRPC Service di Docker
08 Aug 2025
77. gRPC di Kubernetes dengan LoadBalancer
08 Aug 2025
54 Menambahkan Rate Limiting dan Throttling
08 Aug 2025
76. Menyambungkan gRPC Service dengan Kafka
08 Aug 2025

56 Apa Itu Subscription di GraphQL?

78. Men-deploy gRPC Service di Docker

77. gRPC di Kubernetes dengan LoadBalancer

54 Menambahkan Rate Limiting dan Throttling
