Avez-vous réussi à configurer votre proxy nginx sur Heroku?

Avez-vous réussi à configurer votre proxy node + nginx sur Heroku?

Pourriez-vous, s’il vous plaît, me dire comment vous avez organisé la structure des répertoires et les fichiers de chaque répertoire avant de faire “git push heroku master”? Quel buildpack avez-vous utilisé?

Je reçois le message “Push rejeté, aucune application prise en charge par Cedar n’a été détectée” chaque fois que je fais “git push heroku master”. J’ai mis un fichier “nginx.conf.erb” dans un répertoire “/ conf”.

Je vous remercie.

J’ai utilisé une configuration Node.js + NGINX sur heroku pour de nombreux projets. De cette manière, nginx handle peut servir des fichiers statiques, la mise en cache, le transfert par proxy vers d’autres serveurs et le transfert par proxy vers plusieurs processus de noeud.

Utilisez le buildpack multi-buildpack ( https://github.com/ddollar/heroku-buildpack-multi ).
Il vous permet de spécifier un fichier .buildpacks qui fait référence à plusieurs buildpacks. Dans mon fichier .buildpacks, j’utilise le buildpack Heroku Node par défaut et un fork d’un buildpack nginx que j’ai reconstruit pour inclure le support SSL.

https://github.com/theoephraim/nginx-buildpack.git https://github.com/heroku/heroku-buildpack-nodejs.git 

Le buildpack nginx utilise un fichier nginx.conf.erb qui peut référencer les vars ENV. Vous devez lui dire d’écouter sur le port spécifié par heroku dans la variable d’environnement appelée “PORT”

 listen <%= ENV["PORT"] %>; 

Ensuite, votre serveur de noeud démarre sur le port de votre choix, par exemple 5001, et dans votre configuration nginx, vous pouvez configurer un proxy pour votre application de noeud:

 location / { proxy_pass http://127.0.0.1:5001; } 

Remarque: votre procfile doit utiliser une commande start-nginx spéciale (partie du buildpack nginx) qui appelle ensuite tout ce que vous lui transmettez. Dans mon cas, j’utilise toujours pour exécuter mon application de noeud:

 web: bin/start-nginx ./node_modules/.bin/forever app.js 

Et dans votre fichier de noeud principal, vous devez créer un fichier lorsqu’il a démarré avec succès pour signaler au buildpack nginx qu’il doit commencer à écouter.

 fs.openSync('/tmp/app-initialized', 'w'); 

Il y a une explication complète sur la façon d’utiliser le buildpack nginx dans le fichier readme @ https://github.com/theoephraim/nginx-buildpack

Cet article contient des instructions sur la configuration de nginx en tant que proxy sur Heroku, conjointement avec OpenResty, Lua et LuaRocks. node.js n’est pas mentionné. Il utilise ce buildpack . Je n’ai pas essayé moi-même, mais il semble que quelqu’un l’ait fait fonctionner.

Sur Heroku, cette configuration est utilisée avec succès par moi-même une fois le buildpack installé:

 upstream node_entry { server unix:/tmp/nginx.socket fail_timeout=0; } server { listen <%= ENV['PORT'] %>; server_name localhost; keepalive_timeout 5; location / { [other settings…] proxy_pass http://node_entry; } } 

Ensuite, dans votre fichier app.js, vous pouvez vous connecter avec:

 Server.listen('/tmp/nginx.socket');