皆さんこんにちは。Sandyマンです。今回は、「Docker×Next.js×NestJS×PostgreSQL」の環境構築をしていきます! それではやっていきましょう! (Docker未経験なので間違ってるかもです…。)

必要なもの

Dockerをインストールしてない人はさっさと公式サイトに飛んでインストールしましょう!!

1.いろいろフォルダとかを作る

今回はWSL2上でDockerを使って、こんな感じで作ろうと思います。

PLAINTEXT
1my-app
2┗frontend
3┗backend
4┗nginx
クリックして展開し、詳細を表示

Nginxはリバースプロキシ用に入れてあります。それぞれ適当にmkdirして作っておきます。

2.Next.jsの環境構築

まず最初に、Next.jsの環境構築をしていきます。frontend内で、npx create-next-app .と打っていい感じにします。(いい感じとは)できたら、Dockerfileを作成して書き込んでいきます。内容はだいたいこんな感じです。まあChatGPTに丸投げしたんだけど

PLAINTEXT
 1# ベースイメージとして公式のNode.jsイメージを指定
 2FROM node:18-alpine
 3
 4# アプリケーションのディレクトリを設定
 5WORKDIR /app
 6
 7# package.jsonとpackage-lock.jsonをコピー
 8COPY package*.json ./
 9
10# 依存関係のインストール
11RUN npm install
12
13# アプリケーションのソースコードをコピー
14COPY . .
15
16# アプリケーションのビルド
17RUN npm run build
18
19# ポート3000で実行
20EXPOSE 3000
21
22# アプリケーションの起動
23CMD ["npm", "start"]
クリックして展開し、詳細を表示

3.NestJSの環境構築

次は、NestJSのほうをやっていきます。NestJSの方のコマンドはこんな感じです。(backendディレクトリ内で実行)

SHELL
1npm install -g @nestjs/cli
2nest new .
クリックして展開し、詳細を表示

次にDockerfileを作成して書き込んでいきます。~~もちろんこれもChatGPT ~~

PLAINTEXT
 1# ベースイメージとして公式のNode.jsイメージを指定
 2FROM node:18-alpine
 3
 4# アプリケーションのディレクトリを設定
 5WORKDIR /app
 6
 7# package.jsonとpackage-lock.jsonをコピー
 8COPY package*.json ./
 9
10# 依存関係のインストール
11RUN npm install
12
13# アプリケーションのソースコードをコピー
14COPY . .
15
16# ポート4000で実行
17EXPOSE 4000
18
19# アプリケーションの起動
20CMD ["nest", "start"]
クリックして展開し、詳細を表示

4.Nginxの環境構築

Nginxのリバースプロキシとか正直よくわからないんですけど、なんかやった方がいいらしいのでやっていきます。リバースプロキシについては、今度記事にしてまとめてみようと思います。

Nginxディレクトリの中に、nginx.confを作ります。作ったら下のように書き込んでいきます。

PLAINTEXT
 1http {
 2    server {
 3        listen 80;
 4        server_name localhost;
 5
 6        location / {
 7            proxy_pass http://frontend:3000;
 8            proxy_set_header Host $host;
 9            proxy_set_header X-Real-IP $remote_addr;
10            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11            proxy_set_header X-Forwarded-Proto $scheme;
12        }
13
14        location /api {
15            proxy_pass http://backend:4000;
16            proxy_set_header Host $host;
17            proxy_set_header X-Real-IP $remote_addr;
18            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
19            proxy_set_header X-Forwarded-Proto $scheme;
20        }
21    }
22}
クリックして展開し、詳細を表示

ついでにDockerfileも作ります。一行だけFROM nginx:latestとだけ書いておきましょう。

5.docker-compose.ymlの作成

では、docker-compose.ymlを作成していきます。(最近はcompose.yamlとかいうらしい)プロジェクトディレクトリ直下に、docker-compose.ymlを作成して書き込んでいきます。

PLAINTEXT
 1version: '3'
 2
 3services:
 4  frontend:
 5    container_name: my-app-frontend
 6    build: ./frontend
 7    command: npm run dev
 8    volumes:
 9      - ./frontend/src:/app/src
10      - ./frontend/package.json:/app/package.json
11      - ./frontend/package-lock.json:/app/package-lock.json
12    ports:
13      - "3000:3000"
14    depends_on:
15      - backend
16
17  backend:
18    container_name: my-app-backend
19    build: ./backend
20    command: npm run start:dev
21    volumes:
22      - ./backend/src:/app/src
23      - ./backend/package.json:/app/package.json
24      - ./backend/package-lock.json:/app/package-lock.json
25    ports:
26      - "4000:4000"
27    depends_on:
28      - db
29
30  db:
31    container_name: my-app-db
32    image: postgres:latest
33    environment:
34      POSTGRES_USER: ${POSTGRES_USER}
35      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
36      POSTGRES_DB: ${POSTGRES_DB}
37    volumes:
38      - db-data:/var/lib/postgresql/data
39
40  nginx:
41    container_name: my-app-nginx
42    build:
43      context: ./nginx
44      dockerfile: Dockerfile
45    volumes:
46      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
47    ports:
48      - "80:80"
49    depends_on:
50      - frontend
51      - backend
52
53volumes:
54  db-data:
クリックして展開し、詳細を表示

6.動作確認

ここまで来たら、後は動かすだけです。docker-compose up -dで動かしてみましょう。いい感じにできたら成功です!

まとめ

ということで、Dockerでの環境構築でした。Dockerは初めてで手探りでやってみたので、もしかしたら間違っているところがあるかもしれません(多分ある)もしあったら、ブログのリポジトリをGitHubで公開してるので、そちらに送ってくださると助かります!それではさようならーーーーーーーー!

GitHubのリンク https://github.com/SuperSandyman/sandyman-papermod-blog

検索を開始

キーワードを入力して記事を検索

↑↓
ESC
⌘K ショートカット