С последних нескольких месяцев я занимаюсь развертыванием мелких вещей в облаке. Я хочу повысить уровень своей игры и получить некоторый опыт помимо разработки веб-сайтов.

Мне удалось развернуть некоторые из моих личных сайтов с помощью Google Firebase, бессерверных приложений с помощью Zeit Now и немного от AWS Lambda. Было действительно весело наблюдать, как ваши приложения попадают в облако!

Я не очень хорош в этом, я просто слежу за некоторыми материалами в Интернете, но если вам нужна помощь, а также новичок в этом. Ударь меня и давай поболтаем. Мне очень хотелось бы! 👋 ❤️

Достаточно с предысторией, и давайте развернем наше первое приложение NestJS в AWS EC2. Отправляемся в путешествие!

Что такое AWS EC2?

AWS EC2 - это сервис, предоставляемый Amazon для развертывания приложений с использованием их виртуальных машин, к которым вы можете подключиться.

Если вы разработчик, который хочет управлять конфигурациями компьютеров, ценными бумагами или сетями, вы можете поиграть с этим сервисом.

Давайте запачкаем руки

Для начала вам необходимо войти в консоль управления AWS.

Когда вы находитесь в Консоли управления AWS, вы увидите список доступных сервисов.

Выберите EC2 в разделе Вычислительные службы .

После нажатия на службу вы будете перенаправлены на страницу EC2 Dashboard, где увидите кнопку с надписью «Запустить экземпляр». Эта кнопка будет ответственна за создание нашего экземпляра, нашей виртуальной машины.

На следующей странице мы будем выбирать наши виртуальные машины. На самом деле я не эксперт в этом, но то, что я сделал, было решено моей интуицией 😅

Поскольку я хорошо разбираюсь в командных строках машины Linux и считаю, что эта виртуальная машина подходит для моих нужд, я выбрал этот пункт.

Поскольку наша цель - развернуть приложение NestJS, я думаю, что этот зверь уже способен развернуть его на основе описания и для моей окончательной супер-бесплатной учетной записи.

Переходя к следующим шагам, я действительно не знаю, что это такое, просто нажимаю кнопку «Далее» и останавливаюсь на шаге 6, который называется «Настроить группу безопасности».

На этом экране я включил имя приложения (my-nest-application) в имя группы безопасности и Описание.

Первая строка в таблице имеет тип SSH, я выбрал Источник - где угодно.

Я знаю, что нельзя разрешать выбор где угодно, потому что это означает, что вы можете использовать SSH и иметь доступ к своей виртуальной машине где угодно и даже в незащищенной сети. Остерегайтесь последствий.

Во второй строке перемещается настраиваемый TCP с портом 3000, поскольку наше приложение NestJS использует порт 3000. Я снова выбрал где угодно в качестве источника, потому что хочу, чтобы мое приложение было доступно где угодно. Для меня это сделано намеренно, в отличие от источника SSH.

Теперь мы ближе к финишу! Приступим к запуску этой виртуальной машины!

Вот наша окончательная конфигурация:

После нажатия кнопки Запустить нам будет предложено выбрать или создать новую пару ключей, которую мы можем использовать при доступе к нашей виртуальной машине через SSH .

Введите любое имя пары ключей по вашему выбору и нажмите Загрузить пару ключей. Он загрузит pem файл, и вам необходимо его надежно сохранить! Подальше от воров!

Даже если мы некоторое время назад выберем где угодно из источника SSH, мы не сможем получить к нему доступ без этого ключа при использовании SSH.

Запустим экземпляр! 🚀

Если мы вернемся в нашу Консоль управления AWS, нажмите Экземпляры на левой панели. Теперь мы видим, что наш экземпляр запущен. Yahoo!

Теперь, когда наш экземпляр запущен. Давайте сделаем небольшой перерыв в Консоли управления AWS и настроим, как мы можем получить к ней доступ через SSH. Вы готовы? Пойдем!

Откройте свой терминал и проверьте, установлен ли у вас SSH, набрав `ssh`. Если он еще не установлен для вас, сначала установите его.

У пользователей MacOS уже есть предустановленный SSH-клиент. Не уверен насчет других операционных систем.

