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.