在我自己的服务器上部署Meteor,但在版本控制存储库中?和MongoHQ

时间:2014-02-24 08:26:38

标签: git mongodb deployment meteor meteorite

首先让我说我完全糊涂了。现在已经不在了,这就是我所做的:

我有两台远程服务器(Ubuntu)(开发和生产)和我的本地机器。

在本地计算机上:

  1. 我创建了一个基本的流星应用程序 - Hello,world。
  2. 发起了一个git存储库
  3. 创建了一个开发分支
  4. 推送到beanstalkapp(就像github),我随时更新了dev分支,创建了自动部署。
  5. 在Dev Machine上 - 远程dev.mysite.com

    1. 从上述步骤收到的文件
    2. 我可以通过运行$ meteor来处理应用程序,就像在我的localhost计算机上创建一个MongoDB实例并开始收听3000
    3. 好的,让我在那里停下来解释我理想的工作流程,如果有更好的方法,我很乐意改变。我需要在线开发我的开发网站,但我不希望它在meteor.com上托管

      1. 我不明白我在阅读有关必须“部署”我的应用的内容。我想这是最小化一切的东西?
      2. 我如何从git工作流程中受益,将更改自动部署到我选择的服务器,而无需每次都进行此部署?
      3. 我刚刚注册了MongoHQ并拥有一个数据库设置,除了Meteor默认创建本地实例之外我还想使用它。我可以通过本地计算机将其更改为指向MongoHQ远程数据库,将更改推送到repo并将它们部署到我的开发站点吗?我是否必须在开发机器上执行此操作?
      4. 如何让它在端口80上进行侦听?或者它是否自动侦听任何开放端口?
      5. 我希望我的问题可以帮助您洞察我的困境,在这种困境中,我只是不理解工作流程,而且文档令人困惑。我只是希望能够在我的本地计算机上运行我的站点/应用程序,提交并推送我自动部署到开发服务器的更改...但是此部署协议让我失望,数据库正在抛出我离开了。

        有没有更好的方法来创建从本地到开发到生产的快速高效的工作流程?我之前没有提到生产,因为我计划使用相同的自动部署。我将我的dev分支与master和push master合并,后者将自动部署到生产服务器。我有一个单独的生产数据库,所以这也让我在泡菜中...如果我合并,我正在跨越数据库配置,或者这是严格在服务器上完成一次我不不得不担心吗?

        尔加。请帮忙!谢谢。

1 个答案:

答案 0 :(得分:1)

如果没有发布一些配置服务器的长篇小说,我可以引导您朝着正确的方向前进:

1& 2& 3.模式是在每台机器上设置post-receive挂钩。  钩子应该:

  • 将repo克隆到tmp目录
  • 调用meteor bundle(生成.tar.gz文件)
  • 停止正在运行的流星应用程序
  • 将包提取到已知的应用程序目录
  • 启动你的流星应用程序

您可以在init.d中设置一个脚本,该脚本使用forever来操作流星,例如。 /etc/init.d/meteor start|stop

您还可以添加所需的配置变量 - 例如MONGO_URL

启动流星的例子:

      echo "$(date +'%Y-%m-%d %T,000') INFO $SERVICE_NAME started" >> $LOG_DIR/forever.log
      export MONGO_URL=''
      export PORT=3000
      export ROOT_URL=myserver.myapp.com
      export METEOR_SETTINGS="\`cat /path/to/production/settings.json\`"
      export MAIL_URL=mail.myapp.com

      sudo -u meteor -H -E forever -l $LOG_DIR/forever.log -o $LOG_DIR/out.log -e $LOG_DIR/err.log --minUptime 30000 --spinSleepTime 5000 -a -s start $WWW_APP_DIR/main.js
      ;;

4。除非你以root身份运行meteor,没有运行端口80 - 你最好让nginx坐在Meteor前面并提供静态资源 - 所以得到一个nginx配置,例如。

server {                                                                                                                     
  listen 3000;                                                                                                               

  server_name localhost;                                                                                                     

  # this should include any files / directories that belong to /public
  location ~ "^/(resources/|robots.txt|humans.txt|favicon.ico)" {
    root /path/to/bundle/programs/client/app/;
    access_log off;
    expires max;
  }

  # this is any assets that belong in packages
  location ~ "^/packages" {
    root /path/to/bundle/programs/client/;
    access_log off;
    expires max;
  }

  # this is for the main css & js
  location ~* "^/[a-z0-9]{40}\.(css|js)$" {
    root /path/to/bundle/programs/client;
    access_log off;
    expires max;
  }

  # this is for any sockets
  location /sockjs/ {
    proxy_pass http://meteor;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
  }

  location / {
    proxy_pass http://meteor;
    # dont know if this is missing some stuff
  }
}