Skip to content
Santekno.com | Level Up Your Engineering Skills
ID
📖 0%
01 Nov 2025 · 5 mnt baca ·Artikel 124 / 125
Go

124 Deployment gqlgen di Railway/Render dengan PostgreSQL

IH
Ihsan Arif
Penulis di Santekno · Backend Engineer

Jika kamu pernah membangun backend GraphQL di Go menggunakan gqlgen , kemungkinan besar kamu ingin mendeploy aplikasimu dengan cepat dan mudah ke cloud. Railway dan Render adalah dua PaaS (Platform-as-a-Service) yang populer di kalangan developer karena setup yang simpel, support database yang mumpuni, serta integrasi continuous deployment dari GitHub. Pada artikel ini, saya akan membimbing kamu melewati proses deployment aplikasi gqlgen ke Railway dan Render, memanfaatkan PostgreSQL sebagai database utama. Kita akan cover: struktur folder, Dockerfile, pipeline CI/CD, hingga testing endpoint GraphQL secara online.


1. Gambaran Alur Deployment

Sebelum kita masuk ke teknis, mari kita lihat dulu workflow deployment ini menggunakan diagram alur mermaid:

MERMAID
flowchart TD
  A[Lokasi project gqlgen di lokal] --> B[Push ke GitHub]
  B --> C{Platform}
  C --> |Railway| D[Railway mendeteksi perubahan]
  C --> |Render| E[Render mendeteksi perubahan]
  D --> F[Railway build dan deploy container]
  E --> G[Render build dan deploy container]
  F --> H[Aplikasi live di Railway]
  G --> I[Aplikasi live di Render]

Pada dasarnya, project kita akan di-push ke GitHub, lalu Railway/Render akan membuild project tersebut menjadi container, konek ke PostgreSQL, dan expose endpoint GraphQL secara publik.


2. Struktur Project Sederhana gqlgen

Misal kita punya struktur project seperti berikut:

text
 1mygqlapp/
 2├── Dockerfile
 3├── go.mod
 4├── go.sum
 5├── gqlgen.yml
 6├── main.go
 7├── graph/
 8│   ├── resolver.go
 9│   ├── schema.graphqls
10│   └── model/
11└── pkg/

Untuk tutorial ini, contoh skema GraphQL sederhana:

graphql
 1# graph/schema.graphqls
 2type Todo {
 3  id: ID!
 4  text: String!
 5  done: Boolean!
 6}
 7
 8type Query {
 9  todos: [Todo!]!
10}

Dan resolver sederhana:

