前説
将来的にはフロントエンドはVue、バックエンドはExpressのような構成を目指します。
まずはバックエンドでExpress+PostgreSQL+Sequelizeでの環境構築です!
①Dockerでコンテナ動作まで
初期ファイル構成
-Dockerfile
-docker-compose.yml
-app
|-- package.json
Dockerfile
# イメージ指定
FROM node:latest
# 環境変数設定
ENV NODE_ENV="development"
# 作業ディレクトリ作成&設定
WORKDIR /src
COPY ./app /src
RUN npm install
docker-compose.yml
ここでNode.jsのExpress(サーバーサイド)コンテナの構造とDBコンテナの構造を設計します。
- ポート番号は5432が一般的です。
- Volumesではコンテナを破棄しても、データを永続化できます。その為データをコンテナ外に保存します。
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の雛形ファイルを生成しないと作成されませんので、注意が必要です。
{"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を使ってコンテナを動かしましょう。
$ 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