Привет всем, сегодня я хочу провести руководство по одному из моих любимых способов развертывания быстрого 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/
Хорошая работа, первый шаг завершен! 💪
Инициализируйте репозиторий 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 и запустите новый экземпляр.
Выберите подходящий AMI (образ машины Amazon); Я использую Amazon Linux 2.
Теперь давайте проверим вход на ваш сервер через 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 здесь
Если вы зашли так далеко, вы суперзвезда ⭐️
Это последний шаг в нашем процессе. Мы собираемся создать файл .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. Таким образом, вы можете быстро развернуть изменения в реальном времени и увидеть их во внешнем интерфейсе вашего веб-/мобильного приложения.
Дайте мне знать, если это было полезно в комментариях, и спасибо за чтение!!
Мир,
— Уэс