Создание и запуск проекта NestJS локально на macOS с помощью ServBay
NestJS — это прогрессивный фреймворк для Node.js, предназначенный для создания эффективных и масштабируемых серверных приложений на платформе Node.js. Он написан на TypeScript, вдохновлён архитектурой Angular и реализует модульный подход и шаблон внедрения зависимостей (DI). NestJS предоставляет мощные инструменты и функционал для быстрой разработки поддерживаемых, тестируемых и слабо связанных сложных приложений.
Основные особенности и преимущества NestJS
- Модульная архитектура: код организован по модулям, что делает приложение структурированным и простым для понимания и сопровождения.
- Внедрение зависимостей: удобная и мощная система DI значительно повышает тестируемость и сопровождаемость кода.
- Использование TypeScript: статическая типизация, интерфейсы и современные возможности JavaScript улучшают качество кода и ускоряют разработку, снижая количество ошибок на этапе выполнения.
- Богатая система декораторов: использование декораторов для описания контроллеров, сервисов, модулей помогает делать код компактным, декларативным и легко читаемым.
- Развитая экосистема: активное сообщество и множество сторонних модулей и плагинов позволяют быстро интегрировать TypeORM, Mongoose, GraphQL, WebSockets, кэш, валидацию и другие популярные решения.
- Основывается на стандартах: построен на базе надёжных HTTP-серверов Express или Fastify, что обеспечивает совместимость и высокую производительность.
Используя NestJS, разработчики могут применять лучшие практики бэкенд-разработки (например, принципы SOLID, шаблоны проектирования) для быстрой и удобной реализации высокопроизводительных корпоративных веб-приложений, API и микросервисов.
Создание и запуск проекта NestJS с помощью ServBay
ServBay — это мощная интегрированная веб-среда для локальной разработки на macOS, включающая различные версии Node.js, популярные базы данных и веб-серверы. В этом руководстве мы воспользуемся Node.js средой ServBay и функцией «Сайты» для создания, запуска и настройки проекта NestJS. Благодаря функции обратного прокси сервера, вы сможете открывать локальное приложение NestJS по настраиваемому доменному имени.
Предварительные требования
Перед тем как начать, убедитесь, что выполнены следующие условия:
- Установлен ServBay: ServBay уже успешно инсталлирован на вашем macOS.
- Включён пакет Node.js: В панели управления ServBay на вкладке «Пакеты» активируйте необходимую версию Node.js. Если Node.js ещё не включён, следуйте руководству по настройке Node.js в ServBay.
Создание проекта NestJS
Глобальная установка NestJS CLI
Откройте Терминал и с помощью npm (идет в комплекте с Node.js) установите NestJS CLI глобально. NestJS CLI — это мощный инструмент для инициализации, разработки и сопровождения приложений на NestJS.
bashnpm install -g @nestjs/cli
1Инициализация проекта
Перейдите в рекомендуемую корневую папку сайтов ServBay:
/Applications/ServBay/www
. Это стандартное место размещения сайтов в ServBay, что упростит дальнейшую настройку сайта. Затем создайте новый проект с помощью NestJS CLI:bashcd /Applications/ServBay/www nest new servbay-nest-app
1
2После выполнения команды CLI предложит выбрать менеджер пакетов (npm, yarn или pnpm). Рекомендуется выбрать npm для единообразия. Проект будет создан в папке
/Applications/ServBay/www/servbay-nest-app
.Установка зависимостей
Перейдите в только что созданную папку проекта
servbay-nest-app
и установите необходимые зависимости:bashcd servbay-nest-app npm install
1
2Обычно команда
nest new
уже запускаетnpm install
, но повторное выполнение поможет убедиться, что все зависимости установлены или обновлены.
Изменение содержимого вывода NestJS (необязательно)
Чтобы проверить работоспособность сайта через ServBay, можно изменить стандартный ответ корневого маршрута приложения.
Редактирование файла
src/app.controller.ts
Откройте файл
src/app.controller.ts
в любимом редакторе кода. Измените его содержимое следующим образом, чтобы при обращении к корню (/
) возвращалась строка "Hello ServBay!":typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // Предполагается, что AppService сохранён @Controller() export class AppController { constructor(private readonly appService: AppService) {} // При наличии AppService @Get() getHello(): string { // return this.appService.getHello(); // Для варианта с AppService return 'Hello ServBay!'; // Возвращается заданная строка напрямую } }
1
2
3
4
5
6
7
8
9
10
11
12
13Этот код реализует простой контроллер, который обрабатывает GET-запросы к корневому маршруту (
/
) и возвращает заданную строку.
Запуск проекта NestJS в режиме разработки и доступ через ServBay
Обычно проекты NestJS запускаются в режиме разработки на встроенном сервере, который слушает определённый порт. Далее с помощью функции «Сайты» в ServBay можно настроить обратный прокси, чтобы связать ваш домен с этим портом.
Запуск сервера в режиме разработки
В папке проекта
/Applications/ServBay/www/servbay-nest-app
выполните следующую команду для запуска dev-сервера NestJS. Порт, на котором будет запущено приложение, например8585
, задаётся с помощью переменной окруженияPORT
.bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev
1
2Скрипт
npm run start:dev
— это предустановленная команда, запускающая приложение с помощьюts-node
с автоматическим отслеживанием изменений файлов. После старта сервер будет доступен по адресуlocalhost:8585
.Настройка обратного прокси ServBay для сайта
Откройте панель управления ServBay и перейдите во вкладку «Сайты». Нажмите на кнопку добавления (обычно это значок
+
), чтобы создать новый сайт:- Имя (Name): выберите понятное название, например
My first NestJS dev site
. - Домены (Domains): укажите желаемое доменное имя для локального доступа, например
servbay-nest-test.dev
. ServBay по умолчанию настроит разрешение домена .dev на локальный адрес без редактирования hosts-файла. - Тип (Type): выберите
Reverse Proxy
(Обратный прокси). - IP-адрес (IP Address): укажите IP адрес, на котором прослушивается Node.js-приложение — обычно
127.0.0.1
. - Порт (Port): укажите порт приложения NestJS — здесь это
8585
.
Сохраните настройки. ServBay автоматически обновит конфигурацию своего веб-сервера (Caddy или Nginx). Подробнее о настройке сайтов читайте в документации по добавлению сайтов в ServBay.
- Имя (Name): выберите понятное название, например
Открытие сайта в режиме разработки
В браузере перейдите по адресу, который вы только что настроили, например
https://servbay-nest-test.dev
.Важно:
- Все локальные сайты, настроенные через ServBay, по умолчанию получают бесплатный SSL-сертификат от ServBay User CA, поэтому их можно безопасно открывать по
https
. Если появляется предупреждение сертификата, возможно, потребуется доверять CA ServBay User. Подробнее см. в руководстве по SSL для сайтов. - Убедитесь, что dev-сервер NestJS (
PORT=8585 npm run start:dev
) работает. Если сервер остановлен, сайт будет недоступен.
- Все локальные сайты, настроенные через ServBay, по умолчанию получают бесплатный SSL-сертификат от ServBay User CA, поэтому их можно безопасно открывать по
Деплой продакшен-версии и доступ через ServBay
Перед развёртыванием NestJS-приложения в продакшене (даже в локальном продакшене) обычно нужно сначала собрать проект.
Сборка продакшен-версии
В каталоге проекта
/Applications/ServBay/www/servbay-nest-app
выполните команду:bashcd /Applications/ServBay/www/servbay-nest-app npm run build
1
2Команда
npm run build
скомпилирует исходный код TypeScript в папкуdist
.Запуск production-сервера
После сборки можно запустить prod-версию NestJS-приложения напрямую через Node.js. Задайте порт, например
8586
, и выставьте переменную окруженияNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js
1
2В продакшене обычно не происходит перезапуск сервера при изменении файлов.
Настройка обратного прокси ServBay для продакшен-сайта
В панели управления ServBay на вкладке «Сайты» добавьте или измените сайт для доступа к продакшен-версии:
- Имя (Name): например,
My first NestJS production site
. - Домены (Domains): например,
servbay-nest-test.prod
. - Тип (Type):
Reverse Proxy
(Обратный прокси). - IP-адрес (IP Address):
127.0.0.1
. - Порт (Port):
8586
(тот же порт, что и у production-сервера).
Сохраните настройки.
- Имя (Name): например,
Открытие сайта в production-режиме
Откройте браузер и перейдите по адресу
https://servbay-nest-test.prod
. Ваше приложение теперь доступно в production-режиме и защищено SSL.
Подключение к базам данных ServBay
ServBay поддерживает различные СУБД, включая MariaDB (совместимую с MySQL), PostgreSQL, MongoDB и Redis. Разработка приложения NestJS с этими БД становится проще благодаря их встроенной поддержке.
Важное замечание: Перед подключением к базе данных проверьте, что нужный пакет базы данных активирован во вкладке «Пакеты» панели ServBay. Данные о портах, логинах и паролях можно найти в самой панеле ServBay или сопутствующей документации. Для продакшена настоятельно рекомендуется изменить стандартные реквизиты доступа и создавать отдельных пользователей.
Ниже приведены примеры настройки подключения к разным СУБД в NestJS с помощью популярных ORM/библиотек. Обычно такие конфиги размещаются в корневом модуле приложения (AppModule
) или выделенном модуле базы данных.
Подключение к MongoDB
Используйте пакет
@nestjs/mongoose
для интеграции с MongoDB. Сначала установите зависимости:bashnpm install @nestjs/mongoose mongoose
1Затем настройте
MongooseModule
:typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... другие импорты @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // стандартный порт 27017 // ... другие модули ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13Стандартная строка подключения MongoDB в ServBay —
mongodb://localhost:27017/
. При необходимости создайте БДservbay-nest-app
через клиент MongoDB (например, MongoDB Compass илиmongosh
).Подключение к Redis
Для интеграции с Redis используйте пакет
@nestjs/redis
:bashnpm install @nestjs/redis redis @types/redis
1Настройте модуль Redis:
typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... другие импорты @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // стандартный порт 6379 }), // ... другие модули ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15По умолчанию Redis-сервер ServBay доступен по адресу
localhost:6379
.Подключение к MariaDB (MySQL-совместимо)
Для подключения к MariaDB используйте модуль
@nestjs/typeorm
. В ServBay доступны пакеты как MariaDB, так и MySQL, оба поддерживают один протокол. Конфиг TypeORM можно строить сtype: "mysql"
илиtype: "mariadb"
. Сначала установите зависимости:bashnpm install @nestjs/typeorm mysql2 typeorm
1Настройте TypeOrmModule следующим образом:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... другие импорты @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // или 'mysql' host: 'localhost', port: 3306, // стандартный порт 3306 username: 'root', // стандартный root-пользователь ServBay MariaDB/MySQL password: 'password', // стандартный пароль root-пользователя ServBay MariaDB/MySQL database: 'servbay_nest_app', // создайте БД вручную entities: [], // массив ваших сущностей synchronize: true, // в разработке true, для production рекомендуется false }), // ... другие модули ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Важно: По умолчанию пароль пользователя root для MariaDB/MySQL в ServBay —
password
. Чтобы создать БДservbay_nest_app
, воспользуйтесь клиентом базы данных (TablePlus, DBeaver, или CLI MySQL). Для безопасности смените пароль root и заведите отдельного пользователя с минимальными правами для приложения.Подключение к PostgreSQL
Используйте модуль
@nestjs/typeorm
для PostgreSQL. Сначала установите необходимые зависимости:bashnpm install @nestjs/typeorm pg typeorm
1Затем настройте модуль:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... другие импорты @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // стандартный порт 5432 username: 'servbay', // пример стандартного пользователя, проверьте действительные реквизиты password: 'password', // пример пароля, проверьте данные в панели ServBay database: 'servbay_nest_app', // создайте БД вручную entities: [], // массив ваших сущностей synchronize: true, // в разработке true, для production рекомендуется false }), // ... другие модули ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Важно: Стандартные имя пользователя и пароль PostgreSQL в ServBay могут различаться (обычно это
servbay
илиpostgres
). Проверьте актуальные данные в панели управления ServBay или в документации. Для создания БДservbay_nest_app
используйте клиент PostgreSQL. Не забывайте менять стандартные учётные данные для production.
Заключение
В этом руководстве вы ознакомились с процессом быстрого создания, запуска и публикации проекта NestJS в локальной среде macOS с помощью ServBay. Интегрированная поддержка Node.js, простое добавление сайтов (в том числе через обратное проксирование), выбор различных баз данных и SSL делают локальную разработку и тестирование NestJS максимально удобными. Вы легко можете переключаться между режимами разработки и продакшена, безопасно открывать приложение по кастомному домену с помощью HTTPS, а также быстро подключаться к мощным СУБД, входящим в состав ServBay.