2017-08-16 3 views
0

J'essaye de déployer mon application sur mon ordinateur local pour simuler le processus de déploiement. Vous appelez cela le mode de mise en scène ou peu importe. Les outils que j'ai utilisés incluent pm2 et Nginx.Comment configurer expressjs pour servir index.html en mode production?

Je peux utiliser mon application Web lorsque j'exécute mon application en utilisant pm2 start server.js directement dans mon projet. Le client peut accéder au fichier index.html via un serveur Nginx. Mais je pense que ce n'est pas le mode de production à moins que j'utilise aussi --env production.

Je copie tous les fichiers nécessaires dans le répertoire dist de mon projet, configuré Nginx pour servir le contenu statique et dans mon code source, je veux utiliser

app.get('/', function(req, res) { 
    res.sendFile('index.html', {root: somePath}); 
}); 

pour permettre aux clients d'accéder à le fichier index.html sur le serveur express. Mais je ne suis pas sûr de savoir quoi mettre dans somePath? Je sépare le côté serveur et le côté client lorsque je déploie mon projet sur le serveur. Par exemple, mon côté serveur est sur /usr/path/server mais mon côté client est sur /etc/shared/html. Si je dérange avec les chemins, je recevrai un message d'erreur "interdit" de express lorsque j'accède index.html.

+0

je pense que vous devez utiliser ce https://github.com/expressjs/serve-static –

+0

@ArtemIlchenko J'utilise Nginx pour servir le contenu statique. Pourquoi devrais-je utiliser ce module? – newguy

Répondre

0

Si vous souhaitez une répétabilité de type production pendant le développement, vous devez implémenter la même fonctionnalité avec les mêmes outils.

De nos jours, docker compose est la meilleure solution pour résoudre ce problème. Comme début, vous devriez avoir deux conteneurs le premier avec nginx et le second avec pm2. Vous devez également lier/monter le volume des fichiers statiques sur nginx.

+0

Oui, je prévois d'utiliser docker plus tard. Mais à ce stade, je dois le mettre sur internet rapidement. – newguy

+0

À mon avis docker compose est la solution la plus simple pour démontrer votre application dans la production comme le style. Si vous avez besoin de quelque chose de plus rapide et sale, vous pouvez utiliser des hacks de code (par exemple: serve-static du conseil @ArtemIlchenko) ou des outils simples et gratuits pour publier sur internet (par exemple: https://c9.io) – galkin

0

Votre code devrait ressembler à ceci.

var path = require('path'); 
var virtualDirPath = process.env.virtualDirPath || ''; 
var appDir = path.dirname(require.main.filename) + virtualDirPath; 

appdir donnera le répertoire de l'environnement , d'où vous pouvez accéder au fichier html.

Hope it helps :)