Введение
Современные веб-приложения нуждаются в надежной и безопасной поддержке. Поэтому крайне важно создавать масштабируемые, безопасные и архитектурно сложные приложения, которые могли бы управляться как небольшими, так и большими командами разработчиков.
Современные разработчики предпочитают использовать 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 для домена вашего сервера и обеспечить целостность данных между клиентами и сервером.









