2016-10-27 132 views
11

我有一个应用程序,我们称之为derpshow,它包含两个存储库,一个用于前端,另一个用于后端。Heroku独立的前端和后端

我想部署这些使用Heroku,并最好在同一个域。我也想为两个部分分开使用管道,每个部分都有一个分段和生产环境。

是否有可能让两个应用程序在同一个域上运行,以便前端可以调用/api/*上的后端?另一种选择是在api.derpshow.comapp.derpshow.com的前端提供后端服务,但是这会使安全性有些复杂化。

这是什么最佳实践?前端只是静态文件,所以它甚至可以从S3或类似的服务器上提供服务,但我仍然需要分段和生产环境以及自动测试等等。

任何意见非常感谢!

+0

你想用Heroku来做什么? – Lucsartes

回答

7

对于你想要的,你必须使用web服务器来提供静态内容,并提供对容器(gunicorn,tomcat等)进行持有你的应用程序的访问。这也是最好的做法。

Asume使用nginx作为网络服务器,因为它更容易设置。 nginx配置文件看起来是这样的

# Server definition for project A 
server { 
    listen    80; 
    server_name  derpshow.com www.derpshow.com; 

    location/{ 
     # Proxy to gUnicorn. 
     proxy_pass    http://127.0.0.1:<projectA port>; 
     # etc... 
    } 
} 

# Server definition for project B 
server { 
    listen    80; 
    server_name  api.derpshow.com www.api.derpshow.com; 

    location/{ 
     # Proxy to gUnicorn on a different port. 
     proxy_pass    http://127.0.0.1:<projectBg port>; 
     allow 127.0.0.1; 
     deny all; 
     # etc... 
    } 
} 

而那就是它。

OLD ANSWER:尝试使用nginx-buildpack它允许您在Heroku的应用服务器前运行NGINX。然后,您需要在不同的端口上运行应用程序,并将一个端口设置为api.derpshow.com,将其他端口设置为app.derpshow.com,然后您只能将来自本地主机的调用限制为api.derpshow.com。

+0

这是一个很好的答案草图,但如果你想要赏金,我会感激你对你的指示更加明确。另外,既然他要求最佳实践,是否还有其他方法可以工作,或者最好的实践是“使用nginx”? –

+0

我编辑了答案 –

-2

我不使用Heroku,所以我会回答'没有Heroku'的问题。

我总是创建在两个不同域上运行的前端应用程序和api。

例如:

dev.app.derpshow.com连接到dev.api.derpshow.com和

app.derpshow.com连接到api.derpshow.com

通常你可以使用Git将开发部署到生产环境。

为了安全起见,您处于跨源“系统”。所以限制你的API是你的应用程序的域名。因此,稍后您可以通过再次将该域添加到限制来让另一个应用程序连接到您的API。所以没有人可以使用你的API。

+0

通过CORS和域限制等来限制访问在任何方面都不是安全的。此方法依赖于从客户端传递的信息,并且该信息不应受信任。每个人都可以使用API​​。 – mbanzon