ブログに戻る

Ubuntu 22.04でNginxを使用してGoウェブアプリケーションをデプロイする

Ubuntu 22.04でNginxを使用してGoウェブアプリケーションをデプロイする

Goは、オープンソースの汎用プログラミング言語です。C言語の能力を提供しつつ、Pythonの生産性に触発されて開発されました。元々は、Googleが自社のコードベースで直面していた課題(コードの複雑さと長いコンパイル時間)に対処するために開発されました。他の現代のプログラミング言語と同様に、Goはあらゆる目的に適しています。例えば、Web開発、コマンドラインスクリプト、ネットワークサーバーアプリ、フロントエンド開発などに利用できます。

このガイドでは、Ubuntu 22.04 LTS上にシンプルなGoウェブアプリケーションをデプロイする手順を順を追って説明します。 また、トラフィック負荷を処理するためにNginxリバースプロキシも実装します。

前提条件

このガイドで示されている手順を実行するには、以下のコンポーネントが事前に設定されている必要があります。

サービスにドメイン名でアクセスできるようにする場合は、サーバーを指すFQDNが必要です。その場合、NginxをSSLで保護することをお勧めします。詳細については、UbuntuでLet’s Encryptを使用してNginxを保護する方法についてのチュートリアル.

ステップ 1 – Goウェブアプリの作成

ドメインにアクセスしたときに画面に“Hello World”と表示する、シンプルなGoウェブアプリを構築します。さらに、このアプリは以下にアクセスしたときにユーザーを歓迎します。 <domain>/greet/<username>.

まずは、次の配下に新しいプロジェクトを作成します。 $GOPATH。プロジェクトディレクトリを作成します:

Go Web Application Make Dir

カレントディレクトリを変更します:

Go Web Application Change Dir

次に、プロジェクトを初期化します:

Go Web Application Init Project

次に、以下を作成します。 main.go これはGoアプリケーションのルートとして機能します。ウェブアプリのソースコードを格納します:

VS Codeでプロジェクトを開きます:

次のコードをファイルに貼り付けます main.go:

Go Web Application Main Go

作成したばかりのGoプログラムを簡単に解説します:

  • 用語 package main はアプリケーションのエントリーポイントとして機能します。また、Goコンパイラに対して、ファイルを共有ライブラリではなく実行可能ファイルとしてコンパイルするように指示します。
  • The import ステートメントは、プログラムが動作するために必要なすべての追加モジュールをインポートします。ここでは、 fmt(テキスト出力用)および net/http (Webサーバーアプリケーション用)パッケージをインポートしています。
  • 関数 http.HandleFuncを使用して、2つのルートを設定しました:
    • 最初のルート /は、次の関数内の親ルートとして機能します: func main.
    • 2番目のルート /greet/ は、URLパラメータ(この場合は文字列)を受け取ります。その後、その文字列が挨拶メッセージとともに表示されます。
      • URL Path は、 の後の値を格納するために使用されます。/greet/。その後、その値は、URLパラメータの name として渡されます。
    • The http.ListenAndServe 関数はウェブサーバーを起動します。ここでは、ポート をリスニングしています。9990.

プログラムの準備ができたので、ファイルを実行可能ファイルにコンパイルします。

Goコンパイラは、ファイルと同じ名前の実行可能ファイルを作成します。 出力結果を確認してみましょう。

Go Web Application ls -lh

ステップ 2 – バックグラウンド実行用の systemd ユニットファイルの設定

これまでは、現在のユーザーがシステムからログアウトすると、Goウェブアプリの実行が停止してしまいました。それはウェブサーバーの設計としては好ましくありません。この問題を解決するために、ユーザーがサーバーからログアウトしてもバックグラウンドで実行を継続できるように、systemdユニットファイルを作成します。これにより、設定が本番環境レベルのデプロイに一歩近づきます。

専用の systemd ファイル goweb.service を以下の配下に作成します: /lib/systemd/system:

ユニットファイルに次のスニペットを追加します:

go web service

ここでは、

  • 変数 ExecStart は、プロジェクトディレクトリ( $GOPATH/go-web) 内にあるメインの実行可能ファイルを介したサービスのエントリポイントを示します。なお、 を指定する代わりに、$GOPATH、実行可能ファイルへのフルパスを入力しました。これは、 $GOPATH 変数がユーザーにのみ表示されるためです。
  • 変数 Restart は、 systemd に対し、プログラムの実行が停止した場合に何を行うかを指示します。値 always は、 systemd に対し、プログラムが停止するたびに毎回再起動するように指示します。
  • 変数 RestartSec は、 systemd に対し、プログラムの再起動を試みる前に特定の時間待機するように指示します。ここでは、値は 5s (5秒)に設定されています。
  • ステートメント WantedBy=multi-user.target は、どのような状態で systemd がサービスを有効にするかを指定します。

ファイルを保存してエディタを閉じます。サービスを起動します:

go web start

サービスが起動して実行中であることを確認します:

go web status

出力が示すように、アプリケーションは起動して実行されています。これで、Nginxをリバースプロキシとして使用する準備が整いました。

ステップ 3 – Nginxをリバースプロキシとして設定する

次に、Nginxがリバースプロキシとして機能するためのサーバーブロックを作成します。ウェブアプリは、リバースプロキシを介してインターネットに公開されます(パフォーマンスとセキュリティを向上させるため)。

現在のアクティブディレクトリを以下に変更します sites-available:

cd

次に、アプリケーションを公開するドメイン名のファイルを作成します。デモンストレーションでは、以下を使用します。 example.com:

 

ブロックファイルに次のコードを入力します:

example.com

ここでは、 proxy_pass を使用して、サーバーのIPアドレス(localhost)のポート でGoウェブアプリを提供します。9990.

Nginxブロックを有効にするには、ファイルのシンボリックリンク(ソフトリンクとも呼ばれます)をsites-enabledフォルダに作成します:

create sym

変更を反映するためにNginxの設定を再読み込みします:

reload nginx

ステップ 4 – 検証

すべてが期待通りに機能していれば、ウェブアプリケーションは現在、 localhost:9990 および設定したドメインでアクセス可能になっているはずです。ウェブブラウザで次のURLを開きます:

Hello World

期待通り、アプリケーションは画面に“Hello World”を表示しています。これはプライマリルートの役割です。次に、以下のURLにアクセスして2番目のルートをテストします:

Hello Cloud

アプリケーションは、URLから受け取ったパラメータの名前を含むシンプルな挨拶メッセージを正常に返しています。

ご覧の通り、ローカルサーバーへのGoウェブアプリケーションのデプロイに成功しました!

最後に

このガイドでは、Go標準ライブラリを使用してシンプルなGoウェブアプリケーションをデプロイする方法を実演しました。また、Nginxを使用したリバースプロキシもデプロイしました。デモンストレーションはローカルサーバーで行われましたが、公開サーバーにおいては、SSL証明書を実装してインターネットに安全に公開することが強く推奨されます。Goプログラミングの詳細については、次のチュートリアルをご覧ください:Goプログラムのビルドとインストール.

ハッピーコンピューティング!

author

Pranay Kapgate

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。