Универсальный рецепт для всех видов баз данных.

Сегодня мы узнаем, как создать полноценное серверное приложение, используя Node.js и любую базу данных (Postgres/MySQL и т. д.).

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

Я предполагаю, что вы уже знакомы с основами докера и имеете представление о том, как докеризировать базовое приложение Node.js. Если нет, вы можете взглянуть на следующую статью.



Прежде чем мы начнем…

Я создал профессиональный шаблон с ExpressJS и Typescript. Эта статья является частью этой серии. Все статьи вы найдете ниже.

* Creating a ExpressJS + Typescript Boilerplate

* How to setup Linter and Formatter for NodeJS

* How to handle multiple environments in NodeJS

* Error Handling in NodeJS

* Request Validation in NodeJS

* Using Docker Professionally with NodeJS

* Using Docker for Local Development in NodeJS

* Logging in NodeJS

* Kubernetes with NodeJS

Давай начнем!

Получить шаблон

Во-первых, клонируйте репозиторий шаблонов экспресс-докеров, где у нас есть работающее приложение Express с TypeScript и базовая настройка с помощью docker-compose.

Мы интегрируем базу данных поверх этого репозитория:

git clone https://github.com/Mohammad-Faisal/express-typescript-docker.git

Но почему?

Когда вы разрабатываете локально, каждый раз, когда вы заходите на сервер PostgreSQL с pgadmin или mysql, сервер может быть скучным.

Мы можем использовать возможности docker-compose для простой интеграции базы данных, гарантируя, что все в команде будут иметь одинаковый опыт при разработке.

Основы

Откройте файл docker-compose.yml, где у нас уже есть служба с именем express-typescript-docker. Мы добавим еще один сервис для нашей базы данных поверх него.

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

Нам также понадобится том для сервера базы данных. Итак, всего нам понадобится три вещи.

Определите службу базы данных.

Откройте файл docker-compose.yml и добавьте следующую службу базы данных в существующую службу express-typescript-docker.

Здесь есть несколько вещей, на которые мы можем обратить внимание:

1. environment: определяет корневой пароль MySQL. Вы можете создать нового пользователя и назначить пароль, если не хотите использовать пароль root. Вы даже можете создать новую базу данных через это.

2. volumes: мы определили том в конце файла компоновки и прикрепили этот том к /var/lib/mysql этого образа Docker.

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

Том может помочь нам избежать этого, сохраняя данные между сеансами.

3. networks: Это помогает нам соединять сервисы как стежок.

и в express-typescript-dockerservice добавьте новую зависимость

Используйте альтернативную базу данных

Если вы хотите использовать другую базу данных (например, PostgreSQL), это очень легко сделать сейчас. Все, что вам нужно сделать, это заменить службу MySQL на следующую.

Вот и все! Насколько это было легко? Вас интересует MongoDB? У нас это тоже может быть!

Надеюсь, теперь вы понимаете силу докера в локальной разработке. Без установки, без настройки, без особых проблем с ОС!

Обновите сервер

Нам нужно будет изменить конфигурацию сервера, как показано ниже.

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

Попробуй это

Итак, теперь у нас есть хорошая конфигурация, но как ее протестировать? Сначала запустим контейнер.

docker-compose up

Это правильно поднимет базу данных и сервер приложений.

Проверьте базу данных с помощью администратора.

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

Давайте также добавим это в наш файл docker-compose.yml. Под сервисом добавьте следующее.

Давайте снова запустим docker-compose и перейдем к http://localhost:8080/. Там вы увидите страницу входа. Используйте следующие учетные данные для входа в базу данных.

Server : mysql-docker
Username: root
Password: any_password
Database: test_db (optional)

И вы должны иметь возможность войти в приложение.

Подключитесь к базе данных с помощью Sequalize.

Хорошо. Итак, теперь мы можем подключиться к базе данных. Но как мы можем подключиться к базе данных внутри? Для этого мы будем использовать самую популярную ORM под названием Sequalize. Давайте сначала установим его.

yarn add sequelize mysql2
yarn add -D @types/sequelize

Чтобы подключиться к базе данных, вы должны создать экземпляр Sequelize.

Давайте создадим файл утилит базы данных и добавим туда следующий код.

И обновите файл index.ts, чтобы сначала подключиться к базе данных, а затем запустить сервер.

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

docker-compose up

И видите следующий результат!

express-typescript-docker | Connection to database has been 
                            established successfully.
express-typescript-docker | Server running successfully on port 3000

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

Иметь ввиду

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

Поиск неисправностей

Если вы ранее запускали контейнеры, у вас могут возникнуть проблемы с паролем. В этом случае вам нужно будет удалить ранее созданные тома.

docker volume prune
docker-compose down --volumes

Убираться:

Docker может занимать значительное количество места на диске. Чтобы увидеть это

docker system df

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

docker system prune

Это все на сегодня. Хорошего отдыха! :D

Want to Connect?
You can reach out to me via LinkedIN or my Personal Website

Ресурсы

Репозиторий Github



Другие статьи о NodeJS:









Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.