使用 Nginx 和 Gunicorn 在同一服务器上的多个夹层项目:"server IP address could not be found"
Multiple Mezzanine projects on same server with Nginx and Gunicorn: "server IP address could not be found"
我对部署还很陌生。我正在尝试在 Ubuntu 16.04 上部署两个 Mezzanine 4.2.3 项目(根据 requirements.txt,它们使用 Django 1.10.8)。我用这个 tutorial 成功部署了第一个。我可以通过它的域名访问它,比如说 example.com
。我正在尝试让另一个可以在 food.example.com
或最好是 example.com/food
上访问,但浏览器 returns: "server IP address could not be found".
example.com
在 /etc/nginx/sites-available/example
的 nginx 配置:
server {
listen 80;
server_name [SERVER IP ADDRESS] example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/example/example.sock;
}
food.example.com
在 /etc/nginx/sites-available/food
的 nginx 配置:
server {
listen 81;
server_name food.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/food;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/food/food.sock;
}
}
我尝试使用example.com/food
,但nginx 一直说其中有可疑符号。我不知道这是否是阻止页面显示的问题之一,但我还是将其更改为子域 food
以尝试隔离问题。
example.com
的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_example.service
:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/example
ExecStart=/home/example/env_example/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/example/example.sock example.wsgi:application
[Install]
WantedBy=multi-user.target
food.example.com
的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_food.service
:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/food
ExecStart=/home/food/env_food/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/food/food.sock food.wsgi:application
[Install]
WantedBy=multi-user.target
Nginx 日志显示没有错误。
systemctl status
for nginx, gunicorn_example
, 和 gunicorn_food
似乎表明一切正常。 nginx -t
说 nginx.conf
语法和测试没问题。
gunicorn_example
和gunicorn_food.service
都是运行。
example.sock
和food.sock
均已成功生成。
ps aux | grep gunicorn
显示工人 运行.
不确定这是否是一个重要的细节,但我不使用 supervisor 或 upstart 进行部署。
我猜我把网址写错了。但是我尝试了各种组合,都没有成功。
example.com
的urls.pyin the same folder as
settings.py`:
urlpatterns += [
url("^$", views.blog_post_list_index, name="home"),
]
food.example.com
的 urls.py
与 settings.py
:
在同一文件夹中
urlpatterns += [
url("^food.example.com$", views.blog_post_list_index, name="home"),
url("^food.example.com/", include('food_crud.urls')),
url("^", include("mezzanine.urls")),
]
应用程序在应用程序目录中的urls.py
:
urlpatterns += [
url('add/$', food_crud_views.FoodCreateView.as_view(), name='food add'),
url('list/$', food_crud_views.FoodListView.as_view(), name='food list'),
url('(?P<pk>\d+)/$', food_crud_views.FoodDetailView.as_view(), name='food detail'),
url('(?P<pk>\d+)/update$', food_crud_views.FoodUpdateView.as_view(), name='food update'),
url('(?P<pk>\d+)/delete$', food_crud_views.FoodDeleteView.as_view(), name='food delete'),
]
我错过了什么?
2018 年 2 月 18 日编辑:settings.py
中的 ALLOWED_HOSTS
仅包含 ["example.com/food,"]
。
在阅读更多内容、在 IRC 上询问并进行更多试验后,事实证明我唯一要做的就是让两个项目都在端口 80 上侦听。
这让我很困惑,因为我读过的大多数文章都说让他们在不同的端口上监听。将不得不在这个方向上进行更多调查。
我对部署还很陌生。我正在尝试在 Ubuntu 16.04 上部署两个 Mezzanine 4.2.3 项目(根据 requirements.txt,它们使用 Django 1.10.8)。我用这个 tutorial 成功部署了第一个。我可以通过它的域名访问它,比如说 example.com
。我正在尝试让另一个可以在 food.example.com
或最好是 example.com/food
上访问,但浏览器 returns: "server IP address could not be found".
example.com
在 /etc/nginx/sites-available/example
的 nginx 配置:
server {
listen 80;
server_name [SERVER IP ADDRESS] example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/example;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/example/example.sock;
}
food.example.com
在 /etc/nginx/sites-available/food
的 nginx 配置:
server {
listen 81;
server_name food.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/food;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/food/food.sock;
}
}
我尝试使用example.com/food
,但nginx 一直说其中有可疑符号。我不知道这是否是阻止页面显示的问题之一,但我还是将其更改为子域 food
以尝试隔离问题。
example.com
的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_example.service
:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/example
ExecStart=/home/example/env_example/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/example/example.sock example.wsgi:application
[Install]
WantedBy=multi-user.target
food.example.com
的 gunicorn 配置文件位于 /etc/systemd/system/gunicorn_food.service
:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/home/food
ExecStart=/home/food/env_food/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/food/food.sock food.wsgi:application
[Install]
WantedBy=multi-user.target
Nginx 日志显示没有错误。
systemctl status
for nginx, gunicorn_example
, 和 gunicorn_food
似乎表明一切正常。 nginx -t
说 nginx.conf
语法和测试没问题。
gunicorn_example
和gunicorn_food.service
都是运行。
example.sock
和food.sock
均已成功生成。
ps aux | grep gunicorn
显示工人 运行.
不确定这是否是一个重要的细节,但我不使用 supervisor 或 upstart 进行部署。
我猜我把网址写错了。但是我尝试了各种组合,都没有成功。
example.com
的urls.pyin the same folder as
settings.py`:
urlpatterns += [
url("^$", views.blog_post_list_index, name="home"),
]
food.example.com
的 urls.py
与 settings.py
:
urlpatterns += [
url("^food.example.com$", views.blog_post_list_index, name="home"),
url("^food.example.com/", include('food_crud.urls')),
url("^", include("mezzanine.urls")),
]
应用程序在应用程序目录中的urls.py
:
urlpatterns += [
url('add/$', food_crud_views.FoodCreateView.as_view(), name='food add'),
url('list/$', food_crud_views.FoodListView.as_view(), name='food list'),
url('(?P<pk>\d+)/$', food_crud_views.FoodDetailView.as_view(), name='food detail'),
url('(?P<pk>\d+)/update$', food_crud_views.FoodUpdateView.as_view(), name='food update'),
url('(?P<pk>\d+)/delete$', food_crud_views.FoodDeleteView.as_view(), name='food delete'),
]
我错过了什么?
2018 年 2 月 18 日编辑:settings.py
中的 ALLOWED_HOSTS
仅包含 ["example.com/food,"]
。
在阅读更多内容、在 IRC 上询问并进行更多试验后,事实证明我唯一要做的就是让两个项目都在端口 80 上侦听。
这让我很困惑,因为我读过的大多数文章都说让他们在不同的端口上监听。将不得不在这个方向上进行更多调查。