Google cloud functions 您能否运行/托管可从公共ip访问的firebase emulator?

Google cloud functions 您能否运行/托管可从公共ip访问的firebase emulator?,google-cloud-functions,firebase-tools,google-cloud-tasks,Google Cloud Functions,Firebase Tools,Google Cloud Tasks,我正在使用firebase emulator在我的机器上托管一些GCF函数。它们被配置为在localhost:5001上运行/host。这很有效 我现在在我的应用程序中使用谷歌任务,我的任务需要调用GCF函数。任务不在本地运行,因此我已将我的计算机设置为通过公共IP地址访问,并打开了端口5001以允许该端口上的通信。这个想法是Google任务可以在我的机器上调用这个函数,所以我可以正确地进行测试 我似乎无法让模拟器与任何外部公共IP地址一起工作。这是不可能的吗?如果是,我如何配置 更新后,这里没

我正在使用firebase emulator在我的机器上托管一些GCF函数。它们被配置为在localhost:5001上运行/host。这很有效

我现在在我的应用程序中使用谷歌任务,我的任务需要调用GCF函数。任务不在本地运行,因此我已将我的计算机设置为通过公共IP地址访问,并打开了端口5001以允许该端口上的通信。这个想法是Google任务可以在我的机器上调用这个函数,所以我可以正确地进行测试

我似乎无法让模拟器与任何外部公共IP地址一起工作。这是不可能的吗?如果是,我如何配置

更新后,这里没有太多代码可供查看…我只是想知道是否可以将模拟器配置为在公共端口上侦听。以下是默认的firebase.json文件

   {
     "functions": {
        "predeploy": [
         "npm --prefix \"$RESOURCE_DIR\" run lint"
    ],
    "source": "functions"
  },
  "emulators": {
    "functions": {
      "port": 5001
    },
    "pubsub": {
      "port": 8085
    },
    "ui": {
      "enabled": true
    }
  }
}
在我的研究中,我发现您可以添加“主机”属性,以允许您的本地网络使用“主机”访问仿真器:“0.0.0.0”,因此它看起来是这样的:这允许通过我的本地ip访问

现在,使用我的公共ip(使用NAT转发设置),它无法访问该站点


没有那么多的代码,这可能吗?如果是的话,我想举一些例子来说明如何操作。

访问该函数应该是这样的

http://localhost:5001/{project_name}/us-central1/{function_name}
{project_name}必须替换为.firebaserc中的项目名称
{function_name}必须替换为从js文件导出的函数名

请求<代码>http://localhost:5001/直接返回
未找到

从外部IP访问

将主机与“0.0.0.0”一起使用意味着服务器将侦听所有ip地址

默认情况下,firebase仅接受localhost,但您可以通过为每个特定模拟器使用firebase.json中的host选项来更改此设置

"hosting": {
   "port": 5000,
   "host": "0.0.0.0"
},
"functions": {
   "port": 5001,
   "host": "0.0.0.0"
}
还有其他像firestore,auth,ui,数据库

使用启动模拟器

 firebase emulators:start

别忘了将路由器转发到运行仿真器的计算机的本地ip,并在防火墙中接受端口

我认为您必须提供未按预期方式工作的代码和配置,以及任何日志和错误消息。你可能做了很多不正确的事情,但我们看不到任何错误。你的问题中应该有足够的信息,任何人都可以重现这个问题。我在更新中添加了更多信息,但这不是真正的代码问题,而是一个是否可以让firebase emulator监听公共ip的联合配置问题。有可能吗?您可以通过简单地尝试访问公开的IP和端口并查看它是否连接来测试这一点。我强烈怀疑emulator的编码是否会断然拒绝来自本地主机外部的请求。但是您可以在GitHub上看到自己的所有代码。因此,如果不指定“主机”属性,则无法连接到本地计算机上的服务,例如。您会得到“无法访问站点”…您只能通过。如果添加“主机”:“0.0.0.0”,您现在可以通过192.168.1.216:5001进行侦听,但它不会响应。我应该注意的是,我已经测试过使用精确的NAT转发()访问我的Web服务器,它可以正常工作。所以问题是如何配置主机以允许公共ip?我试着在这里使用公共ip,但它甚至没有启动。不知道。如果配置不能按预期工作,您可以在GitHub上提交一个问题。
 firebase emulators:start