托管一个 Node.js 机器人(express 和 botkit)

Host a Node.js bot (express and botkit)

我刚刚在 node.js 中为 Cisco Webex Teams 应用程序制作了一个机器人。我的机器人使用 "express" 和 "botkit"。 "Express" 需要侦听端口“3000”,"Botkit" 需要侦听端口“8080”。

我试过 heroku.com 但它不接受两个预定义端口并且不动态保存文件 (fs.write)

var PUBLIC_URL = "http://a796e3b7.ngrok.io";
var port ='3000';
var ACCESS_TOKEN ='xxx';
var SECRET = "xxx";

var express = require('express');
var app = express();

var Botkit = require('botkit');
var controller = Botkit.webexbot({
    log: true,
    public_address: PUBLIC_URL,
    access_token: ACCESS_TOKEN,
    secret: SECRET,
    webhook_name: process.env.WEBHOOK_NAME || 'Email2Webex',
});

controller.setupWebserver(8080, function(err, webserver) {
    controller.createWebhookEndpoints(webserver, bot, function() {
        console.log("Webhooks set up!");
    });
});

app.post('/mailgun', upload.any(),function(req, res, next){

  res.end('ok');

});

app.listen(port);

目前我使用 ngrok 在我的计算机上本地托管 bot,我希望能够在服务器上托管它,这样我就不必担心了。我该怎么办?

您无法在 Heroku 应用程序上设置端口。 Heroku 通过 PORT 环境变量设置你应该使用的端口,你应该通过 process.env.PORT 使用它。一般来说,部署的应用程序不应该 运行 在开发端口上,例如 8080 - 如果它是一个 HTTP 服务器,它必须在端口 80 上侦听,例如。

为了让两个应用程序同时监听,我建议您重构您的代码并将您的机器人和您的应用程序包含到一个单一的快速服务器中,该服务器将在 Heroku PORT 定义的端口上进行监听环境变量。

关于对文件系统的访问,使用它是有可能的,但是有很高的安全限制,因此可能 运行 在您的机器上的代码很可能在服务器上被破坏。一般来说,在 Heroku 中直接访问文件系统是一个坏主意,除了对已部署文件的只读操作。这部分是因为文件系统是 ,所以不要 假设 您写入的文件将始终存在。不过,大多数与使用文件系统的注意事项相关的问题都可以通过使用 Heroku 提供的数据库或文件存储功能来解决。