0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker postgresql + prisma + nestjsでAPIをデプロイする

Last updated at Posted at 2024-02-04

Dockerコンテナ同士でPostgresqlの通信+nestjsをコンテナ化する際にprismaでエラーが出まくりだったので、備忘録として記録する。

ステップ

  • nestjsをビルド+コンテナ化する(with prisoma)
  • docker-composeで同じコンテナ間のpostgresqlの通信を実現する

不完全

prismaのソースコード内のenvを読み取ってくれなかったので、値直書きしてます。いい方法あれば教えてください。

補足

DB接続文字列は、compseで作成したサービス名で接続可能 ビルド前に知りたかったのでここに紹介

例。。。”postgresql://***:***@service_postgres:5432/***?schema=public”

nestjsをビルド+コンテナ化する

以下dockerファイルを作成してdocker-imgを作成する。色々記事はあったものの、prismaと一緒の記事がなかなかなく、色々試した結果以下の設定で動いた。

ポイント

  • node:21-slimを使用
  • ビルド時npx prisma generateを実行
  • 最終アーティファクトに「apt-get install -y openssl」でopensslを導入 (slimだと入ってないみたい)
  • ※slimを選ばなくてもOKだが、slim版でないと1つのイメージが1GB越えで。。。
"debian-openssl-1.1.x" to `binaryTargets` in the "schema.prisma" file and run `prisma generate` after saving it:
###################
# DEVELOPMENT
###################
FROM node:21.0.0-slim AS development

WORKDIR /usr/src/app

RUN apt-get update && apt-get -qq install -y --no-install-recommends \
    tzdata \
    tini \
    && rm -rf /var/lib/apt/lists/*

ENV NODE_ENV development

COPY --chown=node:node package*.json ./

RUN npm ci

COPY --chown=node:node . .

USER node


###################
# PRODUCTION BUILD
###################

FROM node:21 As build

WORKDIR /usr/src/app

ENV NODE_ENV production

COPY --chown=node:node package*.json ./

COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules

COPY --chown=node:node . .

RUN npx prisma generate

RUN npm run build

RUN npm ci --omit=dev && npm cache clean --force

USER node


###################
# PRODUCTION
###################

FROM node:21.0.0-slim

WORKDIR /usr/src/app

ENV NODE_ENV production

RUN apt-get update \
    && apt-get install -y openssl


RUN apt-get update && apt-get -qq install -y --no-install-recommends \
    tzdata \
    tini \
    && rm -rf /var/lib/apt/lists/*

COPY --chown=node:node --from=build /usr/src/app/package.json ./
COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist

EXPOSE 3000

USER node

ENTRYPOINT ["/usr/bin/tini", "--"]
CMD [ "node", "dist/main.js" ]

docker-composeを作成

version: '3.8'

services:
  service_postgres:
    image: postgres:16
    container_name: container_postgres
    environment: 
      POSTGRES_USER: ***
      POSTGRES_PASSWORD: ***
      POSTGRES_DB: ***
    ports: 
      - "5433:5432"
    volumes:
      - volume_postgres:/var/lib/postgresql/data
      - ./postgres_service/initdb.d:/docker-entrypoint-initdb.d

  service_laboapi:
    image: <<your-image-name>>
    container_name: ynetlabo-api
    ports:
      - "7701:3000"
    depends_on:
      - service_postgres
      
        
volumes:
  volume_postgres:
    name: vpg

👏動いた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?