BIAYABLOG

Hosting Golang: Cara Deploy Aplikasi Go ke Container atau VPS

Tim Helipod
Diterbitkan 6 menit baca

Mencari hosting golang sering berakhir membingungkan. Banyak paket hosting murah menulis "support semua bahasa", tapi ternyata yang dimaksud hanya PHP. Aplikasi Go kamu tidak bisa jalan di sana.

Go punya karakter yang berbeda dari PHP: hasil build-nya adalah satu file binary yang harus terus berjalan dan mendengarkan port. Jadi kamu butuh hosting yang bisa menjalankan proses jangka panjang, bukan sekadar menyajikan file lewat Apache.

Di artikel ini kamu akan belajar pilihan hosting untuk Go, contoh server HTTP minimal, Dockerfile multi-stage yang hasilnya kecil, dan dua cara deploy: lewat container di Helipod atau lewat VPS dengan systemd.

Baca juga: Docker Hosting Indonesia


Kenapa Shared Hosting Tidak Bisa Menjalankan Go?#

Shared hosting dirancang untuk PHP. Alurnya: request masuk ke Apache atau LiteSpeed, server menjalankan file .php, lalu prosesnya selesai. Tidak ada proses yang terus hidup milik kamu.

Aplikasi Go bekerja sebaliknya. Kamu menjalankan binary sekali, lalu binary itu membuka port dan melayani request terus-menerus. Untuk itu kamu butuh:

  • Izin menjalankan proses yang berjalan terus (long-running process)
  • Port yang bisa diarahkan dari domain kamu
  • Cara untuk restart otomatis kalau proses mati

Beberapa shared hosting menawarkan fitur "aplikasi" terbatas, tapi biasanya tidak fleksibel untuk Go. Pilihan yang lebih realistis ada dua: container hosting (PaaS) atau VPS.


Pilihan Hosting Golang: Container vs VPS#

Aspek Container (PaaS) VPS
Cara deploy Push ke Git, build otomatis Upload binary, atur sendiri
SSL dan domain Otomatis Pasang sendiri (Nginx, Caddy, Certbot)
Restart kalau crash Diurus platform Kamu atur lewat systemd
Update keamanan OS Tidak perlu Tanggung jawab kamu
Kontrol Sebatas container Akses root penuh
Cocok untuk API, web service, microservice Banyak service sekaligus, kebutuhan khusus

Untuk sebagian besar API dan web service Go, container sudah cukup dan lebih sedikit pekerjaan. VPS masuk akal kalau kamu ingin menjalankan banyak service plus database sendiri di satu server.


Contoh Server HTTP Go yang Siap Deploy#

