AngularJS+Satellizer+Node.js+MongoDB->Instagram-20

Build an Instagram clone with AngularJS, Satellizer, Node.js and MongoDB

20.部署

instagrame 目录下创建一个新的文件 .gitignore,把 node_modules 加到它里面。你可以直接用命令行来操作:

<!-- lang: js -->
$ touch .gitignore
$ echo node_modules > .gitignore

这可以在提交文件到 Git 的时候忽略 node_modules 目录。你如果把你的 Node.js 应用带着 node_modules 的 Git 工程部署到 Heroku的话,你会遇到各种问题。Heroku 会根据你的 package.json 自动下载指定的包。

我们将会用 Heroku 托管后端,用 Dropbox 托管前端。这两个都是免费的。

https://hackhands.com/wp-content/uploads/2014/11/logotype-vflFbF9pY.png
https://hackhands.com/wp-content/uploads/2014/11/heroku-Logo-1.jpg

我们先从后端开始。首先,到 Heroku 去注册然后创建一个新的应用。

Heroku 新的 Dashboard UI 非常简单易用。(干得漂亮 Heroku 的大牛们)

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-21.21.26.png

然后你会看到入门简介。你运行 heroku login 成功之后,你就可以创建一个新的 Git 仓库了。Heroku 和其他云平台一样,通过 Git 来部署。

打开终端然后进入 instagram 目录,然后输入:

<!-- lang: js -->
$ git init

$ heroku git:remote -a <your heroku app name>

$ git add .
$ git commit -am "initial commit"
$ git push heroku master

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-22.20.20.png

结束之后,查看 http://your-app-name.herokuapp.com (我的是 http://instagram-server.herokuapp.com) 然后你会看到一个 Application Error 页面。

没想到把,这早就在我的掌控之中,不过还是假装看一下发生异常的原因。在 instagram 目录下面执行 heroku logs 命令:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-22.22.34.png

异常信息大概就是说,你的应用在端口 27017 连接不到 MongoDB。为了我们的应用能工作,我们在本地确实已经下载,安装,启动 MongoDB 了,但是,当我们把应用发布到 Heroku 的时候,不幸的是本地数据库当然不能跟 Heroku 一起用咯。

但是别怕 Compose (以前的 MongoHQ) 和 MongoLab 提供了免费的 MongoBD 托管。另外,你也可以用我的这个教程专用数据库啦:

<!-- lang: js -->
mongodb://hackhands:[email protected]:63140/instagram

回到 Heroku 的 dashboard ,点 Settings 卡。你可以看到一个叫做 Reveal Config Vars 的按钮。点它,然后在同一页点 Edit 按钮。在这里你可以设置 config.js 的值。如果你指定了环境变量的话,它们会调用的这些值,否则的话就会退而求其次用默认字符串的值。

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-22.44.29.png

设置好之后点 Save

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-22.50.57.png

现在万事俱备,就等你重启 Heroku 应用了,来,干了这条命令行 heroku restart -a my-app-name:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-23.02.50.png

若它一切安好,你便看不到 Application Error 页。记住,因为我们没有创建任何 GET / 路由,你在访问 http://your-app-name.herokuapp.com 的时候什么都看不到。不过我们可以检查一下 GET /api/feed** 路由,看看服务是不是真的启动了:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-23.04.06.png

后端这块我们就完成了,下面我们开始前端部分。把 client 目录下面的文件全部拷贝到 Dropbox 的 Public Folder,最好放到一个子目录下,比如说 instagram 以确保它不会跟别的文件混成一团。

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-21.45.37.png

右键点击 index.html 然后从下拉菜单选 Copy public link…。拷贝 URL 到剪贴板。

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-07-21.55.22.png

打开 instagram/client 目录的 app.js 文件,然后用新的 URLs 更新 Satellizer 的 Instagram provider。你需要更新: loginUrl, signupUrl, 还有 OAuth 2.0 url 和 redirectUri 到实际的 Heroku 和 Dropbox URLs。

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-08-00.20.28.png

注意: 别忘记在 instagram.com/developer 把 redirectUri 更新到和上面的 redirectUri 一样。

你还要更新 client/services/api.js 里面的 URLs:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-08-00.20.19.png

然后,执行 gulp (要是你还没把它启动的话) 来更新 app.min.js。然后拷贝 app.min.js 把它贴到 Dropbox 的 Public Folderinstagram 目录下面,覆盖掉老文件。

注意: 如果你喜欢这样的配置的并且考虑给它弄个自定义域名指向这个 Dropbox Public Folder。其实,你还可以考虑用 GitHub Pages 托管静态页面,老实说我觉得它比 Dropbox 要简单多了,因为它从来不会用来干我们现在在 Dropbox 上做的这些事情。比如说,我的个人网站 http://sahatyalkabov.com [[source code]]123,已经在 GetHub Pages 上面跑了两年多了,一点问题都没有。而且它也是免费的。

请注意我用了 https://instagram-server.herokuapp.com 而不是 http://instagram-server.herokuapp.com。因为我们的前端是托管在 Dropbox 服务商的,它用的是加密 (https) 协议,我们不能发送一个非加密 (http) 请求。如果你这样做的话会得到下面的错误信息:

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-08-00.20.50.png

如果你跟我做的完全一样,那么现在所有的在 Heroku (back-end) 和 Dropbox (front-end) 之间的请求应该都可以正常运转了。

https://hackhands.com/wp-content/uploads/2014/11/Screenshot-2014-12-08-00.36.56.png

不过有可能更惨,如果你必须把前端和后端分开跑在不同的服务器上的话,那么至少要考虑一下 GitHub Pages, Amazon S3 或者 Digital Ocean with Nginx 来放你的静态内容。而且 CORS 很多时候麻烦多过好处,这就是为什么我一直都倾向在同一台主机上跑前后端。

你可能感兴趣的:(AngularJS,express,nodejs,node,node.js,OAuth,oauth2,Satellizer,OAuthn)