fontcolor_theme
Deepkit Framework

デプロイ

この章では、アプリケーションを JavaScript にコンパイルし、本番環境向けに設定し、Docker を使用してデプロイする方法を学びます。

TypeScript をコンパイルする

app.ts ファイルに次のようなアプリケーションがあるとします:

#!/usr/bin/env ts-node-script
import { App } from '@deepkit/app';
import { FrameworkModule } from '@deepkit/framework';
import { http } from '@deepkit/http';

class Config {
    title: string = 'DEV my Page';
}

class MyWebsite {
    constructor(protected title: Config['title']) {
    }

    @http.GET()
    helloWorld() {
        return 'Hello from ' + this.title;
    }
}

new App({
    config: Config,
    controllers: [MyWebsite],
    imports: [new FrameworkModule]
})
    .loadConfigFromEnv()
    .run();

ts-node app.ts server:start を使用すると、すべてが正しく動作することがわかります。本番環境では通常、ts-node でサーバーを起動しません。JavaScript にコンパイルしてから Node で実行します。そのためには、適切な設定オプションを備えた正しい tsconfig.json が必要です。「First Application」セクションでは、tsconfig.json は JavaScript を .dist フォルダーに出力するように設定されています。あなたも同様に設定しているものとします。

コンパイラ設定がすべて正しく、outDirdist などのフォルダーを指していれば、プロジェクトで tsc コマンドを実行した瞬間に、tsconfig.json にリンクされたファイルはすべて JavaScript にコンパイルされます。このリストにはエントリーファイルを指定するだけで十分です。インポートされるファイルも自動的にコンパイルされるため、tsconfig.json に明示的に追加する必要はありません。tscnpm install typescript をインストールすると含まれる TypeScript の一部です。

$ ./node_modules/.bin/tsc

TypeScript コンパイラは成功した場合、何も出力しません。dist の出力を確認できます。

$ tree dist
dist
└── app.js

ファイルが 1 つだけであることがわかります。node distapp.js で実行すれば、ts-node app.ts と同じ機能が得られます。

デプロイでは、TypeScript ファイルが正しくコンパイルされ、Node から直接すべてが動作することが重要です。node_modules を含む dist フォルダーをそのまま移動し、node distapp.js server:start を実行すれば、アプリは正常にデプロイされます。しかし、アプリを正しくパッケージ化するために Docker のような他のソリューションを使用するのが一般的です。

設定

本番環境では、サーバーを localhost にバインドするのではなく、通常は 0.0.0.0 で全デバイスにバインドします。リバースプロキシの背後にいない場合は、ポートを 80 に設定するでしょう。これら 2 つの設定を構成するには、FrameworkModule をカスタマイズする必要があります。対象となる 2 つのオプションは hostport です。それらを環境変数や .dotenv ファイル経由で外部から設定できるようにするには、まずそれを許可する必要があります。幸い、上記のコードは loadConfigFromEnv() メソッドで既にそれを行っています。

アプリケーションの設定オプションの設定方法について詳しくは、設定 の章を参照してください。

利用可能な設定オプションとその値を確認するには、ts-node app.ts app:config コマンドを使用できます。Framework Debugger でも確認できます。

SSL

アプリケーションを SSL を用いた HTTPS で実行することが推奨され(場合によっては必須)です。SSL を構成するためのオプションがいくつかあります。SSL を有効にするには framework.ssl を使用し、次のオプションでそのパラメータを設定します。

|=== |名前|Type|説明

|framework.ssl|boolean|true の場合、HTTPS サーバーを有効にします |framework.httpsPort|number?|httpsPort と ssl が定義されている場合、http サーバーに加えて https サーバーも起動されます。 |framework.sslKey|string?|https 用の SSL キーファイルへのファイルパス |framework.sslCertificate|string?|https 用の証明書ファイルへのファイルパス |framework.sslCa|string?|https 用の CA ファイルへのファイルパス |framework.sslCrl|string?|https 用の CRL ファイルへのファイルパス |framework.sslOptions|object?|tls.SecureContextOptions および tls.TlsOptions と同じ Interface。 |===

import { App } from '@deepkit/app';
import { FrameworkModule } from '@deepkit/framework';

// ここに config と HTTP コントローラーを記述

new App({
    config: Config,
    controllers: [MyWebsite],
    imports: [
        new FrameworkModule({
            ssl: true,
            selfSigned: true,
            sslKey: __dirname + 'path/ssl.key',
            sslCertificate: __dirname + 'path/ssl.cert',
            sslCA: __dirname + 'path/ssl.ca',
        })
    ]
})
    .run();

ローカル SSL

ローカル開発環境では、framework.selfSigned オプションで自己署名の HTTPS を有効にできます。

import { App } from '@deepkit/app';
import { FrameworkModule } from '@deepkit/framework';

// ここに config と HTTP コントローラーを記述

new App({
    config: config,
    controllers: [MyWebsite],
    imports: [
        new FrameworkModule({
            ssl: true,
            selfSigned: true,
        })
    ]
})
    .run();
$ ts-node app.ts server:start
2021-06-13T18:04:01.563Z [LOG] Start HTTP server, using 1 workers.
2021-06-13T18:04:01.598Z [LOG] Self signed certificate for localhost created at var/self-signed-localhost.cert
2021-06-13T18:04:01.598Z [LOG] Tip: If you want to open this server via chrome for localhost, use chrome://flags/#allow-insecure-localhost
2021-06-13T18:04:01.606Z [LOG] HTTP MyWebsite
2021-06-13T18:04:01.606Z [LOG]     GET / helloWorld
2021-06-13T18:04:01.606Z [LOG] HTTPS listening at https://localhost:8080/

このサーバーを今起動すると、HTTP サーバーは https:localhost:8080 で HTTPS として利用可能になります。自己署名証明書はセキュリティリスクとみなされるため、この URL を Chrome で開くとエラーメッセージ「NET::ERR_CERT_INVALID」が表示されます: chrome:flagsallow-insecure-localhost

English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)