Question Servir des ressources statiques et des médias séparément de météore 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 objectifs 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 / analyser le chemin de l'application / package meteor


13
2017-10-01 05:08


origine


Réponses:


Si tous vos actifs statiques ont un chemin commun, par exemple /static/..., alors vous pouvez dire nginx à alias demandes à ce chemin avec un répertoire

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

10
2017-10-08 09:50



Vous pouvez configurer un serveur de fichiers dans votre application meteor pour les servir en utilisant le noeud fs le module sert ensuite en utilisant quelque chose comme Cueilleur ou il y a un exemple d'ajout d'un gestionnaire de connexion à Meteor ici si cela ne fonctionne pas.

Meteor ignorera les répertoires caché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 peut accéder.

Voici un serveur de travail pour les fichiers texte que je viens de rassembler. Vous devrez faire 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.toString());
    });
  });
}

3
2017-10-07 08:51



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) est une bonne lecture sur la façon de configurer un proxy de mise en cache avec Nginx en général. En outre, Meteorpedia a un article expliquer comment configurer un cache Nginx spécialement conçu pour une application Meteor.


3
2017-10-09 21:26



Disons que votre application est à /www/meteor et vous voulez servir des ressources statiques à partir d’un répertoire situé en dehors du /meteor arbre pour que le fichier ajoute / change / supprime ne provoque pas le redémarrage de l'application, par exemple /www/static

Donc, d'abord définir votre chemin Meteor dans nginx normalement, puis définir un autre racine pour le chemin statique, ex:

location /static {
  root /www/static;
}

Documentation


1
2017-10-11 06:45