Как развернуть приложение NestJS с помощью Nginx на Ubuntu VPS

0 Акции
0
0
0
0

Введение

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

Современные разработчики предпочитают использовать JavaScript как на фронтенде, так и на бэкенде. Express.js — отличный JavaScript-фреймворк, используемый большинством разработчиков. Однако его минималистичная архитектура делает его непригодным для масштабирования и поддержки большими командами. Именно здесь на помощь приходит Nest.js. Встроенная архитектура Nest.js делает его очень удобным для масштабирования и развёртывания. Кроме того, встроенная поддержка TypeScript делает его более удобным для разработчиков, чем чистый JavaScript.

В этом руководстве вы узнаете, как развернуть приложение NestJS с помощью веб-сервера Nginx на VPS. Вы также узнаете, как безопасно развернуть приложение в Интернете.

Предпосылки
  • Ubuntu 20.04+ VPS или физическая машина Ubuntu
  • Node.js и менеджер пакетов npm (или yarn).
  • Веб-сервер Nginx

Шаг 1 — Подготовка и развертывание приложения NestJS

В этом разделе вы установите CLI NestJS и создадите базовое приложение NestJS, а в следующих разделах узнаете, как развернуть его с помощью Nginx.

Установить NestJS CLI глобально

Чтобы установить NestJS CLI на ваш компьютер Ubuntu, откройте терминал и введите следующую команду.

npm i -g @nestjs/cli

Это установит интерфейс командной строки NestJS на ваш компьютер. Далее вы узнаете, как создать новый проект NestJS.

Создайте новый проект NestJS

NestJS теперь предлагает два способа начать новый проект. Вы можете выбрать наиболее подходящий для вас.

Чтобы создать проект NestJS с помощью CLI, введите следующую команду.

nest new <project-name>
Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm 
yarn 
pnpm

После завершения вы получите следующий вывод.

OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)

Это создаст новый проект в текущем рабочем каталоге. Вместо этого вы можете использовать ; Укажите также абсолютный путь к другому каталогу.

Моделирование начального шаблона

NestJS предоставляет альтернативный способ начать новый проект. Это Git-репозиторий, который служит шаблоном. Вы можете клонировать этот репозиторий и запустить проект с помощью следующих команд.

git clone https://github.com/nestjs/typescript-starter.git <project-directory >

После завершения клонирования вам необходимо перейти в каталог проекта, а затем запустить npm install, чтобы установить зависимости из package.json.

cd <project-directory>
npm install

Когда проект будет готов, вы можете запустить сервер приложений с помощью следующей команды:

npm run start

Приложение запустится по адресу http://localhost:3000. Теперь у вас есть базовое приложение NestJS, готовое к запуску на локальном хосте.

Тестирование приложений

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

npm run test

Эта программа проверит вас и покажет результаты, похожие на следующие:

Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.

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

Шаг 2. Настройка Nginx для обслуживания приложения NestJS

Теперь мы можем перейти к настройке веб-сервера для размещения приложения NestJS. Мы будем использовать подход с обратным прокси-сервером. В этом подходе мы запускаем наше приложение на локальном хосте на определённом порту, а затем используем сервер Nginx для проксирования любых запросов к публичному IP-адресу или домену VPS к приложению на локальном хосте. Использование обратных прокси-серверов — распространённая практика, поскольку оно повышает безопасность веб-сервера, создавая барьер между входящими запросами и самим бэкенд-приложением. Кроме того, обратные прокси-серверы позволяют лучше управлять нагрузкой на сервер, особенно если на нём размещается несколько веб-приложений.

Устанавливаем менеджер пакетов pm2 Начнем с того, который управляет программой во время выполнения.

Установить менеджер процессов pm2

Для открытия менеджера процессов можно использовать следующую команду. pm2 Установить.

npm install -g pm2

С этой работой pm2 Он устанавливается глобально на вашем устройстве.

Создание конфигурации Nginx для приложения NestJS

Теперь настройте Nginx для запуска приложения. Как упоминалось в руководстве по предварительным требованиям, убедитесь, что вы разрешили приложению Nginx протоколы HTTP и HTTPS в вашем брандмауэре. Если вы используете брандмауэр UFW, вы можете сделать это, следуя инструкциям.

ufw enable
ufw allow ‘Nginx Full‘

Теперь создадим блок конфигурации для нашего приложения NestJS. Рекомендуется создавать новые блоки конфигурации для новых приложений, а не редактировать настройки по умолчанию. Чтобы создать блок, введите следующий код в терминал.

