Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

Deploy Server Web Go ke systemd di Linux

1 min read .
Deploy Server Web Go ke systemd di Linux

Biasanya kalau bikin server web kecil di Go, saya jalanin manual di terminal: go run main.go. Tapi masalahnya, kalau terminal ditutup atau server reboot, aplikasinya mati juga.

Solusinya? saya bisa jalanin server Go itu sebagai service systemd. Dengan begitu, dia otomatis start waktu boot, bisa dimonitor, dan restart sendiri kalau crash.

Mari kita coba bikin dari nol.

1. Bikin Server Web Go Sederhana

kita mulai dengan kode Go paling basic buat server HTTP:

package main

import (
	"encoding/json"
	"net/http"
)

type Response struct {
	Message string `json:"message"`
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(Response{Message: "Success"})
}

func main() {
	http.HandleFunc("/", handleRequest)
	http.ListenAndServe(":8080", nil)
}

Server ini jalan di port 8080 dan kalau diakses akan balas JSON:

{"message":"Success"}

2. Build Jadi Biner

Kompilasi aplikasimu:

go build -o myapp main.go

Sekarang kita punya file biner myapp.

3. Taruh di /usr/local/bin

Biar gampang dipanggil dari mana aja:

sudo mv myapp /usr/local/bin/

4. Bikin File Service systemd

Sekarang bikin file service baru:

sudo nano /etc/systemd/system/myapp.service

Isi dengan:

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

[Service]
WorkingDirectory=/usr/local/bin
ExecStart=/usr/local/bin/myapp
Restart=on-failure
User=nobody
Group=nogroup
Environment=PORT=8080

[Install]
WantedBy=multi-user.target

Poin penting di sini:

  • Restart=on-failure → otomatis nyala lagi kalau crash.
  • User=nobody → jalan sebagai user non-privileged (lebih aman).

5. Jalankan dan Enable

Reload systemd biar service dikenali:

sudo systemctl daemon-reload

Start service:

sudo systemctl start myapp

Biar otomatis jalan tiap boot:

sudo systemctl enable myapp

6. Cek Status

Lihat apakah servicenya jalan:

sudo systemctl status myapp

Kalau sukses, harusnya keliatan active (running).

7. Tes dengan Curl

Sekarang coba akses:

curl localhost:8080

Output:

{"message":"Success"}

Kesimpulan

Dengan setup ini, server Go kamu udah jadi layanan systemd penuh: auto-start pas boot, auto-restart kalau error, dan bisa dipantau lewat systemctl.

Ini pondasi bagus buat deploy aplikasi Go yang lebih serius di server Linux.

Lihat Juga

chevron-up