1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerの中にPostgres+Sequelize+Express+Next.JSの構築

Last updated at Posted at 2020-01-15

#はじめに
この記事は、Dockerの中のExpressにSequelizeを使ってPostgresを接続する記事である。
調べても、記事ごとに構築の仕方の差が激しかったので、自分にとってやりやすいやり方を編み出し、まとめる。
#注意
これはメモ
基本的な解説はしない。DBとExpressのコネクションについてがメイン
Dockerについて全く理解していないので、ディレクトリ構造やDockerfileの書き方がよくないかもしれない。
#環境

  • Docker
  • Node.js
  • Express
  • PostgreSQL
  • Next.js(APIでやり取りするのでサーバー立てて終わり)

##ディレクトリ構造

product-docker-express-Dockerfile//マウント用
              -next-Dockerfile//マウント用
       -express //expressを直接インストール
       -next //Nextを直接インストール
       -docker-compose

#product/expressにsequelizeをインストール

npm install --save sequelize pg sequelize-cli

#Docker-composeでの設定

docker-compose
version: '3'
services:

  backend:
    build:
      context: ./docker/express
      dockerfile: Dockerfile
    image: back
    container_name: back
    ports:
      - 3000:3000
    environment:
      DATABASE_URL: postgres://postgres:postgres@db:5432/postgres 
    volumes:
      - ./express:/src
    command: [sh, -c, npm install && npm start]

  frontend:
    build: 
      context: ./docker/next 
      dockerfile: Dockerfile
    image: front
    container_name: front
    ports:
      - 3001:3000
    volumes: 
      - ./next:/src
    command: [sh, -c, npm install && npm run dev]

  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - "5432:5432"

ここで重要なのは、DATABASE_URLである。
のちに、sequelizeのconfig.jsonにて環境変数として使用するため設定している。
postgres://postgres:postgres@db:5432/postgres
このURLは、
postgres://username:password@host:port/dbname
となっており、docker-composeで設定した通りに当てはめていく。
dbnameは、postgres-Docker Hubによると、POSTGRES_DBの記述がなければ、POSTGRES_USERの値が代わりに使用される。

#Sequelize

cliをインストールしたことによって、RailsのActiveRecordのように、modelやmigrationを生成することができる。

$ sequelize init
//modelやmigration、configなどのフォルダーを生成。

##やりたいひとはやろうなテスト

$ docker-compose up -d
$ docker-compose run backend npx sequelize model:create --name Test //モデルとマイグレーションファイルを生成
$ docker-compose run backend npx sequelize db:migrate --env development 

まだ、エラーがでるはず...

##config/config.jsonの設定

 "development": {
    "dialect": "postgres",
    "use_env_variable":"DATABASE_URL"
  }

dialectはDBの種類
use_env_variableは環境変数を参照する。つまり、dockercomposeで設定したURLが参照されている。

そして記事内の「やりたいひとはやろうなテスト」を行うと...
スクリーンショット 2020-01-15 14.19.22.png
マイグレーションが反映される。

#まとめ
なにが正解かわからないが、他の記事などを見るとSQLスクリプトを書いていたり、自分でmodelを書いていたりしていたので調べるのが大変だった。
一番最初の環境構築でつまづいた初心者がまとめたものなので参考にならないかも。
なにかあれば...twitter@izszzz_

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?