Déploiement de l’application Meteor avec Docker et phusion-passenger

J’essaie de déployer une application Meteor sur mon VPS Ubuntu 14.04 (Trusty Tahr). J’utilise un registre Docker privé sur DockerHub, avec une configuration de compilation automatisée tirée de mon référentiel Git sur Bitbucket . Cela fonctionne vraiment bien.

Cependant, lorsque je lance mon conteneur, je ne peux pas voir l’application Meteor en cours d’exécution. J’ai lu à propos de phusion-passenger et Meteor dans leur documentation, mais je pense que le guide manque quelque chose, car je ne peux pas le faire fonctionner.

Mon approche a été d’utiliser meteor pour créer une application:

meteor create simple-wishes 

Cela crée un répertoire contenant un fichier CSS, HTML et JavaScript (et un dossier .meteor ). En dehors de ce répertoire, j’ai créé un fichier Dockerfile, ressemblant à ceci:

 FROM phusion/passenger-nodejs:0.9.14 MAINTAINER Søren Pedersen # Set correct environment variables. ENV HOME /root # Use baseimage-docker's init process. CMD ["/sbin/my_init"] # ssh ADD ssh/id_rsa.pub /tmp/your_key RUN cat /tmp/your_key >> /root/.ssh/authorized_keys && rm -f /tmp/your_key # install meteor RUN curl https://install.meteor.com | /bin/sh # Remove the default site RUN rm /etc/nginx/sites-enabled/default # Enable nginx RUN rm -f /etc/service/nginx/down # Setup app ADD webapp.conf /etc/nginx/sites-enabled/webapp.conf RUN mkdir /home/app/simple-wishes ADD simple-wishes /home/app/simple-wishes 

Le fichier webapp.conf référencé dans le fichier Docker ressemble à ceci:

 server { listen 80; server_name simple-wishes.com; root /home/app/simple-wishes/public; passenger_enabled on; passenger_user app; passenger_sticky_sessions on; passenger_set_cgi_param MONGO_URL mongodb://localhost:27017/meteor; passenger_set_cgi_param MONGO_OPLOG_URL mongodb://localhost:27017/local; passenger_set_cgi_param ROOT_URL http://simple-wishes.com; # Set these ONLY if your app is a Meteor bundle! #passenger_app_type node; #passenger_startup_file main.js; } 

Sur mon VPS, je lance un conteneur comme celui-ci:

 docker run -d -p 80:80 -p 2200:22 sohape/simplewishes 

Cela extrait l’image de DockerHub et démarre le conteneur en mode démon, en mappant les ports 80 et 22 sur les ports 80 et 2200 sur l’hôte.

Lorsque je fais une requête HTTP sur le serveur maintenant ( http://simple-wishes.com ), je reçois une erreur de nginx:

 502 Bad Gateway 

Je dois manquer une étape ici, mais je ne peux pas savoir quoi. J’espère donc que quelqu’un pourra me diriger dans la bonne direction.

L’hôte local à l’intérieur de votre conteneur Docker n’est pas le même localhost à l’extérieur. Vous pouvez utiliser --link pour lier les conteneurs si MongoDB se trouve dans son propre conteneur ou utilise une entrée DNS connue.

Lorsque vous exécutez Meteor sans regrouper votre application, Meteor lancera une instance MongoDB, mais pas sur le port MongoDB par défaut.

Vérifiez la réponse à la question sur le débordement de la stack Comment utiliser la MongoDB existante dans un projet Meteor? .

Vous pouvez essayer d’utiliser mon image Docker et voir comment elle est configurée. Pour l’exécuter rapidement, utilisez la commande suivante (assurez-vous de créer d’abord un ensemble de votre application Meteor):

 docker run -d \ -e ROOT_URL=http://yourapp.com \ -e MONGO_URL=mongodb://url \ -e MONGO_OPLOG_URL=mongodb://oplog_url \ -v /dir_containing_bundledir:/home/app/webapp \ -p 80:80 \ joostlaan/meteor-docker-passenger 

Vous pouvez voir comment je l’ai construit chez GitHub .