皆さん、こんにちは。今日は、NodeJS/Express を使用して Amazon EC2 サーバーにクイック REST API をデプロイする私のお気に入りの方法の 1 つについてチュートリアルをしたいと思います。この手法により、基本的に EC2 サーバーは GitHub リポジトリにプッシュされた変更に応答できるようになります。 まずは「Hello World」 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}`); }); で「Hello World!」が表示されるかテストします。 http://localhost:3000/ よくできました。ステップ 1 が完了しました! 💪 次に、コードをGitHubにプッシュしましょう ディレクトリ内の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 インスタンスを起動する手順は次のとおりです。 にログインします。 AWS マネジメントコンソール EC2 ダッシュボードに移動し、新しいインスタンスを起動します。 適切な AMI (Amazon マシンイメージ) を選択します。私は Amazon Linux 2 を使用しています。 インスタンス タイプを選択します (例: 無料利用枠内であれば t2.micro)。 必要に応じてインスタンスの詳細を設定し、ストレージを追加し、タグを追加します。 必要なポート (SSH とアプリケーションのポートの場合は少なくとも TCP ポート 22、Web トラフィックの場合は 3000) で受信トラフィックを許可するようにセキュリティ グループを構成します。 インスタンスを確認して起動します。SSH アクセスに使用するキー ペアを必ず保存してください。 次に、ターミナルで 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 "your.email@example.com" さて、 フォルダーがまだ存在しない場合は作成します。 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] を独自の値に置き換えます。 次に、ディレクトリをリポジトリに変更し、 pm2 セットアップ用の ファイルを作成します。 cd YOUR_PROJECT_DIRECTORY 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 のドキュメントは 読むことができます。 pm2 status ここで ここまで来たら、あなたはスーパースターです⭐️ GitHub Actionsとの統合 これはプロセスの最後のステップです。マスターブランチに変更がプッシュされるたびにサーバーを更新するための 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 サーバーのIPアドレスです。REMOTE_USER Amazon Linux 2 AMIの です。次に、.pemファイルの内容を として貼り付けます。 REMOTE_HOST REMOTE_USER ec2-user SSH_PRIVATE_KEY これらすべてをリポジトリ設定で実行できます。 これで完了です!やったー😁 これをすべてテストするには、「Hello World」メッセージを変更し、その変更をマスターブランチにプッシュします。その後、 で更新を確認できます。 http://your.ip.address:3000 設定には少し手間がかかりますが、開発時には、REST API サーバーに変更を自動的にデプロイする簡単な CI/CD パイプラインがあると非常に便利です。こうすることで、変更をライブですばやくデプロイし、Web/モバイル アプリケーションのフロントエンドで確認できます。 コメント欄で役に立ったかどうか教えてください。お読みいただきありがとうございました。 平和を祈る — ウェス