夙缘の小破站
文章
教程

GRTblog 项目数据库(PostgreSQL)Navicat 连接教程

2026年3月22日 4 分钟阅读 浏览 1 喜欢 0 评论 0

一、前置说明

  • GRTblog 项目使用 PostgreSQL 作为数据库,默认容器名:grtblog-postgres
  • 数据库名:grtblog(默认)
  • 目标:通过 Navicat 从外部连接到服务器上的 PostgreSQL 数据库

二、步骤 1:获取数据库连接信息

2.1 查看 .env 配置文件

在服务器项目根目录下执行:

bash
cat .env | grep -i "postgres"

你会看到类似以下配置(关键信息):

env
POSTGRES_DB=grtblog
POSTGRES_USER=postgres
POSTGRES_PASSWORD=你的数据库密码
  • POSTGRES_DB:数据库名(默认 grtblog
  • POSTGRES_USER:数据库用户名(默认 postgres
  • POSTGRES_PASSWORD:数据库密码(需自行记录)

2.2 确认 Docker 容器状态

执行以下命令查看 PostgreSQL 容器运行状态:

bash
docker ps | grep postgres

示例输出:

text
d8eaaa064955  docker.1ms.run/postgres:17-alpine  ...  Up 18 hours (healthy)  5432/tcp  grtblog-postgres

注意:此时端口显示为 5432/tcp,说明未对外映射,需要修改配置。


三、步骤 2:配置数据库端口对外映射

3.1 编辑 docker-compose.yml

在项目根目录下打开配置文件:

bash
vi docker-compose.yml

向下翻页找到 postgres 服务块:

yaml
postgres:
  image: ${DOCKER_MIRROR:-}postgres:17-alpine
  container_name: grtblog-postgres
  environment:
    POSTGRES_DB: "${POSTGRES_DB:-grtblog}"
    POSTGRES_USER: "${POSTGRES_USER:-postgres}"
    POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-change-me}"
  volumes:
    - postgres_data:/var/lib/postgresql/data
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-grtblog}"]
    interval: 10s
    timeout: 5s
    retries: 10
  networks:
    - grtblog-internal
  restart: unless-stopped

3.2 添加端口映射配置

networksrestart 之间添加 ports 配置:

yaml
  ports:
    - "0.0.0.0:5432:5432"

修改后完整片段:

yaml
postgres:
  image: ${DOCKER_MIRROR:-}postgres:17-alpine
  container_name: grtblog-postgres
  environment:
    POSTGRES_DB: "${POSTGRES_DB:-grtblog}"
    POSTGRES_USER: "${POSTGRES_USER:-postgres}"
    POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-change-me}"
  volumes:
    - postgres_data:/var/lib/postgresql/data
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-grtblog}"]
    interval: 10s
    timeout: 5s
    retries: 10
  networks:
    - grtblog-internal
  ports:
    - "0.0.0.0:5432:5432"
  restart: unless-stopped

3.3 保存并退出编辑器

  • Esc 退出编辑模式
  • 输入 :wq 并回车(保存修改并退出)

四、步骤 3:重启容器使配置生效

4.1 重启容器

新版 Docker 使用 docker compose(无横杠),旧版使用 docker-compose(有横杠)

推荐命令(新版 Docker):

bash
docker compose down && docker compose up -d

若需安装旧版 docker-compose

bash
apt update && apt install -y docker-compose

然后执行:

bash
docker-compose down && docker-compose up -d

4.2 验证端口监听

执行以下命令,确认 5432 端口已对外监听:

bash
ss -tulnp | grep 5432

成功输出示例:

text
LISTEN 0      4096         0.0.0.0:5432        0.0.0.0:*    users:(("docker-proxy",pid=xxxx,fd=4))

五、步骤 4:服务器安全组/防火墙放行端口

4.1 云服务器安全组(如阿里云/腾讯云)

  • 登录云服务器控制台 → 找到对应实例 → 安全组
  • 添加入方向规则:
    • 端口范围:5432
    • 授权对象:0.0.0.0/0(或你的本地 IP)
    • 协议:TCP

4.2 服务器内部防火墙(可选)

若服务器内部有防火墙(如 ufw/firewalld),需放行 5432 端口:

bash
# Ubuntu/Debian
ufw allow 5432/tcp

# CentOS/RHEL
firewall-cmd --permanent --add-port=5432/tcp && firewall-cmd --reload

六、步骤 5:Navicat 连接配置

5.1 新建 PostgreSQL 连接

打开 Navicat → 点击「连接」→ 选择 PostgreSQL

5.2 填写连接信息

配置项填写内容
连接名自定义(如 GRTblog-PostgreSQL
主机你的服务器公网 IP / 域名
端口5432
数据库grtblog(来自 .envPOSTGRES_DB
用户postgres(来自 .envPOSTGRES_USER
密码.envPOSTGRES_PASSWORD 的值

5.3 测试连接

点击「测试连接」,提示「连接成功」即配置完成。

5.4 保存并使用

点击「确定」保存连接,双击展开即可管理 GRTblog 数据库。


七、常见问题排查

7.1 连接超时/Connection refused

  • 检查:服务器安全组是否放行 5432 端口
  • 检查:ss -tulnp | grep 5432 是否有输出(确认端口已监听)
  • 检查:docker ps | grep postgres 容器是否正常运行

7.2 密码错误/权限拒绝

  • 核对 .envPOSTGRES_PASSWORD 是否正确
  • 若需授权远程访问,进入容器执行:
    bash
    docker exec -it grtblog-postgres psql -U postgres
    ALTER ROLE postgres CONNECTION LIMIT -1;
    \q
    

7.3 找不到数据库 grtblog

  • 确认项目已完成初始化(执行过安装脚本)
  • 若未初始化,先启动项目让脚本自动创建数据库

八、附录:命令速查表

操作命令
查看 PostgreSQL 配置`cat .env
查看容器状态`docker ps
编辑配置文件vi docker-compose.yml
重启容器(新版)docker compose down && docker compose up -d
验证端口监听`ss -tulnp
安装旧版 docker-composeapt update && apt install -y docker-compose

九、最终验证

  1. 服务器端:ss -tulnp | grep 5432 看到 0.0.0.0:5432
  2. Navicat 端:测试连接成功,可展开 grtblog 数据库查看表结构

此教程来自豆包解决

喜欢 0
评论区在赶来的路上...