デプロイを効率化するスクリプトの解説とその効果について
デプロイ作業は、開発から本番環境への移行を円滑に行うために重要なプロセスですが、手動で行うと手間がかかるうえ、ミスが発生するリスクもあります。そのため、自動化スクリプトを活用することで効率化が図られ、開発者の負担を軽減することができます。今回は、Bashスクリプトを用いてNuxt3のプロジェクトとMySQLデータベースを自動デプロイする方法を紹介します。
スクリプトの概要と役割
今回のスクリプトは、次の作業を自動化しています。
ローカルのNuxt3プロジェクトのビルド 本番環境に適した形式でプロジェクトをビルドします。
ローカル・リモートMySQLスキーマのエクスポートと差分計算 ローカルとリモートのMySQLスキーマを比較し、差分を抽出してリモートデータベースに反映させます。
リモートサーバーへのファイル転送 ビルドされたプロジェクトをリモートサーバーへアップロードし、スムーズにデプロイします。
PM2を用いた本番環境の再起動 PM2プロセスマネージャーを使ってサーバー上のアプリケーションを再起動し、最新のビルドを反映させます。
1. 開発環境からのビルド
スクリプトは、最初に開発環境のプロジェクトディレクトリに移動し、環境変数を本番環境に設定します。次に、Nuxt3プロジェクトをビルドして、アプリケーションを本番用に準備します。
cd $PROJECT_DIR echo "Setting NODE_ENV to production..." export NODE_ENV=production echo "Building the project..." npm run buildこのビルドステップによって、最適化されたHTML、CSS、JavaScriptが生成され、これらを本番環境にデプロイすることで、アプリケーションのパフォーマンスが向上します。
2. MySQLスキーマのエクスポートと差分計算
本番環境でのデータベーススキーマの変更は、データを保護しながらも新しい機能や構造を取り入れるために重要です。このスクリプトでは、ローカルおよびリモートのMySQLスキーマをエクスポートし、差分を計算してリモートサーバーに適用しています。
ローカルのMySQLスキーマをエクスポート
echo "Exporting local MySQL schema..." mysqldump -u $LOCAL_DB_USER -p$LOCAL_DB_PASSWORD --no-data --skip-add-drop-table $LOCAL_DB_NAME > local_schema.sql
リモートのMySQLスキーマをエクスポート
echo "Exporting remote MySQL schema..."
ssh $REMOTE_USER@$REMOTE_HOST "
mysqldump -u $REMOTE_DB_USER -p$REMOTE_DB_PASSWORD --no-data --skip-add-drop-table $REMOTE_DB_NAME > $REMOTE_DB_DIR/remote_schema.sql
"スキーマを差分計算する部分は以下の通りです。mysqldiffを使用して、スキーマの差分を計算し、リモートデータベースに反映するためのSQLを生成しています。
スキーマの差分を計算
echo "Calculating schema differences..." mysqldiff --server1=$LOCAL_DB_USER:$LOCAL_DB_PASSWORD@localhost --server2=$REMOTE_DB_USER:$REMOTE_DB_PASSWORD@$REMOTE_HOST $LOCAL_DB_NAME:$REMOTE_DB_NAME --changes-for=server2 --difftype=sql > schema_diff.sql次に、生成された差分ファイルをリモートサーバーに転送し、データベースにインポートします。
差分ファイルをリモートサーバーに転送
echo "Transferring schema differences to remote server..." scp schema_diff.sql $REMOTE_USER@$REMOTE_HOST:$REMOTE_DB_DIR
リモートのMySQLに差分をインポート
echo "Importing schema differences to remote MySQL..." ssh $REMOTE_USER@$REMOTE_HOST " mysql -u $REMOTE_DB_USER -p$REMOTE_DB_PASSWORD $REMOTE_DB_NAME < $REMOTE_DB_DIR/schema_diff.sql "このプロセスにより、データベースのスキーマが安全かつ自動的に同期され、手動のエラーリスクを軽減できます。
3. ファイル転送とデプロイメント
ビルドされたNuxt3の.outputディレクトリをリモートサーバーにアップロードするためにrsyncを使用します。これにより、更新されたファイルだけが転送されるため、効率的です。
echo "Uploading .output directory to the server..." rsync -avz --delete $PROJECT_DIR/.output/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/.outputこのステップにより、転送時間が最小限に抑えられ、古いファイルが削除されて最新のファイルだけがサーバーに保持されます。
4. PM2を用いたアプリケーションの再起動
最後に、PM2を用いてサーバー上でアプリケーションを再起動します。PM2はNode.jsアプリケーションを常駐させ、管理するためのプロセスマネージャーで、本番環境でのアプリケーションの自動再起動、負荷分散、ログ管理に便利です。
echo "Restarting the application on the server..." ssh $REMOTE_USER@$REMOTE_HOST " export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" nvm use node cd $REMOTE_DIR && pm2 restart $REMOTE_DIR/ecosystem.config.js "このプロセスにより、アプリケーションは本番環境でシームレスに再起動し、新しいビルドが適用されます。
スクリプトの効果
このデプロイスクリプトは以下のような効果をもたらします。
エラーの削減 手動でのデプロイ操作を自動化することで、設定ミスやファイルの転送漏れといった人為的なエラーを防止できます。
作業効率の向上 スクリプトが全工程を管理するため、デプロイ作業が迅速に完了し、時間を節約できます。開発チームがコード変更に集中できるため、生産性が向上します。
アプリケーションの安定性 PM2を用いた再起動とプロセスマネジメントにより、障害発生時にも迅速な復旧が可能です。また、サーバーのリソース消費を最適化し、パフォーマンスの安定性も向上します。
データの一貫性 データベースのスキーマ同期機能により、ローカルとリモートのデータベースが常に一致する状態を保ちます。新しい機能を導入する際も、データベースが整合性を保つため、エラーが発生しにくくなります。
まとめ
このようなスクリプトを使用することで、デプロイ作業が効率化され、開発者の負担が軽減されます。また、エラーのリスクを大幅に減らすことができるため、特に本番環境へのデプロイにおいて効果的です。このスクリプトをベースに、今後さらに機能を追加することで、さらに効率的なデプロイ環境を構築することが可能になります。
僕のプロフィール
** 朝霞市議会議員 わたなべ竜二 ** * 朝霞市議会議員 渡部竜二の公式サイトです。朝霞市の住みやすい街づくりや未来を見据えた政策提案、議会活動の最新情報をお届けし * * ryu2-w.jp *
** Login • Instagram ** * Welcome back to Instagram. Sign in to check out what your fri * * www.instagram.com *
ダウンロード
copy ## いいなと思ったら応援しよう!
チップで応援する
この記事はnoteに投稿された記事です。
元の記事をnoteで読む →