1. ホーム
  2. node.js

[解決済み] 本番では、localhost:1337は何になるのでしょうか?

2022-02-07 10:35:43

質問

この質問は非常に基本的なものだと思いますが、私を混乱させています。 現在、開発モードでは私のバックエンドはlocalhost:1337で動作しています(正確にはStrapi cmsを使用しています)。 しかし、ウェブサイトがウェブサーバーにデプロイされたとき、それは何に変わるのでしょうか?

具体的には、ウェブサイトはルートではなく、サブディレクトリに存在することになりますが、これに影響するでしょうか?

現在、私のプロジェクト内で画像のsrcとして使用しているURLはこれです。 localhost:1337/uploads/image-example.jpg

私は、プロジェクトがデプロイされた後、新しいURLが何になるかを理解しようとしています、さらに、それはルートではなくサブディレクトリにデプロイされます

ありがとうございました。

解決方法は?

何もしなくていいはずです。

すべてではないにしても、ほとんどのウェブホストは PORT 環境変数でアプリケーションサーバーを設定します。Strapiでコードを検索してみたところ これ :

"port": "${process.env.PORT || 1337}",

を使って環境変数を読み込んだり、デフォルト値を使ったりします (ランダムなポートを要求する代わりに 0 開発中の予測可能性のため)。もしあなたが彼らのスタータースクリプトを使ったのであれば、あなたのアプリケーションも同じだと思うのですが。

多くの場合、これで十分ですが、2つの例外があります。

  1. アプリケーションサーバーが自分のURLを知らない場合、相対URLの生成しかできません。例えば、自分自身へのリンクを含む電子メールを作成することはできません。

    HTTPリダイレクトは、むかしは絶対URLが必要でした。 が、その後、改正されました。 .

  2. ポートだけを設定すると、アプリケーションが / . 例えば、(Herokuではなく)自分でWebサーバーを設定していて、アプリケーションを /blog この場合、アプリケーションに正しいプレフィックスを付けるように指示する方法が必要です。

    URLを相対パスのみに制限することで回避できるかもしれませんが、面倒そうですし、普通はやらないと思います。それに、受信したリクエストは、実はユーザーが見ているURLを判別するのに十分な情報を持っていないんです。その代わり、帯域外のURLをアプリに表示するんですね。

    例えば、Grafana には root_url 変数 の設定ファイルに完全なURLプレフィックスを記述すると、Prometheusでは -web.external-url 引数 など。

    しかし Herokuは、アプリケーションを以下の場所にマウントすることができないと思います。 / ということで、ポートで十分です。

ここでは、Heroku上で動作する完全なサーバーを作成し、その環境をお見せします。

const app = require("express")();

app.set("json spaces", 2);

app.get("/", (req, res) => {
  res.send(process.env);
});

const server = app.listen(process.env.PORT, () => {
  console.log('server is up on', server.address());
});

PORT 環境にはアプリ名が含まれないため、この変数が必要なすべての設定です。

アプリの本番URLをハードコーディングすると、メンテナンスの負担になるため 設定可能であることを確認する もし、アプリにURLを教えることになったら、コマンドライン引数か環境変数で指定します。

具体的に言うと、画像のsrcは以下のようになります。 /uploads .