sudo nano /etc/nginx/sites-available/your_domain

Здесь мы использовали your_domain для приложения, но вам нужно заменить его на имя вашего приложения. Затем в редакторе введите следующий код:

server {
server_name your_domain www.your_domain;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Теперь создайте символическую ссылку, которая сообщит Nginx о необходимости поиска доступных веб-приложений в папке sites-available:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Также необходимо отключить ссылку по умолчанию, иначе nginx будет перенаправлять все запросы на сайт по умолчанию. Для отключения ссылки используйте следующую команду.

sudo unlink /etc/nginx/sites-enabled/default

Теперь перезапустите службу Nginx с помощью следующей команды.

sudo systemctl restart nginx
Развертывание приложения NestJS с использованием Nginx

Теперь запустите менеджер пакетов pm2 для управления выполнением вашего приложения NestJS. Измените рабочий каталог на каталог вашего приложения NestJS и введите следующую команду.

pm2 start npm --name "your_domain" – start

Вы можете выполнить следующую команду, чтобы настроить запуск pm2 при перезапуске сервера.

pm2 startup

После завершения настройки программы в pm2 сохраните список процессов pm2 следующим образом:

pm2 save

Теперь мы настроили веб-приложение на запуск при загрузке и настроили Nginx на обратный прокси-сервер для нашего приложения, работающего на локальном хосте.

Тестирование веб-приложений

Вы можете протестировать веб-приложение из консоли, введя следующую команду.

curl http://localhost

Поскольку мы настроили обратный прокси-сервер на IP-адрес самого сервера, любой запрос к публичному IP-адресу сервера, домену или запрос к локальному хосту от сервера будет перенаправлен в приложение. NestsJS ваш_домен Он управляемый.

OutputHello World!

В следующем разделе вы научитесь добавлять SSL в свое приложение, что позволит вам использовать протокол HTTPS для ваших запросов.

Шаг 3 — Добавьте SSL с помощью Let's Encrypt (необязательно)

Итак, вы узнали, как развернуть полнофункциональное приложение NestJS с помощью сервера Nginx. Однако в этом развёртывании используется протокол HTTP, который не рекомендуется использовать в рабочей среде из-за уязвимостей, связанных с эксплойтами. Поэтому вам необходимо перейти на протокол HTTPS, представляющий собой зашифрованную версию HTTP. HTTPS использует сертификаты SSL/TLS, выданные Центром сертификации. Эти сертификаты предназначены для конкретного веб-сайта и шифруют данные, передаваемые между клиентом и сервером.

Установить Let's Encrypt Certbot CLI

Let's Encrypt предоставляет интерфейс командной строки (CLI) для управления и автоматизации SSL-сертификатов для потребителей. Вы можете установить инструмент с помощью следующей команды:

sudo apt install certbot python3-certbot-nginx

Это установит клиент certbot на ваш Ubuntu VPS.

Получите сертификаты SSL/TLS для вашего домена

Теперь вы можете получить SSL-сертификаты для своего домена с помощью следующей команды

sudo certbot --nginx -d <your_domain> -d <www.your_domain>

Вы должны ваш_домен Замените certbot вашим реальным доменным именем. Если вы впервые запускаете certbot на вашем VPS, вам будет предложено ввести адрес электронной почты и принять условия использования. Введите необходимую информацию и продолжите.

После установки сертификатов вы сможете перенаправлять все запросы на HTTPS. Рекомендуется перенаправлять все запросы для обеспечения целостности вашего сайта.

Результат

В этом руководстве вы узнали, как развернуть приложение NestJS с помощью веб-сервера Nginx на Ubuntu VPS в рабочей среде. Вы также узнали, как настроить проект NestJS и обратный прокси-сервер для вашего приложения с помощью Nginx. Наконец, вы узнали, как добавить сертификаты SSL/TLS для домена вашего сервера и обеспечить целостность данных между клиентами и сервером.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться

Программное обеспечение для автоматического отключения VPN

Что такое программное обеспечение для автоматического отключения VPN? Программное обеспечение для автоматического отключения VPN — это передовая мера безопасности, которая…

Как установить IBSng на CentOS 6/7

Руководство по установке IBSng на CentOS 6/7 В этой статье приведено руководство по установке IBSng на CentOS 6/7, которое поможет вам…

Как войти на сервер Windows через удаленный рабочий стол

Как подключиться к серверу Windows через удалённый рабочий стол. Программное обеспечение для подключения к удалённому рабочему столу предоставляется бесплатно во всех версиях…