Ubuntu20.04にNginxを使用してReactアプリケーションをデプロイする方法
著者は、 Creative Commons を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
デフォルトのCreateReact App ビルドツールを使用して、Reactアプリケーションをサーバーにすばやくデプロイできます。 build
スクリプトは、すべての JavaScript コード、画像、スタイル、およびHTMLファイルを含む単一のディレクトリにアプリケーションをコンパイルします。 アセットを1つの場所に配置することで、最小限の構成でWebサーバーにデプロイできます。
このチュートリアルでは、ローカルマシン上のReactアプリケーションをNginxを実行しているUbuntu20.04サーバーにデプロイします。 Create React Appを使用してアプリケーションをビルドし、Nginx構成ファイルを使用してファイルをデプロイする場所を決定し、ビルドディレクトリとその内容をサーバーに安全にコピーします。 このチュートリアルを終了するまでに、Reactアプリケーションをビルドしてデプロイできるようになります。
前提条件
- ローカルマシンでは、Node.jsを実行する開発環境が必要になります。 このチュートリアルは、Node.jsバージョン10.22.0およびnpmバージョン6.14.6でテストされました。 これをmacOSまたはUbuntu20.04にインストールするには、Node.jsをインストールしてmacOSにローカル開発環境を作成する方法またはのPPAを使用したインストール]セクションの手順に従います。 Ubuntu20.04にNode.jsをインストールする方法。
- 展開用の1つのUbuntu20.04サーバー。このUbuntu20.04 チュートリアルの初期サーバー設定に従って設定します。これには、sudo対応の非 root ユーザー、ファイアウォール、およびローカルマシン。 DigitalOcean Droplet でSSHアクセスを取得するには、SSHを使用してDropletに接続する方法をお読みください。
- 登録されたドメイン名。 このチュートリアルでは、全体を通して
your_domain
を使用します。 Namecheap からドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - 次の両方のDNSレコードがサーバー用に設定されています。 DigitalOceanを使用している場合、それらを追加する方法の詳細については、DNSドキュメントを参照してください。
- サーバーのパブリックIPアドレスを指す
your_domain
のAレコード。 - サーバーのパブリックIPアドレスを指す
www.your_domain
のAレコード。
- サーバーのパブリックIPアドレスを指す
- Ubuntu20.04にNginxをインストールする方法に従ってインストールされたNginx。 ドメインにサーバーブロックがあることを確認してください。 このチュートリアルでは、例として
/etc/nginx/sites-available/your_domain
を使用します。 - HTTPS証明書を使用してサーバーも保護することをお勧めします。 これは、 Ubuntu20.04チュートリアルでLet'sEncryptを使用してNginxを保護する方法を使用して行うことができます。
- また、JavaScript、HTML、およびCSSの基本的な知識も必要です。これは、HTMLシリーズを使用してWebサイトを構築する方法、CSSシリーズを使用してWebサイトを構築する方法にあります。 、およびJavaScriptでコーディングする方法。
ステップ1—Reactプロジェクトを作成する
このステップでは、Create React Appを使用してアプリケーションを作成し、ボイラープレートアプリのデプロイ可能なバージョンを構築します。
まず、ローカル環境でCreateReactAppを使用して新しいアプリケーションを作成します。 ターミナルで、コマンドを実行してアプリケーションをビルドします。 このチュートリアルでは、プロジェクトはreact-deployと呼ばれます。
npx create-react-app react-deploy
npx
コマンドは、Nodeパッケージをマシンにダウンロードせずに実行します。 create-react-app
スクリプトは、Reactアプリに必要なすべての依存関係をインストールし、react-deploy
ディレクトリにベースプロジェクトをビルドします。 Create React Appの詳細については、チュートリアル Create ReactAppを使用してReactプロジェクトをセットアップする方法を確認してください。
依存関係をダウンロードしてインストールするときに、コードは数分間実行されます。 完了すると、成功メッセージが表示されます。 npm
の代わりにyarn
を使用すると、バージョンが若干異なる場合があります。
OutputSuccess! Created react-deploy at your_file_path/react-deploy Inside that directory, you can run several commands: npm start Starts the development server. npm build Bundles the app into static files for production. npm test Starts the test runner. npm eject Removes this tool and copies build dependencies, configuration files and scripts into the app directory. If you do this, you can’t go back! We suggest that you begin by typing: cd react-deploy npm start Happy hacking!
出力の提案に従って、最初にプロジェクトフォルダーに移動します。
cd react-deploy
基本プロジェクトができたので、それをローカルで実行して、サーバー上でどのように表示されるかをテストします。 npm start
スクリプトを使用してプロジェクトを実行します。
npm start
コマンドを実行すると、ローカルサーバー情報を含む出力が表示されます。
OutputCompiled successfully! You can now view react-deploy in the browser. Local: http://localhost:3000 On Your Network: http://192.168.1.110:3000 Note that the development build is not optimized. To create a production build, use npm build.
ブラウザを開き、 http:// localhost:3000に移動します。 ボイラープレートReactアプリにアクセスできるようになります。
ターミナルにCTRL+C
または⌘+C
と入力して、プロジェクトを停止します。
ブラウザで正常に実行されるプロジェクトができたので、本番ビルドを作成する必要があります。 次のコマンドを使用してcreate-react-app
ビルドスクリプトを実行します。
npm run build
このコマンドは、JavaScriptとアセットをbuild
ディレクトリにコンパイルします。 コマンドが終了すると、ビルドに関するデータを含む出力が表示されます。 ファイル名にはハッシュが含まれているため、出力はわずかに異なることに注意してください。
OutputCreating an optimized production build... Compiled successfully. File sizes after gzip: 41.21 KB build/static/js/2.82f639e7.chunk.js 1.4 KB build/static/js/3.9fbaa076.chunk.js 1.17 KB build/static/js/runtime-main.1caef30b.js 593 B build/static/js/main.e8c17c7d.chunk.js 546 B build/static/css/main.ab7136cd.chunk.css The project was built assuming it is hosted at /. You can control this with the homepage field in your package.json. The build folder is ready to be deployed. You may serve it with a static server: serve -s build Find out more about deployment here: https://cra.link/deployment
build
ディレクトリには、プロジェクトに必要なすべてのファイルのコンパイル済みバージョンと縮小バージョンが含まれるようになります。 この時点では、build
ディレクトリの外部について心配する必要はありません。 あなたがする必要があるのは、ディレクトリをサーバーにデプロイすることだけです。
このステップでは、新しいReactアプリケーションを作成しました。 アプリケーションがローカルで実行されていることを確認し、Create React Appbuild
スクリプトを使用して製品版をビルドしました。 次のステップでは、サーバーにログオンして、build
ディレクトリをコピーする場所を学習します。
ステップ2—Ubuntuサーバー上のデプロイメントファイルの場所を決定する
このステップでは、Reactアプリケーションのサーバーへのデプロイを開始します。 ただし、ファイルをアップロードする前に、展開サーバー上の正しいファイルの場所を決定する必要があります。 このチュートリアルではNginxをWebサーバーとして使用しますが、アプローチはApacheと同じです。 主な違いは、構成ファイルが別のディレクトリにあることです。
Webサーバーがプロジェクトのルートとして使用するディレクトリを見つけるには、ssh
を使用してサーバーにログインします。
ssh username@server_ip
サーバーにアクセスしたら、/etc/nginx/sites-enabled
でWebサーバーの構成を探します。 sites-allowed
というディレクトリもあります。 このディレクトリには、必ずしもアクティブ化されていない構成が含まれています。 構成ファイルを見つけたら、次のコマンドを使用して端末に出力を表示します。
cat /etc/nginx/sites-enabled/your_domain
サイトにHTTPS証明書がない場合は、次のような結果が表示されます。
Outputserver { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } }
Let's Encryptの前提条件に従って、Ubuntu 20.04サーバーを保護すると、次の出力が表示されます。
Outputserver { root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = www.your_domain) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = your_domain) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name your_domain www.your_domain; return 404; # managed by Certbot }
いずれの場合も、Reactアプリをデプロイするための最も重要なフィールドはroot
です。 これは、HTTPリクエストを/var/www/your_domain/html
ディレクトリにポイントします。 つまり、ファイルをその場所にコピーします。 次の行では、Nginxがindex.html
ファイルを検索することがわかります。 ローカルのbuild
ディレクトリを見ると、メインのエントリポイントとして機能するindex.html
ファイルが表示されます。
Ubuntu 20.04サーバーからログオフし、ローカル開発環境に戻ります。
Nginxが提供するファイルの場所がわかったので、ビルドをアップロードできます。
ステップ3—scp
を使用してビルドファイルをアップロードする
この時点で、build
ファイルを使用する準備が整いました。 あなたがする必要があるのはそれらをサーバーにコピーすることだけです。 これを行う簡単な方法は、scp
を使用してファイルを正しい場所にコピーすることです。 scp
コマンドは、端末からリモートサーバーにファイルをコピーするための安全な方法です。 コマンドが構成されている場合、コマンドはssh
キーを使用します。 それ以外の場合は、ユーザー名とパスワードの入力を求められます。
コマンド形式はscp files_to_copy username@server_ip:path_on_server
になります。 最初の引数は、コピーするファイルになります。 この場合、build
ディレクトリ内のすべてのファイルをコピーしています。 2番目の引数は、資格情報と宛先パスの組み合わせです。 宛先パスは、Nginx構成のroot
と同じになります: /var/www/your_domain/html
。
*
ワイルドカードを使用してすべてのbuild
ファイルを/var/www/your_domain/html
にコピーします。
scp -r ./build/* username@server_ip:/var/www/your_domain/html
コマンドを実行すると、ファイルがアップロードされたことを示す出力が表示されます。 結果は少し異なります。
Outputasset-manifest.json 100% 1092 22.0KB/s 00:00 favicon.ico 100% 3870 80.5KB/s 00:00 index.html 100% 3032 61.1KB/s 00:00 logo192.png 100% 5347 59.9KB/s 00:00 logo512.png 100% 9664 69.5KB/s 00:00 manifest.json 100% 492 10.4KB/s 00:00 robots.txt 100% 67 1.0KB/s 00:00 main.ab7136cd.chunk.css 100% 943 20.8KB/s 00:00 main.ab7136cd.chunk.css.map 100% 1490 31.2KB/s 00:00 runtime-main.1caef30b.js.map 100% 12KB 90.3KB/s 00:00 3.9fbaa076.chunk.js 100% 3561 67.2KB/s 00:00 2.82f639e7.chunk.js.map 100% 313KB 156.1KB/s 00:02 runtime-main.1caef30b.js 100% 2372 45.8KB/s 00:00 main.e8c17c7d.chunk.js.map 100% 2436 50.9KB/s 00:00 3.9fbaa076.chunk.js.map 100% 7690 146.7KB/s 00:00 2.82f639e7.chunk.js 100% 128KB 226.5KB/s 00:00 2.82f639e7.chunk.js.LICENSE.txt 100% 1043 21.6KB/s 00:00 main.e8c17c7d.chunk.js 100% 1045 21.7KB/s 00:00 logo.103b5fa1.svg 100% 2671 56.8KB/s 00:00
コマンドが完了すると、終了します。 Reactプロジェクトは、ブラウザーのみを必要とする静的ファイルで構築されているため、サーバー側の言語をさらに構成する必要はありません。 ブラウザを開き、ドメイン名に移動します。 そうすると、Reactプロジェクトが見つかります。
このステップでは、Reactアプリケーションをサーバーにデプロイしました。 サーバー上のルートWebディレクトリを識別する方法を学び、scp
を使用してファイルをコピーしました。 ファイルのアップロードが完了すると、Webブラウザでプロジェクトを表示できるようになりました。
結論
Create React Appを使用する場合、Reactアプリケーションのデプロイは簡単なプロセスです。 build
コマンドを実行して、展開に必要なすべてのファイルのディレクトリを作成します。 ビルドを実行した後、ファイルをサーバー上の正しい場所にコピーし、アプリケーションをWebにライブでプッシュします。
Reactチュートリアルをもっと読みたい場合は、 Reactトピックページを確認するか、React.jsシリーズのコーディング方法ページに戻ってください。