Ubuntu 14.04とNginxを使用して、デジタルオーシャンドロップレットにcreate-react-app
SPAを展開しようとしています。静的サーバーごとに 展開手順 、serve -s build -p 4000
を実行すると機能しますが、端末を閉じるとすぐにアプリがダウンします。 create-react-app
リポジトリのreadmeから、 forever などのように、永久に実行し続ける方法がわかりません。
serve
を実行しないと、Nginxの502 Bad Gatewayエラーが発生します。
Nginx Conf
server {
listen 80;
server_name app.mydomain.com;
root /srv/app-name;
index index.html index.htm index.js;
access_log /var/log/nginx/node-app.access.log;
error_log /var/log/nginx/node-app.error.log;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|Zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm|svg)$ {
root /srv/app-name/build;
}
location / {
proxy_pass http://127.0.0.1:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Access-Control-Allow-Origin *;
proxy_set_header Host $Host;
proxy_cache_bypass $http_upgrade;
}
}
React(およびCreate React App)の主な利点の1つは、Nodeサーバーを実行する(またはプロキシする)オーバーヘッドが不要なことです。 Nginxを使用)静的ファイルを直接提供できます。
展開ドキュメント リンク先から、Create React Appが何をすべきかを説明しています:
npm run build
は、アプリの製品ビルドでbuild
ディレクトリを作成します。サイトへの訪問者にindex.html
が提供され、/static/js/main.<hash>.js
などの静的パスへのリクエストが/static/js/main.<hash>.js
ファイルのコンテンツとともに提供されるように、お気に入りのHTTPサーバーを設定します。
あなたの場合、npm run build
を実行してbuild/
ディレクトリを作成し、Nginxがアクセスできる場所でファイルを利用できるようにします。ビルドはおそらくローカルマシンで行うのが最適です。その後、ファイルをサーバーに安全にコピーできます(SCP、SFTPなどを介して)。あなたはcouldサーバーでnpm run build
を実行しますが、実行する場合は、build/
ディレクトリを次回ビルドを実行すると、クライアントはビルド中に一貫性のないリソースのセットを受け取る可能性があります。
どちらのビルド方法を選択する場合でも、build/
ディレクトリがサーバーに配置されたら、そのアクセス許可をチェックして、Nginxがファイルを読み取り、nginx.conf
を次のように設定できることを確認します。
server {
listen 80;
server_name app.mydomain.com;
root /srv/app-name;
index index.html;
# Other config you desire (TLS, logging, etc)...
location / {
try_files $uri /index.html;
}
}
この構成は、/srv/app-name
にあるファイルに基づいています。要するに、try_files
ディレクティブはCSS/JS/imagesなどを最初にロードしようとし、他のすべてのURIに対して、ビルドにindex.html
ファイルをロードして、アプリを表示します。
注意として、ポート80で安全でないHTTPを使用するのではなく、HTTPS/SSLを使用してデプロイする必要があります。 Certbot Nginxに無料のLet's Encrypt証明書で自動HTTPSを提供します。それ以外の場合、証明書はあなたを妨げます。
NextJSを/
のメインアプリとしてホストしていて、/admin
ルートでCRAをホストしたかった。ここに私がやったことがあります:
hostname
を変更しますbasename
を/admin
に追加location / {
proxy_pass http://localhost:3000;
}
location /admin {
proxy_pass http://localhost:3001;
}
location /admin/ {
proxy_pass http://localhost:3001/;
}
関連記事: