使用 nginx 的 Django 部署 - 来自另一台服务器的 gunicorn
Django Deployment with nginx - gunicorn from another server
我正在尝试通过不同的应用程序服务器部署我的 Django Project
:Apache2
、Nginx/gunicorn
、...
它在 Apache2
或 Nginx
上运行良好,但我想将这些应用程序服务器与我的 Django Projet
分离。我想要这样的环境:
- 服务器 1 (172.30.10.92):Django 项目和 wsgi
- 服务器 2 (172.30.10.93):Nginx/gunicorn
为什么?因为后面我会有一些Django应用,但是我想只用一个应用服务器。
我想我的配置文件语法有误。
我在 /etc/nginx/sites-available/DatasystemsCORE.conf 中有:
server {
listen 8000;
server_name 172.30.10.92;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root http://172.30.10.92:/var/www/html/;
}
location / {
include proxy_params;
proxy_pass http://172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock;
}
}
server_name : 是来自 Django 服务器还是 Nginx 服务器的 IP 地址?我认为这是第一个,但我不确定。
proxy_pass : 我觉得我的路径有问题
然后,我正在执行这个命令:
gunicorn --daemon --workers 3 --bind 172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock 172.30.10.92:/var/www/html/DatasystemsCORE/DatasystemsCORE.wsgi
又一次,我觉得语法有问题,因为我得到 502 Bad Request
我如何从远处的 Django 服务器添加 IP 地址?
谢谢!
你想做的事没有任何意义。您当然可以在单独的服务器上使用单个 nginx,但是 gunicorn 是应用程序服务器并且属于应用程序。
没有 "Django server" 所以你的第一个问题是无关紧要的。 gunicorn 需要在端口而不是套接字上提供服务,nginx proxy_pass 将指向该端口。
我找到了如何解决我的问题,并制作了一个教程(根据我的情况)以帮助所有想做同样事情的人。
我的文件在那里:Download tutorial file
但这是用英文写的同一个教程。
我的 Django IP 服务器:172.30.10.92
我的 Nginx IP 服务器:172.30.10.93
1- 安装和配置 wsgi(位于 Django 服务器上)
WSGI 是使用您的 Django 项目创建的文件。
文件位于/path/to/your/project/Myproject/wsgi.py
我们必须像这样编辑这个文件:
import os
from django.core.wsgi import get_wsgi_application
import sys sys.path.append('/var/www/html/Myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Myproject.settings")
application = get_wsgi_application()
2- 安装和配置 gunicorn/supervisor(位于 Django 服务器上)
为了安装gunicorn/supervisor,你必须在你的shell中执行:
pip install gunicorn
pip install supervisor
然后,您必须在 /etc/supervisor/conf.d/Myproject.conf
中创建一个新文件,如下所示:
[program:Myproject]
command = /home/valentin/.virtualenvs/MyprojectEnv/bin/gunicorn Myproject.wsgi:application --name "Myproject" --workers=4 --bind=0.0.0.0:8080 -- user="valentin" --group="valentin" ; Command to start app
user = username #You have to replace by your username
stdout_logfile = /var/log/supervisor/supervisor.log
redirect_stderr = true
log
environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8
我指定了 端口 8080,这是我的应用程序服务器和我的 Web 服务器之间的通信端口。
3-编辑nginx服务器上的hosts文件(位于nginx服务器上)
您必须编辑位于 /etc/hosts
的主机文件并向您的 Django 服务器添加一个新条目:
127.0.0.1 localhost
127.0.1.1 valentin
172.30.10.92 Myproject
# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
4- nginx 存储库中的新配置文件(位于 nginx 服务器上)
这个新文件应该放在 /etc/nginx/sites-available/Myproject.conf
server {
listen 8080;
server_name Myproject;
root /var/www/html/Myproject/;
location /static/ {
root /var/www/html/;
}
location / {
include proxy_params;
proxy_pass http://172.30.10.92:8080;
}
}
IP地址对应我的Django服务器地址。我指定了侦听端口 (8080)、我的 Django 项目和静态目录的路径。
然后,您必须创建一个符号 link 到 sites-enabled。
操作完成后,重启nginx服务:
sudo service nginx restart
5- 在 Django 中允许 nginx IP 地址(位于 Django 服务器上)
您必须编辑 settings.py 文件,以便在 ALLOWED_HOSTS 中允许 nginx IP 地址:
ALLOWED_HOSTS = ['localhost', '172.30.10.93', '127.0.0.1', '[::1]']
6- 最后执行 gunicorn(位于 Django 服务器上)
最后,你必须启动 gunicorn。你应该在你的 Django 根项目中并执行:
gunicorn Myproject.wsgi:application --bind 172.30.10.92:8080
现在,在您的浏览器中,尝试使用以下端口连接到您的 nginx 服务器:
http://172.30.10.93:8080
有效!
PS : 本教程适合我,如果它不适合你,也许我错过了什么,或者也许你没有完全像我一样;)
我正在尝试通过不同的应用程序服务器部署我的 Django Project
:Apache2
、Nginx/gunicorn
、...
它在 Apache2
或 Nginx
上运行良好,但我想将这些应用程序服务器与我的 Django Projet
分离。我想要这样的环境:
- 服务器 1 (172.30.10.92):Django 项目和 wsgi
- 服务器 2 (172.30.10.93):Nginx/gunicorn
为什么?因为后面我会有一些Django应用,但是我想只用一个应用服务器。
我想我的配置文件语法有误。
我在 /etc/nginx/sites-available/DatasystemsCORE.conf 中有:
server {
listen 8000;
server_name 172.30.10.92;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root http://172.30.10.92:/var/www/html/;
}
location / {
include proxy_params;
proxy_pass http://172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock;
}
}
server_name : 是来自 Django 服务器还是 Nginx 服务器的 IP 地址?我认为这是第一个,但我不确定。
proxy_pass : 我觉得我的路径有问题
然后,我正在执行这个命令:
gunicorn --daemon --workers 3 --bind 172.30.10.92/unix:/var/www/html/DatasystemsCORE/dscore.sock 172.30.10.92:/var/www/html/DatasystemsCORE/DatasystemsCORE.wsgi
又一次,我觉得语法有问题,因为我得到 502 Bad Request
我如何从远处的 Django 服务器添加 IP 地址?
谢谢!
你想做的事没有任何意义。您当然可以在单独的服务器上使用单个 nginx,但是 gunicorn 是应用程序服务器并且属于应用程序。
没有 "Django server" 所以你的第一个问题是无关紧要的。 gunicorn 需要在端口而不是套接字上提供服务,nginx proxy_pass 将指向该端口。
我找到了如何解决我的问题,并制作了一个教程(根据我的情况)以帮助所有想做同样事情的人。
我的文件在那里:Download tutorial file
但这是用英文写的同一个教程。
我的 Django IP 服务器:172.30.10.92
我的 Nginx IP 服务器:172.30.10.93
1- 安装和配置 wsgi(位于 Django 服务器上)
WSGI 是使用您的 Django 项目创建的文件。
文件位于/path/to/your/project/Myproject/wsgi.py
我们必须像这样编辑这个文件:
import os
from django.core.wsgi import get_wsgi_application
import sys sys.path.append('/var/www/html/Myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Myproject.settings")
application = get_wsgi_application()
2- 安装和配置 gunicorn/supervisor(位于 Django 服务器上)
为了安装gunicorn/supervisor,你必须在你的shell中执行:
pip install gunicorn
pip install supervisor
然后,您必须在 /etc/supervisor/conf.d/Myproject.conf
中创建一个新文件,如下所示:
[program:Myproject]
command = /home/valentin/.virtualenvs/MyprojectEnv/bin/gunicorn Myproject.wsgi:application --name "Myproject" --workers=4 --bind=0.0.0.0:8080 -- user="valentin" --group="valentin" ; Command to start app
user = username #You have to replace by your username
stdout_logfile = /var/log/supervisor/supervisor.log
redirect_stderr = true
log
environment=LANG=fr_FR.UTF-8,LC_ALL=fr_FR.UTF-8
我指定了 端口 8080,这是我的应用程序服务器和我的 Web 服务器之间的通信端口。
3-编辑nginx服务器上的hosts文件(位于nginx服务器上)
您必须编辑位于 /etc/hosts
的主机文件并向您的 Django 服务器添加一个新条目:
127.0.0.1 localhost
127.0.1.1 valentin
172.30.10.92 Myproject
# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
4- nginx 存储库中的新配置文件(位于 nginx 服务器上)
这个新文件应该放在 /etc/nginx/sites-available/Myproject.conf
server {
listen 8080;
server_name Myproject;
root /var/www/html/Myproject/;
location /static/ {
root /var/www/html/;
}
location / {
include proxy_params;
proxy_pass http://172.30.10.92:8080;
}
}
IP地址对应我的Django服务器地址。我指定了侦听端口 (8080)、我的 Django 项目和静态目录的路径。
然后,您必须创建一个符号 link 到 sites-enabled。
操作完成后,重启nginx服务:
sudo service nginx restart
5- 在 Django 中允许 nginx IP 地址(位于 Django 服务器上)
您必须编辑 settings.py 文件,以便在 ALLOWED_HOSTS 中允许 nginx IP 地址:
ALLOWED_HOSTS = ['localhost', '172.30.10.93', '127.0.0.1', '[::1]']
6- 最后执行 gunicorn(位于 Django 服务器上)
最后,你必须启动 gunicorn。你应该在你的 Django 根项目中并执行:
gunicorn Myproject.wsgi:application --bind 172.30.10.92:8080
现在,在您的浏览器中,尝试使用以下端口连接到您的 nginx 服务器:
http://172.30.10.93:8080
有效!
PS : 本教程适合我,如果它不适合你,也许我错过了什么,或者也许你没有完全像我一样;)