Servir des ressources statiques et des médias séparément de meteor avec nginx?

Venant de Django, je suis habitué à servir mes ressources et supports statiques (y compris les téléchargements) séparément du wsgi principal ou de toute autre application. Cette structure de fichier plat est facile à naviguer et à gérer.

Je ne peux pas sembler trouver des exemples de la façon de le faire (servir des actifs statiques / médias séparément) avec Meteor.

  1. Existe-t-il une approche standard?

  2. Existe-t-il des packages fournissant cette fonctionnalité?

Mes objectives sont les suivants:

  1. pour pouvoir naviguer de manière plus intuitive dans toutes les ressources et tous les supports statiques et y accéder depuis une URL accessible au public sans avoir à reconstruire à chaud l’application meteor. Le dossier “public” ne le fait pas pour moi … surtout pour les médias téléchargés.

  2. télécharger sur ce chemin système (qui est distinct de l’application meteor principale) soit manuellement lors de la migration d’une application ou via une application / package personnalisée que j’écris.

  3. parcourir / parsingr le chemin de l’application / package meteor

Si tous vos actifs statiques ont un chemin commun, par exemple /static/... , vous pouvez indiquer à nginx des alias requêtes sur ce chemin avec un répertoire

 location /static { alias /path/to/static/assets; } 

Vous pouvez configurer un serveur de fichiers dans votre application meteor pour les servir en utilisant le module node fs puis servir en utilisant quelque chose comme Picker ou vous pouvez append un gestionnaire de connexion à Meteor ici si cela ne fonctionne pas.

Meteor ignorera les répertoires masqués par défaut afin que vous puissiez placer les éléments dans votre répertoire d’application si vous voulez quelque chose comme .assets/ , sinon n’importe où sur le système de fichiers auquel l’utilisateur exécutant meteor peut accéder.

Voici un serveur de travail pour les fichiers texte que je viens de rassembler. Vous devrez faire des meteor add meteorhacks:picker premier:

 if (Meteor.isServer) { var fs = Npm.require('fs'); Picker.route('/asset/:name', function(params, req, res) { fs.readFile('/home/users/someuser/media/' + params.name, function(err, file) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(file.toSsortingng()); }); }); } 

Si vous le souhaitez pour des raisons de performances et d’évolutivité (voir mon commentaire), vous devez utiliser un proxy Caching. Initialement, le proxy récupérera directement un fichier statique de l’application Meteor, mais les requêtes suivantes seront envoyées depuis son cache.

Cet article ( nginx-caching ) explique comment configurer un proxy de mise en cache avec Nginx en général. Meteorpedia a également publié un article expliquant comment configurer un cache Nginx spécialement conçu pour une application Meteor.

Disons que votre application de meteor est à /www/meteor et que vous voulez servir des ressources statiques à partir d’un répertoire situé en dehors de l’arborescence /meteor pour que les ajouts / modifications / suppressions de fichiers ne provoquent pas le redémarrage de l’application, par exemple /www/static

Donc, commencez par définir votre chemin Meteor dans nginx normalement, puis définissez une racine différente pour le chemin statique, ex:

 location /static { root /www/static; } 

Documentation