Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8835

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

$
0
0

前説

将来的にはフロントエンドは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:-databaseimage:n-app#volumes設定volumes:-"./app:/src"# コンテナ名container_name:n-app# ポート接続ports:-3000:5000environment:PORT:5000DB_USER:postgresDB_HOST:databaseDB_PORT:5432DB_NAME:mydatabasetty:truedatabase:image:postgres:12.3volumes:-./init-sql:/docker-entrypoint-initdb.d:roenvironment:POSTGRES_DB:mydatabaseTZ:"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のテンプレートが整っていたので、大変便利でした。

https://qiita.com/tamoco/items/caffca436546a1a5fcc8

では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

https://gitlab.com/tamoco-mocomoco/study-docker-compose/-/tree/master/app/routes

https://qiita.com/yoshiplum/items/129e7ad1ffc3a02b9eb2

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


Viewing all articles
Browse latest Browse all 8835

Trending Articles