【postgres】docker desktop全部署后端MVC + postgres + Adminer可视化数据库

本文详细解读了docker-compose.yaml中的postgres、adminer和api容器配置,强调了跨容器连接与localhost修改的重要性。通过实例介绍了如何在adminer中创建数据库并进行管理。主要关注后端服务与数据库的协作和本地开发环境的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、docker-compose.yaml

version: "3.9"
services:
  postgres: # 一个postgres容器
    image: postgres:14
    container_name: postgres
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=1
  adminer: # 一个adminer容器
    image: adminer:latest
    links:
      - postgres
    restart: always
    ports:
      - 8080:8080
  api: # 一个后端容器,放自己的代码
    image: node:18
    container_name: api
    # to keep the container running
    command: "sleep infinity"
    links:
      - postgres
    volumes:
      # # use a host directory, to save work
      - ./app/api:/usr/src/app
    working_dir: /usr/src/app
    ports:
      - 4000:4000
    environment:
      - PGHOST=postgres
      - PGUSER=postgres
      - PGPASSWORD=1
      - PGDATABASE=ee547_demo

如上代码中,postgres是postgres容器,如果是在PC本地(非容器内)可以直接用localhost:5432或者127.0.0.1:5432进行连接

adminer是别人用php写的,相当于前后端部署在容器里,对8080端口监听,然后把容器里的8080端口映射到PC上的8080端口,因此我们能打开浏览器用http://127.0.0.1:8080/访问

api是nodejs容器,里面有node环境,在里面开启我们自己的后端服务,并端口映射容器到本地,这样在本地如VScode里也可以用REST插件进行访问调试等

值得注意的是,上面有两行links,本质都是给postgres这个名为postgres的容器指定一个别名,但上面的links只是写了postgres,并没有别名,所以这两行去掉也无所谓,我们就用postgres这个名称来访问postgres容器即可

另外,当我们的后端程序访问postgres时,因为是在容器里进行的,所以localhost指向的不是127.0.0.1,而是后端容器自己的ip地址,这个地址(非127.0.0.1)加上5432端口是访问不到postgres容器以及里面的postgres的。因此我们需要把localhost改成postgres,postgres会被自动解析成postgres容器的ip地址,这样便能正常访问

比如源码中这一句host,在PC上启动后端的话则应该写localhost或者127.0.0.1,但如果是在单独的后端容器里进行启动,则得改成如下所示的postgres
在这里插入图片描述

当我们访问adminer的时候也是一样,这个server要写postgres而不是127.0.0.1,是因为当我们点击这个login时,本质上是adminer容器里的php后端拿着我们输入的server地址和username等参数去连接另一个容器里的postgres,这种情况下127.0.0.1指代的是adminer容器的地址,而不是postgres容器地址,自然是连接不上。所以会出现明明是在PC上访问,却还是连不上数据库的奇怪现象。因此server该成postgres,adminer容器会自动将postgres解析成真正的postgres容器的ip地址,从而访问到postgres数据库
在这里插入图片描述

2、adminer

登陆进去如下
在这里插入图片描述
可以看到这里还没有我们后端所需要连接的数据库,我们要先手动创建。可以直接用这个UI界面来创建,也可以进入postgres容器里用命令创建

进入容器

docker exec -it container_name bash

进入postgres

psql -U postgres

创建数据库

CREATE DATABASE projectsdb;

进入数据库

\c projectsdb;

创建所需表单,这个命令已经备好,直接复制粘贴,在项目的sql目录下

3、项目目录

源码见末尾

如下,在第一级目录中,有docker-compose.yaml,在这里启动三个container

docker-compose up -d

然后进入node容器,会自动处于/usr/src/app下,因为设置了working_dir: /usr/src/app。然后安装包

npm i

然后进入src下,启动后端

node index.js

可以看到橙色的两个框,上面是配合VScode的REST插件进行使用的REST请求辅助工具,不需要的话可删除无妨

第二个橙色框则是postgres的sql文件,可以直接复制使用

绿色的大框是后端MVC架构的文件,可以看到从上到下有controllers,有数据库的ORM(database.js,用的是nodejs的sequelize),有models,还有routes(中间件express起作用的地方),没有视图层(MVC的V),因为我们没有写前端页面,这里仅提供后端服务
在这里插入图片描述

源码地址:https://github.com/lujiazho/nodejs-demos/tree/main/postgres-backendMVC-demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值