この記事は、Ubuntu20.04,Node,Nginxを利用して、Reactプロジェクトのデプロイ(本番環境構築)方法を紹介します。
◆動作検証環境
・さくらVPSサーバー:メモリ 512M, ストレージ:SSD 25GB, CPU:1コア
・OS:Ubuntu 20.04
・Node:10.19.0
・npm:6.14.4
・Nginx:1.18.0
Ubuntuの環境初期設定
セキュリティ管理
さくらVPSサーバーにUbuntu 20.04 をインストール後の最低限のセキュリティ管理は、下記の記事を参考にしてください。
サーバーセキュリティー対策【秘密鍵を用いたSSHログイン設定(ubuntu,mac)】
Ubuntuの初期設定
まずはリモートサーバーにログインします。
1 2 3 | $ ssh -i ~/.ssh/id_rsa username@xxx.xxx.xxx.xxx |
日本語環境の設定
1 2 3 | $ sudo apt-get -y install language-pack-ja-base language-pack-ja ibus-mozc |
日本語への設定
1 2 3 | $ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" |
変更後の確認
1 2 3 | $ sudo localectl |
↓のように表示されればOK
1 2 3 4 5 6 7 | System Locale: LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja VC Keymap: n/a X11 Layout: jp,jp X11 Model: pc105 |
時刻設定の確認
1 2 3 | $ date |
以下のように表示される
1 2 3 | Sat Jun 19 21:18:14 JST 2021 |
タイムゾーンの変更
1 2 3 | $ sudo timedatectl set-timezone Asia/Tokyo |
1 2 3 | $ date |
ファイヤーウォール設定
1 2 3 | $ sudo ufw allow ssh |
1 2 3 | $ sudo ufw allow 80 |
1 2 3 | $ sudo ufw allow 443 |
ファイヤーウォール開始
1 2 3 | $ sudo ufw enable |
Ubuntuのソフトウェアの更新
1 2 3 | $ sudo apt-get update |
vimのインストール
1 2 3 | $ sudo apt install vim |
インストール確認
1 2 3 4 | $ vim --version VIM - Vi IMproved 8.1 |
node,npm,nginxのインストール
1 2 3 | $ sudo apt-get install nodejs npm nginx |
インストールの確認
1 2 3 4 | $ node -v v10.19.0 |
1 2 3 4 | $ npm -v 6.14.4 |
1 2 3 4 | $ nginx -v nginx version: nginx/1.18.0 (Ubuntu) |
nginxへのファイヤーウォールアクセス許可
1 2 3 | $ sudo ufw allow 'Nginx Full' |
ReactプロジェクトのBuildとリモートサーバーへのアップロード
Reactのプロジェクトを本番環境へデプロイするために、ローカル環境のプロジェクトをビルドします。
1 2 3 | $ npm run build |
ビルドが完了した後はbuildディレクトリをリモートサーバーへアプロードするために、githubへPushしておきます。
リモートサーバーへログインして、gitをインストールします。
1 2 3 | $ sudo apt-get install git |
次にプロジェクトを設置するディレクトリに移動して、プロジェクトをクローンします。
*今回は/var/www/htmlとしています。
1 2 3 | $ cd /var/www/html |
1 2 3 | $ sudo git clone https://github.com/xxxxxxxx/xxxxxxxx.git |
Nginxの設定
これからは、WEBサーバーNginxの設定を行います。
Nginxのエントリーファイルの編集
まず、Webサーバーのエントリーファイルがあるディレクトリへ移動します。
1 2 3 | $ cd /etc/nginx/sites-available |
次に今回のDjangoプロジェクトで使用するオリジナルのエントリーファイルを作成します。
1 2 3 | $ sudo vim project |
下記のように編集します。
この段階では、server_name にはリモートサーバーのIPアドレスを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | server { listen 80; listen [::]:80; server_name xxx.xxx.xxx.xxx ; root /var/www/your_project/build; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } |
1 2 3 | $ sudo nginx -t |
下記のように表示されればOKです。
*エラーの表示がある場合は対応します。
1 2 3 4 | nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
1 2 3 | sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/ |
Nginxのリスタート
1 2 3 | $ sudo systemctl restart nginx |
ブラウザにアクセス(IPアドレス+ポート番号の指定は無し)してプロジェクトの表示を確認します。
表示が確認できればOKです。
もう一度configファイルを中心に見直し内容を編集します。
1 2 3 | sudo vim /etc/nginx/sites-available/project |
編集後は、既に作成済みのシンボリックリンクを削除し、編集し直したもので再度作成します。
1 2 3 | sudo rm -f /etc/nginx/sites-enabled/project |
1 2 3 | sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/ |
リスタートして表示を確認します。
1 2 3 | $ sudo systemctl restart nginx |
独自ドメイン・SSL化とリダイレクト設定
独自ドメインの設定
今までの設定で、IPアドレスの指定でサイトへアクセスできるようになりました。
ここからは独自ドメインの設定と、SSLとリダイレクトの設定を行います。
Webサーバーのエントリーファイルがあるディレクトリへ移動し、編集します。
1 2 3 | $ cd /etc/nginx/sites-available |
1 2 3 | $ sudo vim project |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | server { listen 80; listen [::]:80; server_name yoursite.com ; root /var/www/your_project/build; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } |
1 2 3 | $ sudo systemctl restart nginx |
独自ドメインでブラウザにアクセス(ポート番号の指定は無し)してプロジェクトの表示を確認します。
表示が確認できればOKです。
SSL化とリダイレクト設定
今回はLet’s Encryptを利用してSSL化を行います。
letsencryptをインストール
1 2 3 | $ sudo apt-get install letsencrypt |
1 2 3 | $ sudo systemctl stop nginx |
1 2 3 | $ sudo letsencrypt certonly --standalone -d yoursite.com |
詳しい方法は下記の記事にて確認してください。
独自ドメインサイトのSSL化(HTTPS化)【Letsencrypt,Ubuntu,Nginx】
Webサーバーのエントリーファイルがあるディレクトリへ移動し、編集します。
1 2 3 | $ cd /etc/nginx/sites-available |
1 2 3 | $ sudo vim project |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # http wwwなしからのリダイレクト server { listen 80; listen [::]:80; server_name yoursite.com; return 301 https://$host$request_uri; } # http https wwwありからのリダイレクト server { listen 80; listen 443 ssl; server_name www.yoursite.com; ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem; return 301 https://yoursite.com$request_uri; } # リダイレクトを流される側の設定 server { listen 443 ssl default_server; server_name yoursite.com; ssl on; ssl_certificate /etc/letsencrypt/live/yoursite.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yoursite.com/privkey.pem; root /var/www/your_project/build; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } } |
1 2 3 | $ sudo service nginx start |
ブラウザでサイトの表示が行われるか、URL欄の表示がhttps対応になっているかを確認します。
letsencryptの証明書更新の自動化
letsencryptの証明書は3ヶ月ごとに更新する必要があります。
自動で更新を行うためにバッジ処理の設定を加えます。
詳しい方法は下記の記事にて確認してください。
独自ドメインサイトのSSL化(HTTPS化)【Letsencrypt,Ubuntu,Nginx】
以上、Ubuntu20.04,Node,Nginxを利用して、Reactプロジェクトのデプロイ(本番環境構築)方法を紹介しました。