#前説
将来的にはフロントエンドは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:
- 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の雛形ファイルを生成しないと作成されませんので、注意が必要です。
{
"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を使ってコンテナを動かしましょう。
$ 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