Ubuntu 18.04 LTS + Go + Nginx 環境を構築する

  • 投稿者:
  • 投稿カテゴリー:未分類

Goをインストールする

# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
# whoami
root
# cd /usr/local/src/
# wget https://go.dev/dl/go1.18.4.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz
# echo 'export GOROOT=/usr/local/go'   >> ~/.profile
# echo 'export PATH=$PATH:$GOROOT/bin' >> ~/.profile
# source ~/.profile
# go version
go version go1.18.4 linux/amd64

systemdへ登録して9990ポートで閲覧できるようにする

# cd /var/www/akat.info/mgt/htdocs
# vi main.go
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(":9990", nil)
}

# go build main.go
# vi /lib/systemd/system/goweb.service
[Unit]
Description=goweb

[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/var/www/akat.info/mgt/htdocs/main

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl start goweb
# systemctl status goweb
● goweb.service - goweb
   Loaded: loaded (/lib/systemd/system/goweb.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2022-07-31 22:52:48 JST; 5s ago
 Main PID: 9045 (main)
    Tasks: 4 (limit: 1152)
   CGroup: /system.slice/goweb.service
           └─9045 /var/www/akat.info/mgt/htdocs/main

 7月 31 22:52:48 tech systemd[1]: Started goweb.

# curl http://localhost:9990
Hello World

Nginxと連携させる

Nginxの設定に以下を追加して、Nginxを再起動する。

...
        location / {
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:9990;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_next_upstream error timeout http_502 http_503 http_504;
        }
...

閲覧できることが確認できた!

参考

https://quicknotepadtutorial.blogspot.com/2019/09/how-to-setup-go-web-application-using.html