Я сказал вам, что у нас будет небольшой перерыв в Консоли управления AWS, но время прошло! Нам нужно вернуться и взять что-то действительно важное, чтобы мы могли подключиться к нашему экземпляру.

В Консоли управления AWS скопируйте общедоступный DNS, так как это будет наш способ подключения к нашему экземпляру.

Затем вернемся к нашему терминалу, мы сделаем это для подключения:

ssh -v -i /Users/jsantos/Downloads/my-nest-application.pem ec2-user@ec2–18–188–20–76.us-east-2.compute.amazonaws.com
  • -v - это флаг для отображения журналов при запуске команды (не требуется)
  • -i - это флаг, указывающий, где находится pem-ключ (обязательно)

URL-адрес SSH будет примерно таким:

ec2-user@[Public DNS]
  • ec2-user @ - имя пользователя для некоторых машин AWS Linux (Amazon Linux 2 или Amazon Linux AMI). Мы используем Amazon Linux AMI.

Выполнив команду, мы получим сообщение об ошибке Разрешение 0644:

Permissions 0644 for '/Users/jsantos/Downloads/my-nest-application.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/jsantos/Downloads/my-nest-application.pem": bad permissions
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).

После нескольких минут поиска ответа по этой ссылке StackOverflow говорится, что мы можем легко исправить это, выполнив команду chmod для изменения разрешений. Для этого нам нужно набрать следующую команду:

chmod 400 /Users/jsantos/Downloads/my-nest-application.pem

Это установит разрешение на чтение для текущего вошедшего в систему пользователя.

После изменения разрешения мы теперь можем повторно выполнить предыдущую команду в терминале.

Теперь мы видим, что мы связаны! Потрясающе 🎉

Ссылка: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Теперь, когда мы подключены, и поскольку это не идет с Node.js. Нам нужно будет его установить.

Мы можем установить Node.js с помощью диспетчера версий узлов (NVM), набрав следующую команду:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

После завершения установки давайте активируем NVM, введя следующую команду:

. ~/.nvm/nvm.sh

Точка (.) В начале обязательна, поскольку это ярлык для регистрации чего-либо в терминале. Это также сокращение от source ~/.nvm/nvm.sh.

После регистрации мы теперь можем установить Node с любой другой версией по нашему выбору. Вы можете увидеть больше здесь. На данный момент мы установим последнюю доступную версию, введя следующую команду:

nvm install node

Убедитесь, что Node.js установлен, введя следующую команду:

node -v 

Вы должны увидеть что-то вроде этого:

Теперь, когда мы настроили наш Node.js. В нашем экземпляре пока нет Git. Мы можем быстро установить его, набрав следующие команды:

# Perform a quick update on your instance:
sudo yum update -y
# Install git in your EC2 instance
sudo yum install git -y

Ссылка: https://cloudaffaire.com/how-to-install-git-in-aws-ec2-instance/

Теперь мы можем начать клонирование нашего репозитория.

Репозиторий, который мы будем использовать, - это Typescript Starter, предоставленный командой NestJS. Давайте начнем клонирование репозитория, набрав следующую команду:

git clone https://github.com/nestjs/typescript-starter

После клонирования репозитория давайте войдем в папку и установим зависимости, набрав следующую команду:

cd typescript-starter && npm install

После завершения установки зависимостей давайте создадим наше приложение, введя следующую команду:

npm run build

После его создания давайте запустим его в производственном режиме!

npm run start:prod

Теперь, когда наше приложение, наконец, запущено, мы можем протестировать его в браузере и посмотреть, сможем ли мы получить к нему доступ!

Но что это за URL?

Нам нужно вернуться в нашу Консоль управления AWS, затем перейти в раздел Экземпляры и щелкнуть наш экземпляр в таблице. Сделав это, мы увидим детали экземпляра, детали нашей виртуальной машины, и нам нужно скопировать общедоступный IP-адрес IPv4.

Таким образом, в этом случае доступ к нему можно получить по URL-адресу

http://18.188.20.76:3000

После ввода этого сообщения в браузере мы должны увидеть самое интересное сообщение, которое нам нужно.

Поздравляем! Мы развернули наше приложение NestJS в AWS EC2 🎉