Hal terpenting: baca port dari environment variable. Platform hosting biasanya menentukan port lewat variabel PORT, jadi jangan hardcode.

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	mux := http.NewServeMux()
	mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Halo dari Go!")
	})
	mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(http.StatusOK)
		w.Write([]byte("ok"))
	})

	log.Printf("listening on :%s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

Perhatikan juga ":"+port, bukan "localhost:"+port. Kalau kamu mendengarkan di localhost, request dari luar container tidak akan sampai ke aplikasimu.


Dockerfile Multi-Stage untuk Go#

Go cocok sekali dengan multi-stage build. Tahap pertama memakai image golang untuk compile, tahap kedua hanya membawa binary-nya. Hasilnya image yang jauh lebih kecil.

# Tahap 1: build
FROM golang:1.23-alpine AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o /app ./

# Tahap 2: runtime
FROM gcr.io/distroless/static-debian12
COPY --from=builder /app /app
ENV PORT=8080
EXPOSE 8080
USER nonroot:nonroot
ENTRYPOINT ["/app"]

Beberapa catatan:

  • CGO_ENABLED=0 menghasilkan binary statis, sehingga bisa jalan di image distroless tanpa library C.
  • Kalau aplikasimu butuh shell untuk debugging, ganti tahap kedua dengan alpine:3.20 dan tambahkan RUN apk add --no-cache ca-certificates.
  • Kalau belum punya go.sum (tidak ada dependency), hapus go.sum dari baris COPY.

Hasilnya biasanya hanya beberapa MB sampai belasan MB, tergantung ukuran binary kamu.


Deploy Aplikasi Go ke Helipod#

Helipod mendukung deploy dari repository GitHub atau GitLab, maupun dari Docker image. Kalau repo kamu sudah punya Dockerfile, Helipod memakainya. Kalau belum, Helipack mendeteksi framework dan membuat Dockerfile otomatis.

Langkah umumnya:

  1. Push kode Go (dan Dockerfile kalau ada) ke GitHub atau GitLab.
  2. Di dashboard Helipod, buat aplikasi baru lalu hubungkan repository.
  3. Pastikan port aplikasi sesuai. Helipod mendeteksi port dari kode atau Dockerfile, atau kamu bisa mengaturnya.
  4. Tambahkan environment variables seperti DATABASE_URL atau API key di pengaturan aplikasi. Jangan simpan rahasia di dalam repo. Panduannya ada di environment variables di Helipod.
  5. Deploy, lalu pantau build dan log real-time.
  6. Hubungkan custom domain. SSL dipasang otomatis.

Kalau deploy gagal, Heli Crew (asisten AI DevOps bawaan, tanpa biaya tambahan) bisa membaca log dan menjelaskan penyebabnya.

Berapa biayanya?#

Binary Go terkenal hemat memori, jadi resource kecil sering sudah cukup untuk API sederhana. Di Helipod, tagihan container dihitung harian: Rp 150 per 0,125 vCPU, Rp 200 per 128 MB RAM, dan Rp 75 per GB storage per hari. Contoh 0,25 vCPU, 256 MB RAM, dan 1 GB storage = Rp 775 per hari, sekitar Rp 23.250 per bulan. Harga bisa berubah, cek halaman harga untuk angka terbaru di /pricing.


Alternatif: Hosting Golang di VPS dengan systemd#

Kalau kamu memilih VPS, alurnya: build binary, upload ke server, lalu jalankan sebagai service systemd supaya otomatis restart dan hidup lagi setelah reboot.

Build di laptop (untuk server Linux 64-bit):

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o myapp .
scp myapp root@IP_VPS:/opt/myapp/myapp

Buat file /etc/systemd/system/myapp.service:

[Unit]
Description=My Go App
After=network.target

[Service]
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Environment=PORT=8080
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Aktifkan:

systemctl daemon-reload
systemctl enable --now myapp
journalctl -u myapp -f

Setelah itu pasang Nginx atau Caddy di depannya untuk domain dan SSL. Panduan masuk ke server ada di cara akses VPS Linux. VPS Helipod mulai Rp 27.900 per bulan untuk VPS S - EU di Jerman, atau Rp 64.900 per bulan untuk VPS S di Jakarta. Lihat halaman VPS murah.


FAQ#

Apakah hosting golang harus pakai Docker?#

Tidak wajib. Di VPS kamu bisa menjalankan binary langsung dengan systemd. Di platform container, Docker image adalah cara standarnya, tapi Helipod bisa membuat Dockerfile otomatis kalau kamu belum punya.

Kenapa aplikasi Go tidak bisa diakses setelah deploy?#

Penyebab paling umum: aplikasi mendengarkan localhost atau port yang di-hardcode. Pakai ":"+os.Getenv("PORT") dan pastikan port yang dikonfigurasi sama.

Berapa RAM yang dibutuhkan aplikasi Go?#

Tergantung aplikasinya. API Go sederhana sering hanya memakai puluhan MB. Mulai dari resource kecil, pantau metrik CPU dan RAM, lalu naikkan kalau perlu.

Bisa pakai framework seperti Gin, Echo, atau Fiber?#

Bisa. Selama aplikasinya membaca port dari environment variable dan dibuild menjadi binary, framework apa pun bisa dijalankan dengan cara yang sama.

Bagaimana dengan database untuk aplikasi Go?#

Kamu bisa memakai managed Postgres dari Helipod (ada plan gratis dengan storage 1 GB) atau database di VPS sendiri.


Kesimpulan#

Hosting golang butuh tempat yang bisa menjalankan proses terus-menerus, jadi pilih container atau VPS, bukan shared hosting PHP. Untuk API dan web service, container dengan Dockerfile multi-stage adalah jalur paling praktis. Untuk kontrol penuh, VPS dengan systemd juga solid.

Siap mencoba? Cek harga Helipod dan deploy aplikasi Go kamu dari GitHub atau GitLab.

Artikel terkait

Lihat semua

Siap coba Helipod?

Deploy aplikasi kamu sekarang. Gratis, tanpa kartu kredit.

Mulai Gratis →
WhatsApp