在Docker中构建Postgres Sequelize Express Next.JS


介绍

本文是使用Sequelize将Postgres连接到Docker中的Express的文章。
即使当我查找它时,每篇文章的构建方式也存在很大差异,因此我设计了一种对我来说很容易的方法并进行了总结。

警告

这是备忘录
我不会给出基本解释。主要关于DB和Express之间的连接
我完全不了解Docker,因此目录结构以及如何编写Dockerfile可能不是很好。

环境

  • 码头工人
  • Node.js
  • 表示
  • PostgreSQL的
  • Next.js(由于已通过API交换,因此服务器已设置并完成)

目录结构

1
2
3
4
5
product-docker-express-Dockerfile//マウント用
              -next-Dockerfile//マウント用
       -express //expressを直接インストール
       -next //Nextを直接インストール
       -docker-compose

在产品/快递上安装续集

1
npm install --save sequelize pg sequelize-cli

Docker-compose中的设置

码头工人组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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。
稍后,将其设置为在序列的config.json中用作环境变量。
postgres://postgres:postgres@db:5432/postgres
该网址是
postgres://username:password@host:port/dbname
是的,并且按docker-compose的设置应用。
对于dbname,根据postgres-Docker Hub,如果未提及POSTGRES_DB,则将使用POSTGRES_USER的值。

续集

通过安装

cli,您可以生成模型和迁移,例如Rails的ActiveRecord。

1
2
$ sequelize init
//modelやmigration、configなどのフォルダーを生成。

想参加考试的人

1
$ docker-compose up -d
1
$ docker-compose run backend npx sequelize model:create --name Test //モデルとマイグレーションファイルを生成

1
$ docker-compose run backend npx sequelize db:migrate --env development

您仍然应该得到一个错误...

config / config.json设置

1
2
3
4
 "development": {
    "dialect": "postgres",
    "use_env_variable":"DATABASE_URL"
  }

dialect是数据库的类型
use_env_variable是指环境变量。换句话说,将引用在docker compose中设置的URL。

而当您执行文章中的"人们想要做的测试"时...
スクリーンショット 2020-01-15 14.19.22.png
迁移得到反映。

概括

我不知道正确的答案是什么,但是当我看其他文章时,很难找到答案,因为我是自己编写SQL脚本或编写模型的。
它可能无济于事,因为它是由刚接触第一个环境构造的初学者编写的。
如果有的话... twitter @izszzz_