sails.config.*
)Sailsにおける設定の概念的な概要については、https://sails.dokyumento.jp/documentation/concepts/Configurationを参照してください。
このページは、他の場所に分類されない様々な設定項目、つまりsails.configオブジェクトのトップレベルのプロパティに関するクイックリファレンスです。これらのプロパティの多くは、環境ごとに、またはconfig/local.jsで設定するのが最適です。アプリケーション全体にグローバルに設定するには、config
フォルダに新しいファイル(例:config/misc.js
)を作成してそこに追加します。
sails.config.port
port
設定は、Sailsアプリケーションが着信要求をリッスンするTCPポートを決定します。ポートは、単一のコンピューター上で多くの異なるネットワークアプリケーションを同時に実行できるように設計されたトランスポート層の概念です。
デフォルトでは、設定されている場合、Sailsはアプリケーションで設定されたポート(sails.config.port
)を使用します。設定されていない場合、PORT
環境変数が設定されているかどうかを確認し、可能な場合はそれを使用します。それ以外の場合は、ポート1337に戻ります。
本番環境では、Sailsがポート80(またはSSL証明書があり、
https://
を介してサイトを提供している場合は443)でリッスンすることをお勧めしますが、アプリケーションの配置場所によっては、この設定を実際に変更する必要がない場合があります。たとえば、プロキシの背後に配置する場合、またはHeroku、Azure App Service、DeisなどのPaaSに配置する場合は、ほとんどの場合自動的に処理されるため、sails.config.port
を設定する必要はないでしょう。Heroku、Azure App Service、Deis。本番環境でのSailsの配置、スケーリング、保守に関する詳細なガイダンスとヒントについては、概念 > 配置を参照してください。
sails.config.explicitHost
デフォルトでは、Sailsは着信要求をリッスンするホストとしてlocalhost
を想定します。これは、遭遇するほとんどのホスティング環境で機能しますが、場合によっては(OpenShiftはその一例です)、Sailsアプリケーションのホスト名を明示的に宣言する必要があります。explicitHost
を設定すると、Sailsはlocalhost
ではなくそのホストで要求をリッスンするようになります。
sails.config.environment
Sailsアプリケーションの実行時「環境」は、通常development
またはproduction
のいずれかです。
開発環境では、Sailsアプリケーションはユーザーを支援するためにあらゆる努力をします(たとえば、より詳細なエラーとデバッグ出力を受け取ります)。
本番環境では、Sailsはパフォーマンスを最適化するために自身とその依存関係を設定します。サーバーにデプロイする前に、常にアプリケーションを本番モードにする必要があります。これにより、Sailsアプリケーションの安定性、パフォーマンス、スケーラビリティが確保されます。
デフォルトでは、SailsはNODE_ENV
環境変数を使用して環境を決定します。NODE_ENV
が設定されていない場合、Sailsはsails.config.environment
設定が提供されているかどうかを確認し、可能な場合はそれを使用します。それ以外の場合は、開発環境で実行されます。
NODE_ENV
環境変数をproduction
に設定してアプリケーションを起動すると、Sailsはsails.config.environment
も自動的にproduction
に設定します。これは本番モードに切り替える推奨方法です。Sailsのいくつかの依存関係はNODE_ENV
環境変数に依存しているため、通常はsails.config.environment
を手動で設定することはお勧めしません。また、ほとんどのSails/Node.jsホスティングサービスによって自動的に設定されます。
NODE_ENV
をproduction
に設定せずに(たとえば、sails lift --prod
を実行することで)、本番環境でSailsアプリケーションを起動しようとすると、Sailsは自動的にNODE_ENV
をproduction
に設定します。NODE_ENV
が別の値(たとえばNODE_ENV=development sails lift --prod
)に設定されている間に本番環境でSailsアプリケーションを起動しようとすると、アプリケーションの起動に失敗します。
本番環境用のSailsアプリケーションの設定に関する詳細については、概念 > 配置を参照してください。
NODE_ENV=production
に設定したまま、sails.config.environment
を「staging」など、完全に別のものに変更しても問題ありません。これにより、Sailsは異なる環境固有の設定ファイル(例:config/env/staging.js
)とGruntタスク(例:tasks/register/staging.js
)を読み込みますが、それ以外は本番環境のように動作します。
sails.config.hookTimeout
アプリケーション内のすべてのフックに課される、ミリ秒単位の時間制限です。いずれかのフックのロードにこの時間よりも長くかかると、Sailsは処理を中止します。デフォルトは20000
(20秒)です。
この設定を変更する最も一般的な理由は、遅い本番Gruntタスクを許容することです。たとえば、アプリケーションがuglifyを使用しており、アセットフォルダに非常に多くのクライアントサイドJavaScriptファイルがある場合、Sailsがこれらのクライアントサイドアセットをすべてコンパイルするために20秒以上待機する必要があるかもしれません。本番アセットパイプラインに関するその他のヒントについては、概念 > 配置を参照してください。
sails.config.ssl
SSL/TLS(トランスポート層セキュリティ)は、潜在的な中間者攻撃を防ぐために不可欠です。SSL/TLSのようなプロトコルがない場合、ログイン資格情報やクレジットカード番号の安全な送信などのWebの基本は、はるかに複雑で面倒になります。SSL/TLSはHTTPリクエスト(https://
)だけでなく、WebSockets(wss://
経由)にも必要です。幸いなことに、SSL設定は1か所、sails.config.ssl
で設定するだけで済みます。
SSLとロードバランサー
sails.config.ssl
設定は、SailsプロセスがSSLを管理する場合にのみ関連します。常にそうとは限りません。たとえば、Sailsアプリケーションが時間の経過とともにトラフィックが増えると予想される場合、複数のサーバーにスケールする必要があり、ロードバランサーが必要になります。パフォーマンスと簡素化のために、ほとんどの場合、ロードバランサーでSSLを終了するのが良い考えです。そうすれば、パケットがSailsアプリケーションに到達する前にSSL/TLSが既に処理されているため、sails.config.ssl
設定をまったく使用する必要はありません。(これは、HerokuのようなPaaS、または組み込みのロードバランサーを持つほぼすべての他のホストを使用する場合にも当てはまります。)この設定がアプリケーションに適用されると判断した場合は、詳細については以下をお読みください。
sails.config.ssl
を使用して基本的なSSLサーバーオプションを設定するか、sails.config.http.serverOptionsでより高度なオプションを指定することを示します。
辞書を指定する場合は、key
とcert
キーの両方、またはpfx
キーを含める必要があります。これらのオプションの存在は、アプリケーションがHTTPSサーバーで起動される必要があることをSailsに示します。アプリケーションにより複雑なSSL設定が必要な場合(たとえば、SNICallbackを使用する場合)、sails.config.ssl
をtrue
に設定し、sails.config.http.serverOptionsで高度なオプションを指定します。
この例では、プロジェクトにconfig/ssl/
というフォルダを作成し、そこに証明書/キーファイルを配置したと仮定します。次に、設定ファイルのいずれかに、以下を含めます。
// Assuming this is in `config/env/production.js`, and your folder of SSL cert/key files is in `config/ssl/`:
ssl: {
ca: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-gd-bundle.crt')),
key: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-ssl.key')),
cert: require('fs').readFileSync(require('path').resolve(__dirname,'../ssl/my-ssl.crt'))
}