go
 1// graph/resolver.go
 2package graph
 3
 4import "mygqlapp/graph/model"
 5
 6type Resolver struct{}
 7
 8func (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {
 9  // Di production, fetch dari DB PostgreSQL
10  return []*model.Todo{
11    {ID: "1", Text: "Belajar gqlgen", Done: false},
12    {ID: "2", Text: "Deployment di Railway/Render", Done: true},
13  }, nil
14}

3. Setup PostgreSQL di Railway/Render

Railway

  • Masuk ke Railway → New Project → Add Plugin → PostgreSQL

  • Railway akan otomatis generate connection string seperti:

    text
    1postgres://user:pass@host:port/dbname
  • Catat string ini untuk digunakan sebagai DATABASE_URL.

Render

  • Masuk ke Render Dashboard → Databases → Create a new PostgreSQL DB.
  • Setelah database ready, klik pada DB, lihat di bagian Connection. Ambil Internal Database URL/External Database URL untuk digunakan pada env var DATABASE_URL.

4. Konfigurasi Environment Variable

Railway dan Render menyediakan panel Environment Variable. Untuk Go, cukup gunakan nama variabel DATABASE_URL.

Di Go, gunakan package os:

go
 1import (
 2  "os"
 3  "database/sql"
 4  _ "github.com/lib/pq"
 5)
 6
 7func dbConnect() (*sql.DB, error) {
 8  db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
 9  if err != nil {
10    return nil, err
11  }
12  return db, nil
13}

Tips:

  • Railway secara otomatis inject env dari plugin PostgreSQL ke service.
  • Render: Tambah key DATABASE_URL, value dari dashboard DB.

5. Membuat Dockerfile

Kedua platform mendukung deployment container. Berikut contoh Dockerfile yang cocok untuk project gqlgen:

dockerfile
 1# Dockerfile
 2FROM golang:1.21-alpine as builder
 3
 4WORKDIR /app
 5
 6COPY go.mod go.sum ./
 7RUN go mod download
 8
 9COPY . .
10
11RUN go build -o server main.go
12
13FROM alpine:latest
14
15WORKDIR /app
16
17COPY --from=builder /app/server .
18
19EXPOSE 8080
20
21CMD ["./server"]

Catatan: Kebanyakan tutorial memakai port 8080 untuk Go web. Railway/Render akan mengekspose port ini.


6. Deploy ke Railway

Langkah-langkah:

  1. Push ke GitHub: Pastikan project sudah di-push.
  2. Connect ke Railway
    • New Project → Deploy from GitHub Repo → Pilih repo-mu.
    • Railway akan mendeteksi Dockerfile, build, dan otomatis running.
    • Tambahkan environment variable dari langkah 4.
  3. Cek logs & health: Railway memberi live logs dan health check.

7. Deploy ke Render

Langkah-langkah:

  1. Push ke GitHub.
  2. Buat Web Service
    • Render → New → Web Service → From GitHub.
    • Isi fields:
      • Environment: Docker
      • Build Command: kosongkan jika Dockerfile
      • Start Command: otomatis dari Dockerfile
      • Port: 8080
    • Tambahkan environment variable.
  3. Konfirmasi build selesai → Webhook akan running dan endpoint kamu live.

8. Simulasi Deployment: Testing Endpoint

Setelah deploy sukses, kamu dapat test GraphQL Query dengan alat seperti [Postman], [Insomnia], atau curl:

bash
1curl -X POST \
2  -H "Content-Type: application/json" \
3  -d '{"query":"{ todos { id text done } }"}' \
4  https://mygqlapp-railway.up.railway.app/query

Contoh respons:

json
1{
2  "data": {
3    "todos": [
4      { "id": "1", "text": "Belajar gqlgen", "done": false },
5      { "id": "2", "text": "Deployment di Railway/Render", "done": true }
6    ]
7  }
8}


9. Troubleshooting Umum

IssueRailway/RenderSolusi
App tidak bisa diaksesPort/ENV/Health check salahPastikan expo port 8080, HEALTHY
Gagal koneksi ke DBDATABASE_URL tak ter-set/tak benarCek env var, gunakan dari panel
“pq: SSL off” errorRender butuh sslmode=require di koneksiTambahkan ?sslmode=require
Build failDockerfile path/command keliruPeriksa working directory, path

10. Kelebihan Railway & Render untuk gqlgen+PostgreSQL

FiturRailwayRender
AutoscaleYa, by defaultOpsi paid
Database1-klik pluginWeb dashboard, granular config
Custom domainFreeFree
PriceFree plan → murahFree plan → murah
Deploy CI/CDGithub langsungGithub langsung

11. Kesimpulan

Deployment aplikasi gqlgen di Railway atau Render benar-benar straightforward untuk engineer Go modern. Kita hanya perlu:

  • Menyiapkan project dan Dockerfile.
  • Setup database PostgreSQL via plugin/console.
  • Khususkan env var DATABASE_URL.
  • Push ke GitHub → platform akan build, deploy, dan expose endpoint GraphQL.
  • Endpoint langsung online tanpa perlu ngatur VPS/manual CI.

Platform PaaS seperti Railway dan Render menghilangkan devops overhead, sehingga kamu dan tim bisa fokus membangun bisnis logic, bukan ngurus servernya!


12. Referensi

Semoga bermanfaat! Jangan ragu share pengalaman deployment-mu di kolom komentar 👨‍💻🚀

Artikel Terkait

💬 Komentar