#はじめに
この記事は、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での設定
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が参照されている。
そして記事内の「やりたいひとはやろうなテスト」を行うと...
マイグレーションが反映される。
#まとめ
なにが正解かわからないが、他の記事などを見るとSQLスクリプトを書いていたり、自分でmodelを書いていたりしていたので調べるのが大変だった。
一番最初の環境構築でつまづいた初心者がまとめたものなので参考にならないかも。
なにかあれば...twitter@izszzz_