Nest.js + PostgreSQL プロジェクトの環境構築手順
主の環境
・Windows 11
前提
・GitHubアカウントが作成されていること
・Git環境が整っていること
・Dockerアカウントが作成されていること
1. リポジトリの作成
1-1. GitHubにログイン
GitHubにアクセスして、ログイン→リポジトリを作成する。
※今回はPrivateリポジトリを作成
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
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
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
./api/node_modules
root/.env
#PostgreSQLのユーザ情報
POSTGRES_USER=XXXXXX
POSTGRES_PASSWORD=XXXXXX
root/.gitignore
.env*
3. Nest.jsプロジェクトの作成
3-1. プロジェクトの作成
apiディレクトリに移動する。
cd api
Nest.jsのCLIをインストールする。
npm i -g @nestjs/cli
プロジェクトを作成する。
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を開き、起動ポート番号を修正する。
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つ上の階層)
cd ..
以下のコマンドを実行して、コンテナをビルドする。
docker compose build
4-2. コンテナの起動
以下のコマンドを実行して、コンテナを起動する。
docker compose up
以下のURLにアクセスして、表示ができればOK。
http://localhost:4000
4-3. DB接続の確認
以下のコマンドを実行して、DBコンテナに入る。
docker exec -it <container name> bash
以下のコマンドを実行してDBにログインする。
psql -U <user name> -d <db name>
4-4. コンテナの停止
以下のコマンドを実行して、コンテナを停止する。
docker compose down
5. リモートリポジトリへpush
5-1. Git Bashを起動
Git Bashを起動し、リポジトリへ移動する。
5-2. ステージングエリアに追加(git add)
変更分をステージングエリアに追加する。
git add <target file or directory>
5-3. 変更分のコミット(git commit)
ステージングエリアの資源をコミットする。
git commit
エディタが開かれるので「i」を押下し、編集モードにする。
↓
コミットメッセージを入力したらEsqキーを押下し、編集モードを終了する。
↓
「:wq」を入力し、Enterキーを押下することでコミットされる。
5-3. 変更分のプッシュ(git push)
コミット内容をリモートリポジトリへプッシュする。
git push origin <branch name>
Discussion