👾

Nest.js + PostgreSQL プロジェクトの環境構築手順

2024/04/19に公開

主の環境

・Windows 11

前提

・GitHubアカウントが作成されていること
・Git環境が整っていること
・Dockerアカウントが作成されていること

1. リポジトリの作成

1-1. GitHubにログイン

GitHubにアクセスして、ログイン→リポジトリを作成する。
※今回はPrivateリポジトリを作成
https://github.com/

1-2. リポジトリのクローン

Git Bashを起動し、任意のディレクトリへ移動する。

cd <任意のディレクトリ>

リポジトリをクローンする。

git clone https://github.com/<ユーザーID>/<リポジトリ名>.git

2. ディレクトリの作成

2-1. ディレクトリ構成

root/
├─ .git
├─ api/
│    └─ <Nest.jsプロジェクト>
├─ docker-compose.yml
├─ Dockerfile
└─ .dockerignore

2-2. ファイルとディレクトリの作成

2-1と同じになるように不足しているファイルとディレクトリを作成する。

2-3. 各種ファイル設定

root/docker-compose.yml

docker-compose.yml
version: "3.8"

services:
  #バックエンド
  backend:
    #Dockerfileのパス
    build:
      context: .
      dockerfile: Dockerfile
    #イメージ名
    image: goshuin-api
    #コンテナ名
    container_name: goshuin-api
    #localのport:4000をcontainerのport:4000にマッピング
    ports:
      - "4000:4000"
    #データの同期
    volumes:
      - ./api:/app
    #依存関係(service「db」から起動)
    depends_on:
      - db
    #明示的に stop がされない限り、終了ステータスに関係なく常に再起動が行われる
    restart: always
    #コンテナの標準出力をホスト側の標準出力につなげる
    tty: true
    #ホスト側の標準出力をコンテナの標準出力につなげる
    stdin_open: true
    #frontend-backend間をつなぐネットワーク
    #backend-db間をつなぐネットワーク
    networks:
      - goshuin-frontend-network
      - goshuin-backend-network

  #DB
  db:
    #イメージ名
    image: postgres:latest
    #コンテナ名
    container_name: goshuin-db
    #localのport:5432をcontainerのport:5432にマッピング
    ports:
      - "5432:5432"
    #環境変数設定(DBの接続情報)
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=goshuindb
    volumes:
      - db-data:/var/lib/postgresql/data

networks:
  goshuin-frontend-network:
    #ブリッジとしてつなぐ
    driver: bridge
  goshuin-backend-network:
    #ブリッジとしてつなぐ
    driver: bridge

#DBの永続化
volumes:
  db-data:

root/Dockerfile

Dockerfile
FROM node:20.11.0-alpine3.18

#app直下をワークディレクトリに設定
WORKDIR /app

#package.json package-lock.jsonをコンテナ内のappディレクトリにコピー
COPY package*.json ./

#依存関係をインストール
RUN yarn install

#localのデータをcopyする
COPY . .

CMD ["npm", "run", "dev"]

root/.dockerignore

.dockerignore
./api/node_modules

root/.env

.env
#PostgreSQLのユーザ情報
POSTGRES_USER=XXXXXX
POSTGRES_PASSWORD=XXXXXX

root/.gitignore

.gitignore
.env*

3. Nest.jsプロジェクトの作成

3-1. プロジェクトの作成

apiディレクトリに移動する。

terminal
cd api

Nest.jsのCLIをインストールする。

terminal
npm i -g @nestjs/cli

プロジェクトを作成する。

terminal
npx nest new ./

Nest.jsプロジェクト作成時の質問に対する回答は以下の通り。

? Which package manager would you ❤️  to use? (Use arrow keys)
> npm  #npmを選択
  yarn
  pnpm

作成プロジェクトディレクトリ直下に.gitフォルダがあるので、削除する。

3-2. .gitignoreの修正

apiディレクトリ直下にある.gitignoreを開き、envファイルの設定部分にて、
.env.XXXを追跡対象外に修正する。

# dotenv environment variable files
+.env*
-.env
-.env.development.local
-.env.test.local
-.env.production.local
-.env.local

3-3. ポート番号の編集

api/src/main.tsを開き、起動ポート番号を修正する。

main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
+ await app.listen(4000);
- await app.listen(3000);
}
bootstrap();

4. Dockerコンテナの起動

4-1. コンテナのビルド

docker-compose.ymlが存在するディレクトリへ移動する。(手順通りであれば1つ上の階層)

terminal
cd ..

以下のコマンドを実行して、コンテナをビルドする。

terminal
docker compose build

4-2. コンテナの起動

以下のコマンドを実行して、コンテナを起動する。

terminal
docker compose up

以下のURLにアクセスして、表示ができればOK。
http://localhost:4000

4-3. DB接続の確認

以下のコマンドを実行して、DBコンテナに入る。

terminal
docker exec -it <container name> bash

以下のコマンドを実行してDBにログインする。

terminal
psql -U <user name> -d <db name>

4-4. コンテナの停止

以下のコマンドを実行して、コンテナを停止する。

terminal
docker compose down

5. リモートリポジトリへpush

5-1. Git Bashを起動

Git Bashを起動し、リポジトリへ移動する。

5-2. ステージングエリアに追加(git add)

変更分をステージングエリアに追加する。

bash
git add <target file or directory>

5-3. 変更分のコミット(git commit)

ステージングエリアの資源をコミットする。

bash
git commit

エディタが開かれるので「i」を押下し、編集モードにする。

コミットメッセージを入力したらEsqキーを押下し、編集モードを終了する。

「:wq」を入力し、Enterキーを押下することでコミットされる。

5-3. 変更分のプッシュ(git push)

コミット内容をリモートリポジトリへプッシュする。

bash
git push origin <branch name>

Discussion