Je fais de la programmation web depuis un moment et je connais bien la stack LAMP. J’ai décidé d’essayer de jouer avec la stack nginx / starman / dancer et je suis un peu perplexe sur la façon de comprendre, à un niveau élevé, comment toutes les pièces sont liées les unes aux autres. Mettre en place la stack ne semble pas aussi simple que de mettre en place la stack LAMP, mais c’est probablement parce que je ne comprends pas vraiment comment les pièces sont liées.
Je comprends le rôle joué par nginx – un serveur Web / proxy léger – mais je suis confus quant à la relation entre starman et pgsi, plack et dancer.
J’apprécierais une ventilation de haut niveau de la façon dont ces pièces sont liées les unes aux autres et pourquoi chacune est nécessaire (ou pas nécessaire) pour obtenir la configuration de la stack. Merci!
J’ai passé le dernier jour à lire les différentes composantes et je pense avoir assez de compréhension pour répondre à ma propre question. La plupart de mes réponses se trouvent à divers endroits sur le Web, mais nous espérons qu’il sera utile de mettre toutes les pièces en un seul endroit:
Dancer : Un framework d’application web pour Perl. Genre d’équivalent de Ruby on Rails. Ou plus précisément, un équivalent de Sinatra pour Ruby (la différence est que Sinatra est un framework minimaliste, alors que Ruby on Rails est un framework Web plus complet). En tant que personne qui traitait avec PHP et n’avait pas vraiment utilisé de framework Web auparavant, j’étais un peu confus quant à la manière dont cela se rapportait à la stack de serveurs. Le but des frameworks Web est de faire abstraction des tâches courantes très fréquemment effectuées dans les applications Web, telles que la conversion de requêtes de firebase database en objects / structures de données dans l’application Web.
Installation (sur Ubuntu):
sudo apt-get install nginx sudo apt-get install build-essential curl sudo cpan App :: cpanminus sudo cpanm Starman sudo cpanm Task :: Plack sudo apt-get install libdancer-perl
CD danseuse -a mywebapp sudo plackup -s Starman -p 5001 -E deployment --workers = 10 -a mywebapp / bin / app.pl
Maintenant, vous aurez un serveur starman exécutant votre application Dancer sur le port 5001. Pour que nginx envoie du trafic vers le serveur, vous devez modifier
/etc/nginx/nginx.conf
et append une règle quelque chose comme ceci à la section http:
serveur { nom_serveur permanentinvesting.com écouter 80; location / css / { alias / home / ubuntu / mywebapp / public / css /; expire 30d; access_log off; } emplacement / { proxy_pass http: // localhost: 5001; proxy_set_header X-Real-IP $ remote_addr; } }
La première règle de localisation spécifie que nginx doit gérer le contenu statique du répertoire / css en le récupérant
/ home / ubuntu / mywebapp / public / css /
. La seconde règle d’emplacement indique que le trafic vers le serveur Web sur le port 80 doit être envoyé au serveur Starman pour qu’il le gère. Maintenant, il suffit de lancer nginx:
sudo service nginx start
Votre réponse est correcte jusqu’à présent, mais il serait préférable de configurer nginx de la manière suivante:
server { listen 80; server_name foo.example.com; location / { # Serve static files directly: if (-f $request_filename) { expires 30d; break; } # Pass on other requests to Dancer app proxy_pass_header Server; proxy_pass http://localhost:5001/; } }
Ceci permet à nginx de servir tous les fichiers statiques (JavaScript et images) et pas seulement le css.
Cet exemple est tiré de 2011 Perl Dancer Advent 🙂
Depuis le wiki nginx:
“IfIsEvil … Directive si a des problèmes lorsqu’elle est utilisée dans un contexte de localisation, dans certains cas, elle ne fait pas ce que vous attendez mais quelque chose de complètement différent. … ”
Une meilleure configuration est la suivante:
server { listen 80; server_name foo.example.com; location / { # Checks the existence of files and uses the first match try_files $uri $uri/ @dancer; } location @dancer { # Pass on other requests to Dancer app proxy_pass_header Server; proxy_pass http://localhost:5001/; } }
Correction pour la réponse de s.magri :
location @dancer { # Pass on other requests to Dancer app proxy_pass_header Server; proxy_pass http://localhost:5001; }
J’ai dû supprimer la barre oblique finale dans la dernière directive proxy_pass. Ma version de nginx (1.10.3) ne démarrera pas avec la barre oblique finale.