web-dev-qa-db-fra.com

Heroku + node.js: J'ai un serveur qui utilise plusieurs ports. Comment puis-je obtenir Heroku pour les allouer?

Umm je vais essayer d'être plus clair ..

Dans un serveur d'applications, j'ai écrit dans node.js, j'ai un proxy interne pour plusieurs ports:

  • dans mon port 8080 j'ai mon api rest.
  • dans mon port 3000, j'ai mon serveur Push et le chat.

J'utilise le package npm subdomain-router pour le routage interne vers le port, en exposant les sous-domaines dans le "front-end" qui envoie en retour le proxy à ces ports.
démonstration de code: _ ​​(<some-app> n’est évidemment pas le nom réel de l’application))}

require('subdomain-router')
({
  Host: '<some-app>.herokuapp.com',
  subdomains:
  {
    '': 8080,   // <some-app>.herokuapp.com <=> ::8080   --WORKS--
    'api': 8080,  // api.<some-app>.herokuapp.com <=> ::8080
    'chat': 3000, // chat.<some-app>.herokuapp.com <=> ::3000
    'Push': 3000  // Push.<some-app>.herokuapp.com <=> ::3000
  }
}).listen(process.env.PORT || 5000);

L'API fonctionne très bien, bien que je ne puisse pas y accéder par le biais de <some-app>.herokuapp.com:8080, mais uniquement par le biais de <some-app>.herokuapp.com et laisser le module subdomain-router intérieur faire son travail de magie.
De plus, je ne peux pas accéder aux sous-domaines. Lorsque j'essaie d'accéder à api.<some-app>.herokuapp.com, je reçois une page d'erreur No such app de heroku.

TL; DR accéder à <some-app>.herokuapp.com fonctionne (redirection vers le chemin /v1 pour mon API), mais impossible d'accéder à <some-app>.herokuapp.com:8080, <some-app>.herokuapp.com:3000 ou chat.<some-app>.herokuapp.com.

Lorsque j'essaie d'accéder à mon API en spécifiant le port dans l'URL (comme ceci: <some-app>.herokuapp.com:8080), l'erreur suivante apparaît dans mon navigateur (google chrome): ERR_CONNECTION_REFUSED.

Ma supposition éclairée indique qu'il pourrait s'agir d'un problème lié à l'ouverture de ports dans heroku, mais je ne sais pas comment le faire (essayé de googler).
Cela n'explique pas pourquoi je ne peux pas accéder aux sous-domaines.

Apprécierait toute lumière apportée sur cette question.
Je suis nouveau dans heroku et ça commence à être vraiment frustrant.

Merci!
Amit

16
Amit Evron

Après quelques recherches, j'ai découvert que l'ouverture de ports dans Heroku est disabled et not allowed.

Le seul moyen consiste à utiliser sous-domaines puis in-app pour utiliser un module proxy (comme subdomain-router que j'utilise).

MAIS - Heroku ne vous permet pas de créer des sous-domaines sur leur domaine, ce qui signifie que your-app.herokuapp.com est fixe et ne peut pas avoir de sous-domaines.
Dans les manuels Heroku, ils vous demandent d’avoir votre propre domaine et votre fournisseur DNS pour le faire, en créant un alias (CNAME) dans le tableau DNS de vos paramètres de domaine, qui fera référence à votre domaine herokuapp, puis en utilisant la commande heroku domains:add pour ajouter votre domaine à la liste Origin autorisée.

Vous pouvez en lire plus ici . Il fournit toutes les informations dont vous avez besoin.

J'espère que ça a aidé certains.

15
Amit Evron

J'ai également appris cela aujourd'hui, j'ai appris que si vous exécutez un service sur un port de Heroku, vous pouvez toujours y accéder localement. Cela ne fonctionnerait pas pour le souci de l'utilisateur ci-dessus mais cela a résolu mon problème, ce qui m'a amené à cette question.

1
Antoine