6
6

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.

Express+PostgreSQL+SequelizeをDockerで構築してみる【前編】

Last updated at Posted at 2020-09-22

#前説

将来的にはフロントエンドはVue、バックエンドはExpressのような構成を目指します。
まずはバックエンドでExpress+PostgreSQL+Sequelizeでの環境構築です!

#①Dockerでコンテナ動作まで

##初期ファイル構成

-Dockerfile
-docker-compose.yml
-app
|-- package.json

##Dockerfile

Dockefile
# イメージ指定
FROM node:latest

# 環境変数設定
ENV NODE_ENV="development"

# 作業ディレクトリ作成&設定
WORKDIR /src

COPY ./app /src

RUN npm install

##docker-compose.yml

ここでNode.jsのExpress(サーバーサイド)コンテナの構造とDBコンテナの構造を設計します。

  • ポート番号は5432が一般的です。
  • Volumesではコンテナを破棄しても、データを永続化できます。その為データをコンテナ外に保存します。
docker-compose.yml
version: '3'
services:
  app:
  # Dockerfile保存場所
    build:
      context: ./  
    depends_on:
      - database
    image: n-app
    #volumes設定
    volumes:
     - "./app:/src"
    # コンテナ名
    container_name: n-app
    # ポート接続
    ports:                          
      - 3000:5000
    environment:
      PORT: 5000
      DB_USER: postgres
      DB_HOST: database
      DB_PORT: 5432
      DB_NAME: mydatabase
    tty: true

  database:
    image: postgres:12.3
    volumes:
      - ./init-sql:/docker-entrypoint-initdb.d:ro
    environment:
      POSTGRES_DB: mydatabase
      TZ: "Asia/Tokyo"
      POSTGRES_HOST_AUTH_METHOD: trust

##package.json

自分用です。
Volumesを設定することにより、コンテナ上でInstallしたパッケージもホスト上・コンテナ上にも保存されます。コンテナを破棄した場合もVolumesを設定することにより、package.jsonをもとに'npm install'で破棄したコンテナの環境を復元できます。

  • scripts内では"node 〇〇"のコマンドの'〇〇'の部分を設定します。
    現状./bin/wwwはExpressの雛形ファイルを生成しないと作成されませんので、注意が必要です。
app/package.json
{
  "name": "myapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
  },
  "dependencies": {
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "ejs": "~2.5.7",
    "express": "~4.16.0",
    "http-errors": "^1.6.3",
    "morgan": "~1.9.0",
    "nodemon": "^2.0.4",
    "pg": "*",
    "sequelize": "^6.3.5",
    "sequelize-cli": "^6.2.0"
  }
}

自分は以下のサイトを参考にしました。
以下のサイトの方のgithubからcloneして、必要な情報を追加しました。
あらかじめExpressのテンプレートが整っていたので、大変便利でした。

ではDockerを使ってコンテナを動かしましょう。

Terminal
$ docker-compose build

Building app
Step 1/5 : FROM node:10.12
 ---> a2b9536415c2
Step 2/5 : ENV NODE_ENV="development"
 ---> Using cache
 ---> 40f981aef1ce
Step 3/5 : WORKDIR /src
 ---> Using cache
 ---> ec233d742a63
Step 4/5 : COPY ./app /src
 ---> Using cache
 ---> 88f269307e53
Step 5/5 : RUN npm install
 ---> Using cache
 ---> b22a8c36f08e

$ docker-compose up -d

$ docker-compose ps

      Name                     Command              State           Ports
----------------------------------------------------------------------------------
n-app               node                            Up      0.0.0.0:3000->5000/tcp
ta-app_database_1   docker-entrypoint.sh postgres   Up      5432/tcp

$ docker exec -it n-app bash

root@f195575a066f:/src# 

上記のところで構築したコンテナに入ることができました。

#②Express環境構築

ExpressとはNode.js上で動作するWebアプリのMVC型フレームワークです。
自分の場合は偉大なる先人様のリポジトリからCloneしたため、あらかじめExpressの雛形が揃っていました。

Expressの雛形を生成したい場合はこんな感じでしょうか。

# npm install express-generator -g

1. viewをpugファイルで作成したい場合(Default)
# express --view=pug myapp

viewをejsファイルで作成したい場合
2. express -e myapp 

#次回
https://qiita.com/rockguitar67/items/0020d734201632077cb5

#参考文献

Docker-Expressの構築
https://qiita.com/tamoco/items/caffca436546a1a5fcc8

Docker-Volumesについて
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?