使用Docker和phusion-passenger部署Meteor应用程序

时间:2014-11-05 07:48:56

标签: nginx meteor passenger docker

我正在尝试将Meteor应用程序部署到我的Ubuntu 14.04(Trusty Tahr)VPS。我在DockerHub上使用私有Docker注册表,并在Git上从我的Bitbucket存储库中提取自动构建设置。这非常有效。

然而,当我运行我的容器时,我无法看到Meteor应用程序正在运行。我在他们的文档中读到了关于phusion-passenger和Meteor的内容,但我认为该指南遗漏了一些东西,因为我无法让它工作。

我的方法是使用meteor创建一个应用程序:

meteor create simple-wishes

这将创建一个内部包含CSS,HTML和JavaScript文件的目录(以及.meteor文件夹)。在这个目录之外,我创建了一个Dockerfile,如下所示:

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

Dockerfile中引用的webapp.conf文件如下所示:

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;
}

在我的VPS上运行这样的容器:

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

这将从DockerHub中提取图像并以守护进程模式启动容器,将端口80和22映射到主机上的端口80和2200.

当我现在向服务器发出HTTP请求时(http://simple-wishes.com),我从nginx收到错误:

502 Bad Gateway

我必须在这里错过一些步骤,但我无法弄清楚是什么。所以我希望有人能指出我正确的方向。

3 个答案:

答案 0 :(得分:0)

Docker容器中的本地主机与外部的localhost不同。如果MongoDB位于自己的容器中或使用众所周知的DNS条目,您可能希望使用--link来链接容器。

答案 1 :(得分:0)

当您在没有捆绑应用程序的情况下运行Meteor时,Meteor会 启动MongoDB实例,但不是默认的MongoDB端口。

检查Stack Overflow问题 How do I use the existing MongoDB in a Meteor project? 的答案。

答案 2 :(得分:0)

您可以尝试使用我的Docker镜像,看看它是如何设置的。要快速运行它,请使用以下命令(确保首先创建一个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

您可以看到how I built it at GitHub