Як розгорнути 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;
NodeJS Локальна Розробка на Порту 5000
Продукційний Режим
Продукційний режим працюватиме на стандартному порту 80
і матиме NODE_ENV=production
, щоб додаток і його залежності могли скористатися цією позначкою для надання найбільш оптимізованого коду.
Запустіть наступне:
yarn start;
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;
Продукція 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
Консоль керування AWS
Натискайте Створити додаток.
Послуги Elastic Beanstalk
Додайте конфігурації:
Конфігурація AWS Elastic Beanstalk — Частина 1 з 3
Конфігурація AWS Elastic Beanstalk — Частина 2 з 3
Переконайтеся, що ви вибрали ваш щойно створений файл Archive.zip
для Local File для завантаження, потім натискайте Створити додаток.
Конфігурація AWS Elastic Beanstalk — Частина 3 з 3
Чекання на створення та розгортання
Це може зайняти кілька хвилин, і можливо, доведеться оновити сторінку.
AWS Elastic Beanstalk будує та розгортає код
Після того як розгортання завершиться, ви побачите таку картину:
AWS Elastic Beanstalk успішно розгорнуто
Натискайте, щоб відкрити URL додатка.
Ex: DockerNodeTsApp.env…elasticbeantaslk.com **[↗]**
🎉Ваш Docker NodeJS TypeScript додаток розгорнутий на AWS Elastic Beanstalk
У разі помилки
Так, я знаю, іноді технології можуть підвести нас.
Існують випадки, коли ви можете отримати помилку, і збірка може не вдатися, навіть з першого разу. Це може бути пов'язано з вашим кодом, але якщо ви виконали кроки, цього не повинно було статися.
У разі такого сценарію, ви можете просто Перебудувати додаток.
У верхньому правому куті натисніть Дії > Перебудувати середовище.
Помилка побудови AWS Elastic Beanstalk
Вам буде запропоновано модальне вікно, натисніть Перебудувати.
Перебудова середовища 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