皆さん、こんにちは。今日は、NodeJS/Express を使用して Amazon EC2 サーバーにクイック REST API をデプロイする私のお気に入りの方法の 1 つについてチュートリアルをしたいと思います。この手法により、基本的に EC2 サーバーは GitHub リポジトリにプッシュされた変更に応答できるようになります。
NodeJS/Expressアプリを動作させるための新しいディレクトリをマシン上に作成します。私はrekognition
と呼んでいます。
ターミナルを開き、このコマンドを実行してpackage.jsonを初期化します。npm npm init -y
express.js npm i express
インストールします
デフォルトルートで「hello world」を実行する基本的なエクスプレスサーバーを作成する
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
http://localhost:3000/
で「Hello World!」が表示されるかテストします。
よくできました。ステップ 1 が完了しました! 💪
ディレクトリ内のGitリポジトリを初期化し、最初のコミットを実行します。
git init git add . git commit -m "First commit"
GitHubアカウントにリモートリポジトリを作成する
新しいリポジトリを origin として追加し、ブランチをプッシュします。
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
<REMOTE_REPOSITORY_URL>
を、先ほど作成したリモート リポジトリへのリンクに置き換えます。
デフォルトのブランチとして「main」ではなく「master」を使用するようにリポジトリ設定を変更する必要がある場合があります。
これを実行したら、「main」ブランチを削除できます。
ステップ2: 完了! ガスで調理します⛽️
EC2 インスタンスを起動する手順は次のとおりです。
EC2 ダッシュボードに移動し、新しいインスタンスを起動します。
適切な AMI (Amazon マシンイメージ) を選択します。私は Amazon Linux 2 を使用しています。
次に、ターミナルで SSH 経由でサーバーにログインするテストをしてみましょう。
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
そこにある変数を、EC2 インスタンスに定義した値に置き換えます。
これが表示されたら、サーバーに接続されています。おめでとうございます! 👏
サーバーに NodeJS をインストールしましょう:
sudo yum install -y nodejs
npm経由でpm2をサーバーにグローバルにインストールする
sudo npm i -g pm2
サーバーに git をインストールし、資格情報を設定します。
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
さて、 var/www/
フォルダーがまだ存在しない場合は作成します。
sudo mkdir -p /var/www
次に、ec2-user に所有権を追加します。
sudo chown -R ec2-user:ec2-user /var/www
サーバーのルートからディレクトリに移動します(/home フォルダではありません) 👌 cd ~/var/www
ここで、git リポジトリをクローンします: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
[USERNAME] [REPO_NAME] および [YOUR_PROJECT_DIRECTORY] を独自の値に置き換えます。
次に、ディレクトリをリポジトリに変更し、 cd YOUR_PROJECT_DIRECTORY
pm2 セットアップ用のecosystem.config.js
ファイルを作成します。
nano ecosystem.config.js
次のようになります:
module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };
いいですね、作成して保存したら、pm2 でアプリを起動しましょう:
pm2 start ecosystem.config.js
これで、ポート 3000 のサーバーから「Hello World!」が送信されていることを確認できます。
サーバーの再起動時に pm2 が自動的に起動するようにするには、次のコマンドを実行します。
pm2 save pm2 startup
サーバーが稼働しているかどうかを確認するには、 pm2 status
を実行します。pm2 のドキュメントはここで読むことができます。
ここまで来たら、あなたはスーパースターです⭐️
これはプロセスの最後のステップです。マスターブランチに変更がプッシュされるたびにサーバーを更新するための Github アクションの.yml
ファイルを作成します。
リポジトリで、「アクション」タブに移動し、新しいカスタムワークフローを作成します。私はnodejs.yml
と呼んでいます。
リポジトリを更新して pm2 を再起動するための .yml ファイルは次のとおりです。
name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application
'your_project_directory' を必ず更新してください
最後に、これらの環境シークレットを追加する必要があります。REMOTE_HOST REMOTE_HOST
サーバーのIPアドレスです。REMOTE_USER REMOTE_USER
Amazon Linux 2 AMIのec2-user
です。次に、.pemファイルの内容をSSH_PRIVATE_KEY
として貼り付けます。
これらすべてをリポジトリ設定で実行できます。
これで完了です!やったー😁
これをすべてテストするには、「Hello World」メッセージを変更し、その変更をマスターブランチにプッシュします。その後、 http://your.ip.address:3000
で更新を確認できます。
設定には少し手間がかかりますが、開発時には、REST API サーバーに変更を自動的にデプロイする簡単な CI/CD パイプラインがあると非常に便利です。こうすることで、変更をライブですばやくデプロイし、Web/モバイル アプリケーションのフロントエンドで確認できます。
コメント欄で役に立ったかどうか教えてください。お読みいただきありがとうございました。
平和を祈る
— ウェス