我正在使用firebase模拟器在我的机器上托管一些GCF函数。它们被配置为在localhost:5001上运行/host。这很管用。
我现在在我的应用程序中使用谷歌任务,我的任务需要调用GCF函数。任务不是在本地运行的,所以我已经将我的机器设置为通过公共IP地址访问,并打开了端口5001以允许该端口上的流量。想法是谷歌任务可以调用我机器上的函数,这样我就可以正确地进行测试。
我似乎无法让模拟器与任何外部公共IP地址一起工作。这是不可能的吗?如果是,我该如何配置?
更新,这里没有太多代码可供查看。。。我只是想知道你是否可以将模拟器配置为在公共端口上侦听
{
"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访问http://192.168.1.216:5001
{
"functions": {
"predeploy": [
"npm --prefix "$RESOURCE_DIR" run lint"
],
"source": "functions"
},
"emulators": {
"functions": {
"port": 5001,
"host": "0.0.0.0"
},
"pubsub": {
"port": 8085
},
"ui": {
"enabled": true
}
}
}
现在,使用我的公共ip,它是使用NAT FORWARDING设置的,它无法访问该网站http://108.49.78.181:5001
没有那么多的代码,这可能吗?如果是的话,我很喜欢一些如何做到这一点的例子
访问函数应该像这样
http://localhost:5001/{project_name}/us-central1/{function_name}
{project_name}必须替换为firebaserc中项目的名称
{function_name}必需替换为从js文件导出的函数的名称
直接请求http://localhost:5001/
应返回Not Found
从外部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,并接受防火墙中的端口
是您可以从公共IP地址或专用网络中的专用IP地址访问此地址。您所需要做的就是从firebase.json文件更改主机。
{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"emulators": {
"functions": {
"host": "192.168.0.240",
"port": 5001
},
"firestore": {
"host": "192.168.0.240",
"port": 8080
},
"ui": {
"host": "192.168.0.240",
"enabled": true
},
"pubsub": {
"host": "192.168.0.240",
"port": 8085
}
}
}
现在
"host": "192.168.0.240",
这可以是任何IP地址或主机,如localhost或10.20.0.25,或如上所述的私有IP。