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

PHP动态网站:Heroku与Google Cloud SQL连接及IPv4必要性咨询

嘿,刚好我之前帮朋友弄过类似的低成本部署配置,来给你一步步说清楚怎么把Heroku上的PHP应用和Google Cloud SQL连起来,还有你关心的IPv4问题~

连接Heroku PHP应用到Google Cloud SQL的两种方案

考虑到你是面向少量用户的低成本需求,我推荐两种方案,其中第一种更安全也更省事儿:

方案1:使用Cloud SQL Auth Proxy(推荐,无需公开IPv4)

这个方法不需要把你的Cloud SQL实例暴露到公网,通过Google的代理工具建立安全连接,完全符合低成本+安全的需求。

步骤1:配置Google Cloud SQL实例

  • 先在Google Cloud控制台确认你的SQL实例已经创建完成,记下它的连接名(格式是你的项目ID:实例区域:实例名称,比如my-project:us-central1:my-sql-instance)。
  • 创建一个新的服务账号,给它分配Cloud SQL Client权限,然后下载这个账号的JSON密钥文件(后面会用到)。

步骤2:在Heroku上配置环境变量

  • 首先把服务账号的JSON内容设为环境变量:
    heroku config:set CLOUD_SQL_CREDENTIALS='{"type": "service_account", "project_id": "你的项目ID", ...}'
    
    (把...替换成你下载的JSON里的完整内容)
  • 接着设置数据库的基础连接信息:
    heroku config:set DB_HOST=127.0.0.1 DB_PORT=3306 DB_NAME=你的数据库名 DB_USER=你的数据库用户名 DB_PASSWORD=你的数据库密码
    
  • 最后设置Cloud SQL实例的连接名:
    heroku config:set CLOUDSQL_INSTANCES=你的项目ID:实例区域:实例名称=tcp:3306
    

步骤3:添加Cloud SQL Auth Proxy的Buildpack到Heroku

Buildpack会帮你自动安装和运行代理工具,直接运行命令:

heroku buildpacks:add https://github.com/GoogleCloudPlatform/heroku-buildpack-cloudsql.git

(记得先确保你的Heroku应用已经设置了PHP的buildpack,没有的话先加:heroku buildpacks:set heroku/php)

步骤4:PHP代码里的数据库连接

因为代理已经把本地的3306端口转发到了Cloud SQL实例,所以直接连接本地地址就行,比如用PDO:

$dsn = sprintf(
    'mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4',
    getenv('DB_HOST'),
    getenv('DB_PORT'),
    getenv('DB_NAME')
);
try {
    $pdo = new PDO($dsn, getenv('DB_USER'), getenv('DB_PASSWORD'));
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die('数据库连接失败: ' . $e->getMessage());
}

方案2:使用公共IPv4连接(需配置公网IP)

如果你不想用代理,也可以直接通过公网IP连接,但安全性会低一些,适合对配置步骤更敏感的场景:

步骤1:开启Cloud SQL实例的公共IPv4

  • 进入Google Cloud控制台的SQL实例页面,切换到「连接」标签,找到「公共IP」模块,点击「添加网络」。
  • 这里可以添加Heroku的出站IP段,嫌麻烦的话也可以暂时允许0.0.0.0/0(不推荐长期这么做,毕竟公网暴露有风险)。
  • 记下实例的公共IPv4地址(比如192.168.1.100)。

步骤2:在Heroku上设置数据库环境变量

直接把公网IP填到DB_HOST里:

heroku config:set DB_HOST=你的实例公网IP DB_PORT=3306 DB_NAME=你的数据库名 DB_USER=你的用户名 DB_PASSWORD=你的密码

步骤3:PHP代码连接

和方案1的代码几乎一样,只是DB_HOST变成了公网IP,直接用就行。

关于IPv4的关键问题
  • 如果用方案1(Cloud SQL Auth Proxy):你的Google Cloud SQL实例完全不需要配置公共IPv4,甚至可以只启用私有IP(私有IP没有额外费用,更安全),因为代理是通过Google内部网络建立的连接。
  • 如果用方案2(公网IP连接):那必须配置公共IPv4,不然Heroku的应用根本没法通过公网访问到你的数据库实例。

最后补充一句:Heroku的免费dyno虽然有休眠限制,但少量用户完全够用;Google Cloud SQL的db-f1-micro实例每月有免费额度,刚好符合你的低成本需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:41:49