フロントエンド(React.js)をCentOSにデプロイする方法
特定のディレクトリ(build)だけを同期する。
開発環境での作業
環境変数の設定
- .env.production
PORT=10002 REACT_APP_BACKEND_URL=http://example.com/api GENERATE_SOURCEMAP=false
バックエンドのPORTを10001、フロントエンドのPORTを10002とする。
フロントエンド側の.env.production
というファイルに
PORT=10002
を設定。
また、
REACT_APP_BACKEND_URL=http://example.com/api
のように環境変数を設定しておき、
nginxの.confで
http://example.com/api
へのアクセスを
http://localhost:10001
にプロキシーする。
(http://example.com
はフロントエンド、
http://example.com/api
はバックエンド)
GENERATE_SOURCEMAP=false
は、デバッグ用のソースマップを本番環境用のビルドでは出力しないための設定。
package.jsonの設定
- package.json抜粋
"scripts": { "build": "dotenv -e .env.production react-scripts build", },
package.json
で、scripts
のbuild
に
dotenv -e .env.production
を追加することで
npm run build
コマンドを実行したときに.env.production
の中身が環境変数として読み込まれる。
npm run build
npm run build
npm run build
を実行するとbuild
というディレクトリが生成される。
このbuild
ディレクトリを本番環境にデプロイし、
build/index.html
へブラウザからアクセスすることで
サイトとして機能する。
GitHubへアップロード
git add . git commit -m 'xxx' git push
コミットしてGitHubへpushする。
ここでは、build
ディレクトリだけでなく、
src
やpublic
などのディレクトリもGitHubへpushする。
(開発環境のハードウェアが故障したときの保険としてソースコードを管理するため)
本番環境ではsparse-checkout
でbuild
ディレクトリだけpullする。
本番環境での作業
gitのバージョンを確認
プロジェクト用のディレクトリを作成
mkdir -p ~/Projects/xxx/frontend
git clone
リポジトリのURLを取得
ブラウザでGitHubへログイン。
プロジェクトのリポジトリを選択し、Code
ボタンからリポジトリのURLを取得する。
git clone
cd ~/Projects/xxx/frontend git clone --filter=blob:none --sparse https://github.com/xxx/yyy.git .
–filter=blob:none –sparse
オプションを付けてgit clone
を実行。
package.json
などの管理ファイルのみがコピーされ、
ソースコードなどはコピーされない。
sparse-checkoutを設定
sparse-checkoutを有効化
git sparse-checkout init --cone
sparse-checkout
機能を有効化する。
sparse-checkout
というのは、特定のディレクトリだけをgitで同期する機能。
sparse-checkoutの中身を確認
cat .git/info/sparse-checkout
sparse-checkout
というファイルの中身を表示。
- 実行結果
/* !/*/
デフォルトでは、sparse-checkout
の中身は上記のようになっている。
/*
の効果により、プロジェクトディレクトリ直下のすべてのファイルは同期される。
!/*/
の効果により、すべてのディレクトリは同期しない。
sparse-checkoutの対象を設定
git sparse-checkout set build
build
ディレクトリをgitの同期対象に設定。
sparse-checkoutの対象を確認
git sparse-checkout list
cat .git/info/sparse-checkout
cat .git/info/sparse-checkout
- 実行結果
/* !/*/ /build/
git pull
git pull
2回目以降の同期は、git pull
コマンドを実行。