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.goSekarang 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.serviceIsi 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.targetPoin 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-reloadStart service:
sudo systemctl start myappBiar otomatis jalan tiap boot:
sudo systemctl enable myapp6. Cek Status
Lihat apakah servicenya jalan:
sudo systemctl status myappKalau sukses, harusnya keliatan active (running).
7. Tes dengan Curl
Sekarang coba akses:
curl localhost:8080Output:
{"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.