サーバーで常駐させる
手元で動くのと、公開するのは別
npm run dev で動いているサーバーは、あなたが端末を閉じた瞬間に止まります。公開するには、閉じても動き続ける形にする必要があります。
これを常駐と呼びます。サーバー構築入門で学んだ systemd の出番です。
設定を書く
プレーンテキスト
[Unit]
Description=fleama API
[Service]
WorkingDirectory=/var/www/fleama
ExecStart=/usr/bin/node app.js
Restart=always
Environment=PORT=3000
[Install]
WantedBy=multi-user.targetRestart=always が大切です。何かの理由で落ちても、自動で起動し直してくれます。落ちない仕組みではなく、落ちても戻る仕組みを用意しておくのが実務の考え方です。
開発用の起動を使わない
本番では node --watch を使いません。ファイルを見張る必要が無いうえ、勝手に再起動されると困るからです。
第1章で start と dev を分けて登録したのは、この日のためでした。
JSON
{
"scripts": {
"start": "node app.js",
"dev": "node --watch app.js"
}
}環境ごとに変わるものをコードに書かない
第3章で process.env.PORT を扱いました。同じ考え方で、環境によって変わる値はすべて外から渡します。
JavaScript
const port = process.env.PORT || 3000;
const allowedOrigin = process.env.ALLOWED_ORIGIN || "http://localhost:5173";公開したら ALLOWED_ORIGIN は本番のアドレスになります。コードは同じまま、設定だけが変わる形にしておきます。
秘密の値は特に外へ出す
パスワードやトークンの元になる値を、コードに直接書いてはいけません。
JavaScript
const secret = "my-secret-key"; // 絶対に避けるコードは共有され、履歴にも残ります。一度書いたものは、後から消しても履歴から読めます。秘密は環境変数で渡す、と覚えてください。
手を動かす
演習では、環境変数から設定を組み立てる関数を書きます。無いときの既定値と、秘密の扱いに気を配ってください。
要件
portはPORTを数値に直したもの(無い・数値にならないなら 3000)allowedOriginはALLOWED_ORIGIN(無ければhttp://localhost:5173)hasSecretはSECRET_KEYが空でなければtrue。値そのものは返さない
入出力例
buildConfig({"ALLOWED_ORIGIN":"https://fleama.example.com","PORT":"8080","SECRET_KEY":"abc123"}) → {"allowedOrigin":"https://fleama.example.com","hasSecret":true,"port":8080}
buildConfig({}) → {"allowedOrigin":"http://localhost:5173","hasSecret":false,"port":3000}
buildConfig({"PORT":"abc","SECRET_KEY":"abc123"}) → {"allowedOrigin":"http://localhost:5173","hasSecret":true,"port":3000}
buildConfig({"SECRET_KEY":""}) → {"allowedOrigin":"http://localhost:5173","hasSecret":false,"port":3000}ヒント
編集 ゆめさく編集部