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

部署在Google App Engine的Django应用无法连接Google Cloud SQL

Django部署至Google App Engine后无法连接Cloud SQL

本地运行正常,但部署后出现连接错误:

could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port 5432?

settings.py代码片段

DATABASES = {"default": env.db()}


# If the flag as been set, configure to use proxy
if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None):
    DATABASES["default"]["HOST"] = "127.0.0.1"
    DATABASES["default"]["PORT"] = 5432

# [END gaestd_py_django_database_config]
# [END db_setup]

# Use a in-memory sqlite3 database when testing in CI systems
# TODO(glasnt) CHECK IF THIS IS REQUIRED because we're setting a val above
if os.getenv("TRAMPOLINE_CI", None):
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": os.path.join(BASE_DIR, "db.sqlite3"),
        }
    }

已按官方指南配置应用,Cloud SQL网络标签页显示**"App Engine授权:默认授权此项目中的所有应用。"**

已尝试的排查步骤:

  • 启用Cloud SQL Admin API
  • 为App Engine服务账号添加Cloud SQL Admin角色
  • 测试App Engine到SQL实例的连通性
  • 重启Cloud SQL实例和App Engine实例
  • 云控制台日志报错:
psycopg2.OperationalError: could not connect to server: Connection refused

at .connect ( /layers/google.python.pip/pip/lib/python3.9/site-packages/psycopg2/__init.py:122 )
at .get_new_connection ( /layers/google.python.pip/pip/lib/python3.9/site-packages/django/db/backends/postgresql/base.py:215 )
at .inner ( /layers/google.python.pip/pip/lib/python3.9/site-packages/django/utils/asyncio.py:26 )
at .connect ( /layers/google.python.pip/pip/lib/python3.9/site-packages/django/db/backends/base/base.py:263 )
at .inner ( /layers/google.python.pip/pip/lib/python3.9/site-packages/django/utils/asyncio.py:26 )
at .ensure_connection ( /layers/google.python.pip/pip/lib/python3.9/site-packages/django/db/backends/base/base.py:282 )

解决方法

1. 确认USE_CLOUD_SQL_AUTH_PROXY环境变量配置

部署到App Engine时,需在app.yaml中明确设置该变量为true,否则代码不会触发代理连接逻辑:

env_variables:
  USE_CLOUD_SQL_AUTH_PROXY: 'true'

2. 检查数据库连接URL格式

env.db()依赖DATABASE_URL环境变量,需确保其格式正确:
postgres://<用户名>:<密码>@/<数据库名>?host=/cloudsql/<项目ID>:<区域>:<实例名>

3. 补全服务账号权限

除Cloud SQL Admin角色外,需为App Engine服务账号添加Cloud SQL Client角色,该角色负责实际的数据库连接权限。

4. 配置Cloud SQL实例连接信息

在app.yaml中添加实例连接名称,确保代理能正确关联到目标实例:

beta_settings:
  cloud_sql_instances: <项目ID>:<区域>:<实例名>

若不使用代理,需将settings.py中的HOST直接设为实例连接名称,而非127.0.0.1。

5. 验证数据库用户权限

确认数据库用户拥有目标数据库的读写权限,密码未过期、未被锁定。


内容的提问来源于stack exchange,提问作者Ayush Agarwalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:22:33