Как подключиться к postgres — TypeOrm через Nestjs запущенной в контейнере?

Для подключения к PostgreSQL с использованием TypeORM через Nestjs, запущенном в контейнере, вам необходимо выполнить несколько шагов.

1. Установите необходимые пакеты.
Убедитесь, что вы установили пакеты nestjs, typeorm, @nestjs/typeorm, pg (драйвер PostgreSQL) и dotenv (для загрузки переменных окружения).

   npm install --save @nestjs/typeorm typeorm pg dotenv

2. Создайте файл конфигурации TypeORM.
В корневой директории вашего проекта создайте файл ormconfig.js со следующим содержимым:

   module.exports = {
     type: 'postgres',
     host: process.env.DB_HOST,
     port: process.env.DB_PORT,
     username: process.env.DB_USERNAME,
     password: process.env.DB_PASSWORD,
     database: process.env.DB_NAME,
     entities: [__dirname + '/**/*.entity{.ts,.js}'],
     synchronize: true,
   };

В этом файле мы используем переменные окружения для хранения конфигурации подключения к базе данных.

3. Создайте .env файл.
В корневой директории вашего проекта создайте файл .env и добавьте в него следующую информацию (замените значения на свои):

   DB_HOST=localhost
   DB_PORT=5432
   DB_USERNAME=postgres
   DB_PASSWORD=your_password
   DB_NAME=your_database_name

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

4. Добавьте настройки подключения в модуль Nestjs.
Вам необходимо импортировать модуль TypeOrmModule из @nestjs/typeorm и настроить его в модуле вашего приложения.
Создайте новый модуль или измените существующий, добавьте следующий код:

   import { Module } from '@nestjs/common';
   import { TypeOrmModule } from '@nestjs/typeorm';

   @Module({
     imports: [
       TypeOrmModule.forRoot(),
     ],
   })
   export class AppModule {}

TypeOrmModule.forRoot() загрузит настройки подключения из файла ormconfig.js.

5. Внедрите репозитории TypeORM в ваши сервисы или контроллеры.
Вам нужно импортировать модуль TypeOrmModule и использовать его метод getRepository для получения репозитория для вашей сущности.
Пример использования репозитория в сервисе:

   import { Injectable } from '@nestjs/common';
   import { InjectRepository } from '@nestjs/typeorm';
   import { Repository } from 'typeorm';
   import { User } from './user.entity';

   @Injectable()
   export class UserService {
     constructor(
       @InjectRepository(User)
       private userRepository: Repository<User>,
     ) {}

     async findAll(): Promise<User[]> {
       return await this.userRepository.find();
     }
   }

В этом примере мы инжектируем репозиторий User и используем его для выполнения операций с базой данных.

6. Запустите ваше приложение в контейнере Docker.
Создайте Dockerfile и docker-compose.yaml файлы в корневой директории вашего проекта, чтобы создать образ и контейнер для вашего приложения Nestjs. В файле docker-compose.yaml добавьте следующий код:

   version: '3'
   services:
     app:
       build:
         context: .
         dockerfile: Dockerfile
       ports:
         - 3000:3000

Затем выполните следующие команды в терминале:

   docker-compose build
   docker-compose up

После этого ваше приложение должно быть доступно на порту 3000.

7. Проверьте подключение к базе данных.
Вы можете использовать утилиту psql для проверки подключения к PostgreSQL. Выполните следующую команду в терминале:

   psql -h localhost -p 5432 -U postgres -W

Введите пароль, который вы указали в файле .env, и вы должны увидеть приглашение postgres=#, что указывает на успешное подключение.

Это главные шаги для подключения к PostgreSQL с использованием TypeORM через Nestjs, запущенном в контейнере Docker. Вы можете настроить и дополнить конфигурацию TypeORM и Nestjs в соответствии с вашими потребностями.