我正在尝试将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
我必须在这里错过一些步骤,但我无法弄清楚是什么。所以我希望有人能指出我正确的方向。
答案 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。