【初心者向け】Go言語+Nginx+SSLでGo言語WEBアプリをドメインで公開する手順

Go言語
この記事は約4分で読めます。

Go言語でいろいろ開発をしています。

Go言語で開発したものをブラウザで実行する際、よくこうしますよね。

http://127.0.0.1:9999

とか

http://localhost:9999

でもこれって、自分で扱ったりテストする分にはいいですが、いざWEBアプリとして公開しようとすると、このURLでは、はて???となってしまいます。

そこで、ドメインでアクセスでき、ポート番号の指定も不要にしてWEBアプリを公開する方法をまとめておきたいと思います。

Go言語によるWEBアプリ

まずは公開するWEBアプリを作成しましょう。

ここでは当ブログで公開中のWEBアプリを使って解説していきます。

参考にするWEBアプリ(PDFファイル→PNG画像変換)はこちら

肝のソース部分の抜粋です。

package main

import (
    "net"
    "net/http"
    "net/http/fcgi"
)

func main() {
    l, err := net.Listen("tcp", "127.0.0.1:9999")
    if err != nil {
        return
    }

    http.Handle("/", http.FileServer(http.Dir("./")))
    fcgi.Serve(l, nil)
}

このソースだけでは、もちろん何も動きませんが、今回は、Go言語のWEBアプリ開発はできるという人に向けた、最終のWEBアプリ公開手順の開発となりますのでご了承ください。

このソースを基本に実行したときの挙動は以下のとおりです。

  • http:// 127.0.0.1:9999 にアクセス
  • 別に用意されているindex.htmlが表示される

となります。

Nginxのconfファイルの編集

筆者は新しいプロジェクトを立ち上げるとき、KUSANAGIでWEBアプリの実行環境を整えています。

KUSANAGIの良いところは、簡単にSSL環境を伴ったスペースが構築される点です。

参考アプリもKUSANAGIで公開環境を整えましたので、自然とhttpsでの公開が可能となっています。

それでは、KUSANAGIによって自動生成されたNginxのconfを編集していきます。

pdftopng_lancers_work_ssl.conf

server {
    listen       443 ssl http2;
    server_name  pdftopng.lancers.work;

    location / {
        fastcgi_pass  127.0.0.1:9999;
        include       fastcgi_params;
    }

server_nameに公開したいドメイン名を記述します。

locationで公開するポートを指定します。
Go言語のソースで指定したポートと同じ9999番ポートをここでは指定しています。

これにより、pdftopng.lancers.workにアクセスがあると、127.0.0.1:9999へ転送され、Go言語WEBアプリが見られるようになります。

fast_cgiでパスを指定していますが、Go言語のソースを見ると、

fcgi.Serve(l, nil)

というコードがあります。

Go言語側でもFastCGI接続を行っていますので、これで正しくリクエストが処理されます。

今回の問題の解決のカギはfcgiパッケージを使うことにありました。

まとめ

ドメインによるGo言語WEBアプリの公開手法、いかがだったでしょうか?

筆者も最初はどうやったらポート番号無しでGo言語アプリが公開されるのか相当悩みました。

答えは簡単で、既述の通りfcgiパッケージを使い、Nginxのconf設定で、指定のポートへリクエストを流してあげるだけでした。

筆者も詳細には理解しきれていないかもしれませんが、これで稼働していますので、初心者の皆さんの参考になればと思います。

タイトルとURLをコピーしました