Golang adalah salah satu bahasa pemrograman dengan pertumbuhan tercepat pada tahun 2022. Popularitas bahasa pemrograman ini sangat eksponensial. Ini dibangun berdasarkan C++ sehingga akan membuat tugas komputasi menjadi lebih cepat. Hari ini kita akan membuat aplikasi go kecil dan menyebarkannya di server ubuntu.

package main
import (
 "fmt"
 "net/http"
)
func main() {
 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello World")
 })
http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) {
  name := r.URL.Path[len("/greet/"):]
  fmt.Fprintf(w, "Hello %s\n", name)
 })
http.ListenAndServe(":5000", nil)
}

Pertama kita tuliskan file main.go sederhana untuk melayani permintaan http. Anda dapat mencoba menjalankannya di mesin lokal Anda menggunakan perintah go run main.go. Anda harus sudah menginstal go untuk sistem operasi Anda seperti windows, mac atau linux. Jika berhasil, buat file main.go Anda menjadi dapat dieksekusi menggunakan perintah

go build main.go

Program go kita sudah selesai dan sekarang yang harus kita lakukan adalah menjalankan aplikasi go pada tugas background, sehingga secara otomatis akan melayani permintaan http. Kami harus membuat file layanan di direktori /lib/systemd/system di ubuntu Anda.

sudo nano /lib/systemd/system/golanghttp.service

Anda dapat menggunakan nano atau vim sebagai editor teks. golanghttp adalah nama file yang dapat Anda beri nama apa pun yang Anda inginkan. Anda juga bisa menamainya mygolangapp misalnya.

sudo nano /lib/systemd/system/mygolangapp.service

Tambahkan cuplikan berikut ke dalam file.

[Unit]
Description=golanghttp

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/home/user/mygolangfolderdirectory/main
WorkingDirectory=/home/user/mygolangfolderdirectory
[Install]
WantedBy=multi-user.target

Apakah Anda ingat executable yang baru saja Anda buat? Sekarang Anda dapat menentukan lokasinya di ExecStart. Anda juga harus menentukan WorkingDirectory jika aplikasi go Anda berisi banyak folder dan subfolder. Jika tidak, skrip akan mencoba menemukan subfolder Anda dari lokasinya saat ini: /lib/systemd/system, yang tidak ada.

Oke semuanya tampak bagus, sekarang Anda dapat menjalankan layanan menggunakan perintah

sudo service golanghttp start

Untuk mengonfirmasi apakah layanan sedang berjalan, gunakan perintah berikut

sudo service golanghttp status

Anda akan menerima output berikut

golanghttp.service - golanghttp
   Loaded: loaded (/lib/systemd/system/golanghttp.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-07-17 23:28:57 UTC; 6s ago
 Main PID: 1891 (main)
    Tasks: 4 (limit: 1152)
   CGroup: /system.slice/golanghttp.service
           └─1891 /home/user/mygolangfolderdirectory/main

Hore, aplikasi go Anda sudah aktif dan berjalan. Sekarang mari buka beberapa port firewall untuk mengakses aplikasi Anda jika Anda berada di lingkungan pengembangan.

sudo ufw allow 5000/tcp

Sekarang Anda dapat mengakses aplikasi go Anda pada port {your.app.IP.Address.}:5000. Jika Anda ingin menggunakan beberapa nama domain tertentu. Anda dapat menggunakan nginx sebagai proxy terbalik. Pertama, ubah direktori kerja Anda ke direktori yang tersedia di situs Nginx:

cd /etc/nginx/sites-available

Buat beberapa file untuk menuliskan aturan nginx untuk port Anda

sudo nano nginxfilename

Anda dapat mengubah "nginxfilename" menjadi apa pun yang Anda inginkan. Ke dalam file itu, tulis skrip berikut.

server {
    server_name your_domain www.your_domain;

    location / {
        proxy_pass http://localhost:5000;
    }
}

Nama server adalah nama domain Anda. Lokasi adalah port tempat aplikasi go berjalan.

Tambahkan tautan simbolis untuk mengaktifkan skrip nginx baru Anda.

sudo ln -s /etc/nginx/sites-available/nginxfilename/etc/nginx/sites-enabled/nginxfilename

Mulai ulang server nginx.

sudo service nginx restart

Akhirnya selesai! Anda dapat mengakses aplikasi go Anda di domain_anda.com!