Процес розгортання NodeJS TypeScript за допомогою Docker на AWS EBS

pic
Як розгорнути TypeScript NodeJS додаток з Docker на Amazon Web Service Elastic Beanstalk

Чому

Я не буду заглиблюватись у переваги TypeScript, тому припускаю, що у вас вже є NodeJS TypeScript додаток, який ви хочете упакувати в Docker-образ і розгорнути на хостинг-сервісі, що підтримує Docker.

Docker — ось головна причина.

Docker є головною причиною налаштування нашого додатку, тому що він дає нам більше контролю над Linux-середовищем, тим, що встановлено, що воно може робити, і не залежати від налаштувань Linux-боксу, наданого хостингом.

Що ми досягнемо

Це покроковий посібник по розгортанню Docker-образу NodeJS TypeScript на AWS Beanstalk.
Не соромтеся пропускати деякі розділи та використовувати цю статтю за потребою.

Ми розглянемо написання простого API на NodeJS TypeScript, написання оптимізованого Dockerfile з NodeJS Alpine і розгортання цього коду на AWS Elastic Beanstalk.

Вимоги

  • NMV або NodeJS 12.13.08
  • (Опціонально) Yarn
  • Docker Desktop

NodeJS Додаток

Ініціалізація Git

Ми припускаємо, що ви використовуєте git для цього нового проекту.

git init

Створіть новий файл .gitignore

touch .gitignore;

Файл: ./.gitignore

Налаштування Версії Node

echo "12.18.0" > .nvmrc;

Потім використовуйте цю версію за допомогою:

nvm install;  
nvm use 12.18.0;

Встановлення Залежностей Пакетів

Далі ми встановимо залежності для основних і розробницьких потреб.

Основні Залежності

