paint-brush
Как создать конвейер CI/CD с помощью GitHub и AWS EC2к@wesleybaxterhuber
1,385 чтения
1,385 чтения

Как создать конвейер CI/CD с помощью GitHub и AWS EC2

к Wes Huber6m2024/04/30
Read on Terminal Reader

Слишком долго; Читать

Этот метод, по сути, позволяет вашему серверу EC2 реагировать на изменения, передаваемые в ваш репозиторий Github.
featured image - Как создать конвейер CI/CD с помощью GitHub и AWS EC2
Wes Huber HackerNoon profile picture

Привет всем, сегодня я хочу провести руководство по одному из моих любимых способов развертывания быстрого REST API с использованием NodeJS/Express на сервере Amazon EC2. Этот метод, по сути, позволяет вашему серверу EC2 реагировать на изменения, передаваемые в ваш репозиторий GitHub.

Прежде всего, «Привет, мир!»

Создайте новый каталог на своем компьютере для размещения приложения NodeJS/Express. Я зову свое rekognition


Откройте терминал и запустите эту команду, чтобы инициализировать package.json 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/


Хорошая работа, первый шаг завершен! 💪

Далее, давайте отправим наш код на GitHub.

Инициализируйте репозиторий Git в своем каталоге и сделайте первый коммит —

 git init git add . git commit -m "First commit"


Создайте удаленный репозиторий в своей учетной записи GitHub.

Добавьте новый репозиторий в качестве источника и нажмите свою ветку.

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


Замените <REMOTE_REPOSITORY_URL> ссылкой на только что созданный удаленный репозиторий.


Возможно, вам придется изменить настройки вашего репозитория, чтобы использовать в качестве ветки по умолчанию «главную» вместо «основной».

После этого вы можете удалить «основную» ветку.


Шаг 2: завершено! Готовим на газу ⛽️

Перейдем в облако — настройка сервера Ec2

Вот шаги для запуска вашего экземпляра EC2:



  • Перейдите на панель управления EC2 и запустите новый экземпляр.

  • Выберите подходящий AMI (образ машины Amazon); Я использую Amazon Linux 2.


  • Выберите тип экземпляра (например, t2.micro, если вы находитесь на уровне бесплатного пользования).


  • Настройте детали экземпляра, добавьте хранилище и при необходимости добавьте теги.


  • Настройте группу безопасности, чтобы разрешить входящий трафик через необходимые вам порты (по крайней мере TCP-порт 22 для SSH и порт вашего приложения, а затем 3000 для веб-трафика).


  • Просмотрите и запустите экземпляр; убедитесь, что вы сохранили пару ключей, используемую для доступа по SSH.


Теперь давайте проверим вход на ваш сервер через SSH на терминале:

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


Замените там переменные значениями, которые вы определили для своего экземпляра EC2.

Если вы видите это, вы подключились к своему серверу, поздравляем! 👏

Но мы еще не закончили — мы только начинаем 😏

Давайте установим NodeJS на наш сервер:
sudo yum install -y nodejs


Установите pm2 глобально на нашем сервере через npm.

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:

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 мог создать файл ecosystem.config.js для нашей установки pm2:

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


Теперь мы можем проверить, есть ли у нас сообщение «Hello World!». с нашего сервера через порт 3000:

Чтобы pm2 запускался автоматически при перезагрузке сервера, давайте запустим:

 pm2 save pm2 startup

Чтобы проверить, работает ли ваш сервер, вы можете выполнить команду pm2 status ; вы можете прочитать документацию на pm2 здесь


Если вы зашли так далеко, вы суперзвезда ⭐️

Интеграция с действиями GitHub

Это последний шаг в нашем процессе. Мы собираемся создать файл .yml для действий Github, чтобы обновлять наш сервер каждый раз, когда изменения передаются в нашу главную ветку.

В своем репозитории перейдите на вкладку «Действия» и создайте новый собственный рабочий процесс. Я вызываю свой nodejs.yml


Вот файл .yml для обновления репозитория и перезапуска pm2:

 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

Обязательно обновите «ваш_каталог_проекта»


Наконец, вам нужно будет добавить эти секреты среды. REMOTE_HOST — это IP-адрес вашего сервера; REMOTE_USER — это ec2-user для Amazon Linux 2 AMI, а затем вставьте содержимое вашего файла .pem в качестве SSH_PRIVATE_KEY


Все это можно сделать в настройках репозитория:

Вот и все! Мы закончили, ура 😁


Вы можете проверить все это, изменив сообщение «Hello World» и отправив это изменение в свою главную ветку; то вы должны увидеть обновление по http://your.ip.address:3000


Это довольно сложный процесс настройки, но когда вы занимаетесь разработкой, очень приятно иметь простой конвейер CI/CD, автоматически развертывающий изменения на вашем сервере REST API. Таким образом, вы можете быстро развернуть изменения в реальном времени и увидеть их во внешнем интерфейсе вашего веб-/мобильного приложения.


Дайте мне знать, если это было полезно в комментариях, и спасибо за чтение!!


Мир,

— Уэс