Heroku és un sistema de PaaS (Platform as a Service) que ens permet posar en producció aplicacions sense necessitat de muntar tot un servidor complert, amb el manteniment que comportaria. Per tant, ens facilita molt el desplegament d'aplicacions als developers i ens estalvia feina de manteniment.
Referències:
Podem crear app nova o bé clonar alguna app que tinguem a un repositori:
Per crear una aplicació de zero amb node:
$ mkdir node1 $ cd node1 $ npm init $ npm install ejs express $ git init
Podem clonar un projecte que tinguem a Github:
$ git clone https://github.com/myuser/projecte.git
Si mirem el codi de la app NodeJS d'exemple del tutorial oficial de Heroku veurem que el PORT que estableix el treu de les variable d'entorn (accedeix via process.env.PORT
):
const PORT = process.env.PORT || 5000
Si no troba cap variable d'entorn, agafa el port 5000, això facilita treballar en local per desenvolupament.
Assegura't que el teu codi té aquesta línia i que no té el port fix, sinó que, com a l'exemple, l'agafa de la variable d'entorn.
Creem una app a Heroku. Oju que el nom que posis a la app és què després permetrà accedir públicament a nom_de_la_meva_app.herokuapp.com :
$ heroku create <nom_de_la_meva_app>
Ara hauries de crear els teus arxius de NodeJS, en partiular:
views
i les plantilles que necessitis.gitignore
amb, com a mínim, la carpeta node_modules/
Perquè funcioni el desplegament a Heroku cal tenir un Procfile
. Al tutorial oficial arrenca la app amb «npm start», però si la nostra app l'arrenquem amb node index.js
, aquest és el codi que haurem de ficar-hi, precedit de web:
per indicar que és el procés de la web pública:
$ echo "web: node index.js" > Procfile
Un cop enllestit, pots pujar el codi i posar-lo en producció amb
$ git add . $ git commit -am "primer commit" $ git push heroku master $ heroku open
Comprova que no hi ha cap error amb
$ heroku logs --tail
Si no arrenca correctament, assegura't que tens un script d'arrencada a l'arxiu package.json
que arrenca correctament la teva aplicació i que a la seccio main
tens tb el mateix script:
{ "name": "node1", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ... }
No és imprescindible que l'arxiu principal sigui index.js
, pots customitzar-ho aquí.
Ara l'objectiu serà pujar la nostra aplicació de la API login en un entorn de producció.
curl
.
És molt recomanable, imprescindible millor dit, posar les variables d'entorn (com usuaris i contrasenyes de serveis externs de DB, per exemple) en un arxiu .env
que NO hem de carregar al repositori de codi (usuari i contrasenya son paràmetres de producció i per seguretat no han d'anar al repo).
Inclou .env
a l'arxiu .gitignore
.
Per carregar les variables del .env , utilitza el paquet 'dotenv' de npm.
Però clar, si no està inclòs al repo de GIT, com pugem les dades de config a Heroku?
El truc és utilitzar les config vars de Heroku enlloc de l'arxiu .env
.
Per veure les variables
$ heroku config
Per ajustar-ne alguna:
$ heroku config:set DBUSER=admin