paint-brush
GitHub と AWS EC2 を使用して CI/CD パイプラインを作成する方法@wesleybaxterhuber
758 測定値
758 測定値

GitHub と AWS EC2 を使用して CI/CD パイプラインを作成する方法

Wes Huber6m2024/04/30
Read on Terminal Reader

長すぎる; 読むには

このテクニックにより、EC2 サーバーは基本的に Github リポジトリにプッシュされた変更に応答できるようになります。
featured image - GitHub と AWS EC2 を使用して CI/CD パイプラインを作成する方法
Wes Huber HackerNoon profile picture

皆さん、こんにちは。今日は、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}`); });

http://localhost:3000/で「Hello World!」が表示されるかテストします。


よくできました。ステップ 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 インスタンスを起動する手順は次のとおりです。



  • 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 "[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 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 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/モバイル アプリケーションのフロントエンドで確認できます。


コメント欄で役に立ったかどうか教えてください。お読みいただきありがとうございました。


平和を祈る

— ウェス