124

本番環境で Go バックエンドを実行している場合:

Go Web アプリケーションを実行するためのスタック / 構成は何ですか?

標準ライブラリ net/http パッケージを使用してサーバーを実行し続ける人々以外に、このトピックについてはあまり見たことがありません。Nginxを使用してリクエストをGoサーバーに渡すことを読みました-nginx with Go

これは私には少し壊れやすいようです。たとえば、マシンが再起動された場合 (追加の構成スクリプトなしで)、サーバーは自動的に再起動しません。

より堅実な生産体制はありますか?

私の意図については余談ですが、私は次のプロジェクトのために Go を利用した REST バックエンド サーバーを計画しており、プロジェクトに投資しすぎる前に、Go がプロジェクトをライブで立ち上げるために実行可能であることを確認したいと考えています。

4

4 に答える 4

59

nginx:

  • Go アプリケーションへのリバース HTTP プロキシ
  • 静的ファイルの処理
  • SSL ターミネーション
  • HTTP ヘッダー (Cache-Control など)
  • アクセス ログ (したがって、システム ログのローテーションを利用)
  • 書き換え (www から www へ、http:// から https:// へ、など)

nginx はこれを非常に簡単にします。 のおかげで Go から直接サービスを提供できますがnet/http、多くの「車輪の再発明」があり、グローバル HTTP ヘッダーのようなものには、おそらく回避できるボイラープレートが含まれます。

Go バイナリを管理するためのSupervisord 。Ubuntu の Upstart (Mostafa が言及) も優れていますが、比較的ディストリビューションにとらわれず、十分に文書化されているため、supervisord が好きです。

監督者、私にとって:

  • 必要に応じて Go バイナリを実行します
  • クラッシュ後に起動します
  • 環境変数 (セッション認証キーなど) を単一の構成の一部として保持します。
  • DB を実行します (DB がないと Go バイナリが実行されないことを確認するため)
于 2013-07-04T03:38:55.320 に答える
6

次を使用して、バイナリをインターネット ドメイン特権ポート (1024 未満のポート番号) へのソケットにバインドできます。setcap

setcap 'cap_net_bind_service=+ep' /path/to/binary

  1. このコマンドはエスカレートする必要があります。sudo必要に応じて
  2. プログラムの新しいバージョンごとに新しいバイナリが生成され、再認証が必要になります。setcap

setcapドキュメンテーション

cap_net_bind_serviceドキュメンテーション

于 2016-10-13T18:17:03.207 に答える