Next.js は VPS でどれくらいの RAM を必要としますか?
ビルド、アイドル、ロード メモリを分離して、Next.js VPS のサイズを決定します。アプリケーションとサーバー全体の予算を測定する方法を学びます。
アプリケーションはローカルで動作します。 VPS では、SSH 切断後も存続し、アセットを提供し、ドメインの背後でフォームを処理する必要があります。このガイドでは、実稼働ビルドから公開検証までのパスをたどります。
この例は、従来のビルドおよび開始スクリプトを使用する Next.js アプリケーション、systemd および既存の Nginx リバース プロキシを使用する Linux をターゲットとしています。パス、サービス アカウント、ドメインを環境に合わせて調整します。静的エクスポートとリクエストレンダリングされたアプリケーションには、異なるデプロイメントのニーズがあります。
既知のコミット、そのロックファイル、およびインストールされている Next.js リリースと互換性のあるノード バージョンから開始します。 npm、npm の場合、ci はそのロックファイルから依存関係をインストールします。 pnpm または Yarn の既存のパッケージ マネージャーと再現可能なインストール モードを維持します。
実行中のサーバーの出力ディレクトリ内ではなく、リリース ディレクトリまたは CI 内にビルドします。ビルドではアプリケーション コードを実行し、サービスに接続できます。秘密を公開せずに、必要な変数を指定します。 NEXT_PUBLIC_ 値はブラウザ用であり、ビルド中に埋め込まれます。
node --version
npm ci
npm run build次回の起動時に起動スクリプトが実行されることを確認します。開発サーバーは実稼働環境に維持するプロセスではありません。 127.0.0.1 にバインドすると、サーバーとそのローカル プロキシへの直接アクセスが制限され、アプリケーション ポートがパブリック インターフェイスから切り離されます。
別の端末で、curl -i http://127.0.0.1:3000/ を使用して実際のページを検査します。そのコンテンツとアセットを確認してください。 [出力: スタンドアロン] を選択した場合は、生成されたserver.js とその予想されるディレクトリ構造 (public および .next/static を含む) を使用します。このモードには独自のエントリポイントがあります。
npm run start -- --hostname 127.0.0.1 --port 3000systemd ユニットは、セッションとは独立してサービスを実行します。この例では、既存の Web アプリ アカウントと /srv/my-next-app でのリリースを前提としています。コマンド -v node でノードのパスを確認し、ExecStart を調整します。アカウントはリリースを読み取り、それを必要とするアプリケーションの場所にのみ書き込む必要があります。
サービス アカウントに適切なアクセス許可を持つサーバー変数を環境ファイルに保持します。環境にユニットをインストールした後、systemd-analyze verify で検証し、systemd をリロードしてサービスを開始します。起動に失敗した場合は、ジャーナルを調べてください。自動再起動は、メモリ関連の終了の調査に代わるものではありません。
[Unit]
Description=My Next.js application
After=network.target
[Service]
Type=simple
User=webapp
WorkingDirectory=/srv/my-next-app
Environment=NODE_ENV=production
EnvironmentFile=/etc/my-next-app.env
ExecStart=/usr/bin/node /srv/my-next-app/node_modules/next/dist/bin/next start --hostname 127.0.0.1 --port 3000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetドメインのサーバー ブロック内で、ロケーションはリクエストをローカル アプリケーションに転送できます。次のフラグメントでは、HTTP とストリーミングについて説明します。それを既存の構成と統合し、リロードする前に nginx -t を実行します。これは完全な TLS 構成ではありません。
ドメインは VPS に解決され、更新が有効な有効な証明書を持っている必要があります。アプリケーションのホストと元のプロトコルを保持します。共有動的応答キャッシュなしで開始します。プライベート ページ、Cookie、ナビゲーション バリアントには明示的なポリシーが必要です。アプリケーションが WebSocket を使用する場合は、適切な Nginx Upgrade ヘッダー処理を個別に追加します。
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}ホームページからの 200 応答では、アプリケーション全体が検証されるわけではありません。動的ルート、欠落ページ、ログイン、ログアウト、フォームを実行します。ブラウザーでリダイレクト、セキュア Cookie、画像、ナビゲーションを確認します。
ストリーミング ページもテストします。コンテンツがドメイン経由で一度に到着するが、ループバックで徐々に到着する場合は、すべての仲介者でのバッファリングを調べてください。トラフィックを切り替える前に、以前のリリースとその設定を保持します。アプリケーション コードを元に戻すには、データベース移行との互換性も必要です。
アイドル状態のメモリ、トラフィックのピーク、展開の重複を測定します。 2 つのリリースは一時的に共存でき、VPS 上に構築すると独自のピークが追加されます。データベースとプロキシも総予算に含まれます。
PRNext を評価するには、Next.js 参照を保持し、別のディレクトリに候補を構築します。ランタイムを変更する前に、アプリケーションの動作とパフォーマンスを確認してください。