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

Posted _less is more

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresdocker desktop全部署后端MVC + postgres + Adminer可视化数据库相关的知识,希望对你有一定的参考价值。

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

以上是关于postgresdocker desktop全部署后端MVC + postgres + Adminer可视化数据库的主要内容,如果未能解决你的问题,请参考以下文章

Remote Desktop Connection没法全屏解决方案

我装的ubuntu 8.04 desktop i386 怎么全英文啊,明明选了中文简体

Parallels Desktop如何全屏后鼠标移到最上不显示MAC菜单栏

SUSE Linux Enterprise Desktop 15 SP1 安装部署事项

Azure Virtual Desktop 实战部署之测试客户端访问

Docker Desktop 版本助力 Kubernetes 集群,一键部署不再是梦