yarn add express cors typescript ts-node [@types/express](http://twitter.com/types/express) @types/node [@types/cors](http://twitter.com/types/cors);

Розробницькі Залежності

yarn add -D eslint prettier ts-node-dev [@typescript](http://twitter.com/typescript)-eslint/parser [@typescript](http://twitter.com/typescript)-eslint/eslint-plugin

Синтаксис IDE та Форматування

Тут ми зосередимось на форматуванні нашого коду, підсвітці синтаксису та автоформатуванні.

Налаштування Visual Studio Code

Якщо ви використовуєте Visual Studio Code, створіть файл налаштувань для автозбереження.

mkdir .vscode;  
echo "{\n\"editor.formatOnSave\": true,\n\"editor.formatOnType\": true,\n\"editor.formatOnPaste\": true\n}" > .vscode/settings.json;

Файл ESlint

touch .eslintrc.js;

Файл: ./.eslintrc.js

Файл Prettier

Це мої особисті налаштування, тому відредагуйте за потребою.

touch .prettierrc.js

Файл: ./.prettierrc.js

Конфігураційний Файл TypeScript

Це базова конфігурація для TypeScript, але вам буде потрібно налаштувати її пізніше залежно від потреб вашого додатку.

touch tsconfig.json

Файл: ./tsconfig.json

Налаштування Пакетних Скриптів

Додайте наступні два нові рядки для "scripts"

Файл: ./package.json

Основний Файл Додатку

mkdir src;  
touch src/index.ts;

Файл: ./src/index.ts

Тестування Нашого Додатку

Режим Розробки

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

Запустіть наступне:

yarn dev;

pic

NodeJS Локальна Розробка на Порту 5000

Продукційний Режим

Продукційний режим працюватиме на стандартному порту 80 і матиме NODE_ENV=production, щоб додаток і його залежності могли скористатися цією позначкою для надання найбільш оптимізованого коду.

Запустіть наступне:

yarn start;

pic

NodeJS Продукція на Порту 80

Створення Dockerfile

Створіть новий Dockerfile і додайте нижче наведений код:

touch Dockerfile;

Файл: ./Dockerfile

Створення Docker Ignore Файлу

Цей файл потрібен, щоб переконатися, що ми не імпортуємо node модулі та інші файли у Docker збірку.

touch .dockerignore

Файл: ./.dockerignore

Тестування Dockerfile

Ця частина вимагає, щоб у вас був встановлений Docker Desktop, і ми перевіримо, чи створюється наш новий Dockerfile без помилок.

Створення Docker-образу

docker build .  

-t mynodetsapp

Запуск контейнера

docker run -it -d -p 5001:80 --name nodeapp mynodetsapp;

pic

Продукція Docker NodeJS на Порту 5001, відображений на Порт 80

Не забудьте видалити контейнер після того, як завершите тестування.

docker rm -f mynodetsapp

Пакування файлів для розгортання

Ви помітите, що ми не будемо використовувати Docker Hub для завантаження або отримання зображень, тому що я не вірю, що AWS має спосіб отримати з Docker Hub.

Якщо хтось знає, як отримати з Docker Hub з будь-якої служби AWS, буду радий дізнатись у коментарях або надішліть мені твіт.

rm -rf node_modules;  
zip -r Archive.zip ./;

Коміт коду до Git

Не забудьте здійснити коміт вашого коду в GitHub і вам, можливо, доведеться додати рядок до вашого .gitignore для Archive.zip або

Файл: .gitignore

*.zip

Розгортання на AWS

Створення додатку на Elastic Beanstalk

Увійдіть, щоб перейти до: https://console.aws.amazon.com/console/home

pic

Консоль керування AWS

Натискайте Створити додаток.

pic

Послуги Elastic Beanstalk

Додайте конфігурації:

pic

Конфігурація AWS Elastic Beanstalk — Частина 1 з 3

pic

Конфігурація AWS Elastic Beanstalk — Частина 2 з 3

Переконайтеся, що ви вибрали ваш щойно створений файл Archive.zip для Local File для завантаження, потім натискайте Створити додаток.

pic

Конфігурація AWS Elastic Beanstalk — Частина 3 з 3

Чекання на створення та розгортання

Це може зайняти кілька хвилин, і можливо, доведеться оновити сторінку.

pic

AWS Elastic Beanstalk будує та розгортає код

Після того як розгортання завершиться, ви побачите таку картину:

pic

AWS Elastic Beanstalk успішно розгорнуто

Натискайте, щоб відкрити URL додатка.

Ex: DockerNodeTsApp.env…elasticbeantaslk.com **[↗]**

pic

🎉Ваш Docker NodeJS TypeScript додаток розгорнутий на AWS Elastic Beanstalk

У разі помилки

Так, я знаю, іноді технології можуть підвести нас.

Існують випадки, коли ви можете отримати помилку, і збірка може не вдатися, навіть з першого разу. Це може бути пов'язано з вашим кодом, але якщо ви виконали кроки, цього не повинно було статися.
У разі такого сценарію, ви можете просто Перебудувати додаток.

У верхньому правому куті натисніть Дії > Перебудувати середовище.

pic

Помилка побудови AWS Elastic Beanstalk

Вам буде запропоновано модальне вікно, натисніть Перебудувати.

pic

Перебудова середовища AWS Elastic Beanstalk

Код Проекту

[

codingwithmanny/nodets-docker-app

Зробіть свій внесок у розробку codingwithmanny/nodets-docker-app, створивши акаунт на GitHub.

github.com

](https://github.com/codingwithmanny/nodets-docker-app/tree/branch/elastic-beanstalk?source=post_page-----14796cd78392--------------------------------)

Що Далі

Наступний крок — автоматизація процесу розгортання за допомогою AWS CodePipeline, який забере наш код з Git репозиторію і автоматично розгорне його на Elastic Beanstalk.

̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̵I̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵’̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵l̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵l̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵b̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵w̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵r̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵i̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵i̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵n̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵g̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵h̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵i̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵n̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵x̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵p̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵o̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵o̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵n̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵,̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵o̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵m̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵a̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵k̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵u̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵r̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵o̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵c̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵h̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ck̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵b̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵a̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵c̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵k̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵w̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵h̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵e̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵n̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵i̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵t̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵’̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵s̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵ ̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵u̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵p̵̶̵̴̵̶̵̶̵̶̵̴̵̶̵. Ось наступна частина:

[

Автоматизація розгортання NodeJS TS за допомогою CodePipeline на Elastic Beanstalk

Налаштування безперервного розгортання з AWS CodePipeline на Elastic Beanstalk Docker

medium.com

](https://medium.com/@codingwithmanny/automating-nodejs-ts-deployments-with-codepipeline-to-elastic-beanstalk-79664321ab91?

Перекладено з: NodeJS TypeScript Docker Deployment Process With AWS EBS

Leave a Reply

Your email address will not be published. Required fields are marked *