在大多数方面,Phusion乘客说明都很棒。他们在设置NGINX,乘客应用程序,测试python等方面的安装指南要好于平均水平。在单个服务器上设置几个单独的应用程序的说明很不完善。我采用“乘客”的主要原因是能够托管多个应用程序。
我遵循了Phusion Passenger的说明,以使用子URI(https://www.phusionpassenger.com/library/deploy/nginx/deploy/python/)设置NGINX服务器。我以为这将允许我运行具有不同子文件夹的单独应用程序。我在/var/www
中有几个python应用程序,例如:
/var/www/dashboard
/var/www/peniso
在单独的子文件夹venv中,每个人都有一个Python虚拟环境。每个人都单独工作。但是,如何一次使所有内容可用?我看到的问题是,无论使用哪个子URI,同一应用程序都会运行。
这是我在/etc/nginx/sites-enable/dashboard.conf文件中尝试过的内容:
server {
listen 80;
server_name testapp.myexample.com;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/dashboard/public;
passenger_app_type wsgi;
passenger_startup_file passenger_wsgi.py;
# Turn on Passenger
passenger_enabled on;
passenger_python /var/www/dashboard/venv/bin/python3.7;
location ~ ^/mydash(/.*|$) {
alias /var/www/dashboard/public$1;
passenger_base_uri /mydash;
passenger_app_root /var/www/dashboard;
passenger_document_root /var/www/dashboard/public;
passenger_enabled on;
passenger_python /var/www/dashboard/venv/bin/python3.7;
}
location ~ ^/efergy(/.*|$) {
alias /var/www/peniso/public$1;
passenger_base_uri /efergy;
passenger_app_root /var/www/peniso;
passenger_document_root /var/www/peniso/public;
passenger_enabled on;
passenger_app_env development;
passenger_python /var/www/peniso/venv/bin/python3.7;
}
}
我浏览http://testapp.myexample.com/mydash
或http://testapp.myexample.com/efergy
时看到的是同一个应用程序。在顶部的小节之前,我可以将“ dashboard”替换为“ peniso”,并更改运行1个应用程序的位置。我已经翻转了文件夹的顺序,也将根目录从一个更改为另一个。似乎只有一个应用可用。
您如何配置“乘客”以与多个不同的应用程序一起使用?
最终,一旦我了解了如何使/ var / www下的目录正常工作,就需要托管一些Python和一些Node.js应用程序。
答案 0 :(得分:0)
我有一个特定于Python Ploty仪表板的解决方案,该仪表板使用称为Dash的抽象层编写。我希望可以为所有Plotly应用找到类似的修复程序,但是没有实现。可以修改Dash Plotly应用程序以了解通话的suburi。如果Web URL为http://example.com/energy
,则在Plotly应用程序中需要进行简单的更改。
从标准标准部分开始:
app = dash.Dash(__name__,
meta_tags=[
{
"name": "viewport",
"content": "width=device-width"
}
]
)
包括网址的最后一部分
app = dash.Dash(__name__,
meta_tags=[
{
"name": "viewport",
"content": "width=device-width"
}
],
requests_pathname_prefix='/energy/'
)
app.config.suppress_callback_exceptions = True
最后一行是我在“ Plotly”列表中同时拾取的东西,我不知道它是否至关重要。
在“乘客”文档中,我发现sub-uri问题对于除Rails以外的所有其他应用程序都非常严重,因为Rails拥有纯乘客解决方案。整个事情没有得到很好的记录。但是它们在node.js文档(https://www.phusionpassenger.com/library/deploy/nginx/deploy/nodejs/)中确实有警告:
Sub-URI deployments in Node.js require framework-specific
adjustments in the application. For example, in Express 4.0+,
you should use a router. An alternative is to use url
rewriting to avoid the need for sub-URIs altogether.
在“乘客GitHub”问题列表中,我创建了一个有关“ URL重写的使用”的文档详细信息的请求,因为在大多数情况下,这是唯一切实可行的答案(https://github.com/phusion/passenger/issues/2254)。对我想为我们要运行的每个不同的node.js应用程序找出针对案例的修复程序,对我来说都是行不通的。
为了让每个人都了解这种情况,Passenger框架结构的确可以将服务器引导到正确的文件夹,但是当我实际不执行该应用程序时(出于我不明白的原因),nginx和Passenger会恢复为运行他们在配置文件中找到的第一个应用程序。修复此问题后,每个应用程序都知道如何调用该方法(也许nginx会读取其公告?),然后此方法就可以了。