Разместите бота Node.js (экспресс и боткит)

Я только что сделал бота в node.js для приложения Cisco Webex Teams. Мой бот использует «экспресс» и «боткит». «Экспресс» требует прослушивания порта «3000», а «Боткит» прослушивания порта «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 для локального размещения бота на своем компьютере, и я хочу иметь возможность разместить его на сервере, чтобы мне не пришлось об этом беспокоиться. Как я могу сделать ?


person SkroS    schedule 30.03.2019    source источник


Ответы (1)


Вы не можете установить порт в приложениях Heroku. Heroku устанавливает порт, который вы должны использовать, через переменную окружения PORT, и вы должны использовать его через process.env.PORT. Вообще говоря, развернутые приложения не должны работать на портах разработки, таких как 8080 — если это HTTP-сервер, он должен, например, прослушивать порт 80.

Чтобы два приложения прослушивали одновременно, я предлагаю вам реорганизовать свой код и включить как вашего бота, так и ваше приложение в один экспресс-сервер, который будет прослушивать порт, определенный переменной среды Heroku PORT.

Что касается доступа к файловой системе, ее можно использовать на грани возможного, но существуют высокие ограничения безопасности, поэтому код, который может работать на вашем компьютере, скорее всего, сломается на сервере. Вообще говоря, обращаться к файловой системе напрямую в Heroku — плохая идея, за исключением действий только для чтения с развернутыми файлами. Отчасти это связано с тем, что файловая система эфемерна, поэтому не предполагайте, что ваши записанные файлы всегда будут будь там. Однако большинство проблем, связанных с предостережениями об использовании файловой системы, можно решить с помощью функций базы данных или хранилища файлов, предоставляемых Heroku.

person Nino Filiu    schedule 30.03.2019