You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Django连接至Google Cloud Compute Engine的PostgreSQL数据库遇阻

Django从GAE转GCE后Cloud SQL连接问题解决

问题出在App Engine标准环境会自动挂载Cloud SQL的Unix套接字路径,但Compute Engine不会。你当前配置里的HOST用的是/cloudsql/...这种本地套接字路径,GCE实例上不存在这个路径,所以连不上数据库。

下面给两种可行的解决办法:

办法1:用公网IP直接连接

把数据库配置里的HOST换成Cloud SQL实例的公网IP,同时要做两件事:

  • 打开Cloud SQL实例的公网访问开关
  • 把GCE实例的外部IP加到Cloud SQL的授权网络列表里

修改后的配置示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': '123.45.67.89',  # 替换成你的Cloud SQL公网IP
        'NAME': 'mydatabasename',
        'USER': 'myusername',
        'PASSWORD': 'mypassword',
        'PORT': '5432',
    }
}

办法2:用Cloud SQL Auth Proxy连接(更安全,推荐)

这个方式不用开公网IP,通过代理建立加密连接:

  1. 在GCE实例上下载并安装代理:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    chmod +x cloud_sql_proxy
    
  2. 启动代理,替换成你的实例连接名:
    ./cloud_sql_proxy -instances=myproject:us-central1:mypostgresname=tcp:5432 &
    
  3. 修改Django的数据库配置,把HOST改成127.0.0.1:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'HOST': '127.0.0.1',
            'NAME': 'mydatabasename',
            'USER': 'myusername',
            'PASSWORD': 'mypassword',
            'PORT': '5432',
        }
    }
    
  4. 可以把代理启动命令加到实例的启动脚本里,这样重启实例后代理会自动运行。

额外要检查的点

  • 确认GCE实例的服务账号确实有Cloud SQL Client角色权限(哪怕和GAE权限一样,再核对一遍)
  • 确保Cloud SQL实例处于运行状态
  • 测试GCE实例能不能通Cloud SQL的5432端口,用telnet <SQL_IP> 5432或者nc -zv <SQL_IP> 5432试试

内容的提问来源于stack exchange,提问作者Anthony M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:54:28