无法将 Node.js 应用程序连接到云端 SQL 数据库
Trouble connecting Node.js app to Cloud SQL Database
我需要部署一个可以与数据库交互的 node.js 应用程序。我已经配置了云 SQL 数据库,为此我已将我的计算机 public IP 列入白名单。当我在本地 运行 我的应用程序时,一切都很好,我可以访问我的数据。但是,在使用 Google App Engine 进行部署时,我不知道如何连接到我的数据库。到目前为止我做了什么:
- 正在创建一个包含
runtime: nodejs12
. 的 app.yaml
文件
- 正在更改配置文件中的数据库主机。不确定我是否必须编写 Cloud SQL 的 public IP(就像我在本地开发中所做的那样),
localhost
(因为 GAE 和 Cloud SQL 都托管在同一台服务器上)或完整的 INSTANCE_CONNECTION_NAME
.
- 在 IAM 管理面板上根据
Cloud SQL Client
角色到适当的服务
我阅读了我可能必须使用代理的文档。我真的不知道该怎么办,所以我什么也没做。您认为这是一种值得探索的方式吗?
提前致谢。
文档页面在这里:
https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard
对于 Public IP 连接:
使用 Unix 套接字连接
正确配置后,您可以使用以下格式将您的服务连接到云 SQL 实例的 unix 域套接字:
/cloudsql/INSTANCE_CONNECTION_NAME
这些连接自动加密,无需任何额外配置。下面显示的代码示例摘自 GitHub 站点上更完整的示例。单击 GitHub 上的查看以查看更多信息。
警告:基于 Linux 的操作系统的最大套接字路径长度为 107 个字符。如果路径的总长度超过此长度,您将无法连接 App Engine 的套接字。
cloud-sql/mysql/mysql/server.jsView GitHub
const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"
// Establish a connection to the database
return await mysql.createPool({
user: process.env.DB_USER, // e.g. 'my-db-user'
password: process.env.DB_PASS, // e.g. 'my-db-password'
database: process.env.DB_NAME, // e.g. 'my-database'
// If connecting via unix domain socket, specify the path
socketPath: `${dbSocketPath}/${process.env.INSTANCE_CONNECTION_NAME}`,
// Specify additional properties here.
...config
});
}
如果您使用私有 IP 连接,请忽略所有这些,您可以只使用端口为 3306(对于 MySQL)或 5432(对于 Postgres)的私有 IP。
我需要部署一个可以与数据库交互的 node.js 应用程序。我已经配置了云 SQL 数据库,为此我已将我的计算机 public IP 列入白名单。当我在本地 运行 我的应用程序时,一切都很好,我可以访问我的数据。但是,在使用 Google App Engine 进行部署时,我不知道如何连接到我的数据库。到目前为止我做了什么:
- 正在创建一个包含
runtime: nodejs12
. 的 - 正在更改配置文件中的数据库主机。不确定我是否必须编写 Cloud SQL 的 public IP(就像我在本地开发中所做的那样),
localhost
(因为 GAE 和 Cloud SQL 都托管在同一台服务器上)或完整的INSTANCE_CONNECTION_NAME
. - 在 IAM 管理面板上根据
Cloud SQL Client
角色到适当的服务
app.yaml
文件
我阅读了我可能必须使用代理的文档。我真的不知道该怎么办,所以我什么也没做。您认为这是一种值得探索的方式吗?
提前致谢。
文档页面在这里:
https://cloud.google.com/sql/docs/mysql/connect-app-engine-standard
对于 Public IP 连接:
使用 Unix 套接字连接
正确配置后,您可以使用以下格式将您的服务连接到云 SQL 实例的 unix 域套接字:
/cloudsql/INSTANCE_CONNECTION_NAME
这些连接自动加密,无需任何额外配置。下面显示的代码示例摘自 GitHub 站点上更完整的示例。单击 GitHub 上的查看以查看更多信息。
警告:基于 Linux 的操作系统的最大套接字路径长度为 107 个字符。如果路径的总长度超过此长度,您将无法连接 App Engine 的套接字。
cloud-sql/mysql/mysql/server.jsView GitHub
const dbSocketPath = process.env.DB_SOCKET_PATH || "/cloudsql"
// Establish a connection to the database
return await mysql.createPool({
user: process.env.DB_USER, // e.g. 'my-db-user'
password: process.env.DB_PASS, // e.g. 'my-db-password'
database: process.env.DB_NAME, // e.g. 'my-database'
// If connecting via unix domain socket, specify the path
socketPath: `${dbSocketPath}/${process.env.INSTANCE_CONNECTION_NAME}`,
// Specify additional properties here.
...config
});
}
如果您使用私有 IP 连接,请忽略所有这些,您可以只使用端口为 3306(对于 MySQL)或 5432(对于 Postgres)的私有 IP。