我想在nGINX服务器上部署Django应用程序。我正在使用uWSGI。我查了许多教程,但都没有用。 Django应用程序作为独立应用程序运行完美。在nGINX上运行相同应用的最简单方法是什么?
我被困在这里想要一个解决方案..: - (
我的www文件夹位于/usr/share/nginx/www
我的网站启用了n conf.d
,所有内容都在/etc/nginx/
我确实安装了uWSGI,但找不到任何名为uwsgi的文件夹 app-installed 文件夹/文件
答案 0 :(得分:12)
创建dJango应用程序后。只需按照以下步骤操作:
第1步。在Django项目目录中创建一个说uwsgi.ini的文件。即除了manage.py
[uwsgi]
# set the http port
http = :<port_no>
# change to django project directory
chdir = <project directory>
# add /var/www to the pythonpath, in this way we can use the project.app format
pythonpath = /var/www
# set the project settings name
env = DJANGO_SETTINGS_MODULE=<project_name>.settings
# load django
module = django.core.handlers.wsgi:WSGIHandler()
第2步。在 / etc / nginx / sites-available 下添加.conf文件
server {
listen 84;
server_name example.com;
access_log /var/log/nginx/sample_project.access.log;
error_log /var/log/nginx/sample_project.error.log;
# https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
location /static/ { # STATIC_URL
alias /home/www/myhostname.com/static/; # STATIC_ROOT
expires 30d;
}
}
第3步。在nginx.conf中,将请求传递给Django应用程序
在服务器{}块下,
location /yourapp {
include uwsgi_params;
uwsgi_pass <your app address, eg.localhost>:<portno>;
}
第4步。运行uwsgi.ini
> uwsgi --ini uwsgi.ini
现在对你的nGINX的任何请求都会通过uwsgi将请求传递给你的Django App ..享受:)
答案 1 :(得分:1)
除非你需要坚持使用uWSGI,否则最简单的方法(效率非常高)将是Gunicorn。他们有很好的文档,而且部署起来非常快捷。
我的网站很少(包括制作)和类似的东西:
website_gunicorn.conf.py(放在任何你喜欢的地方):
import multiprocessing
daemon = False
bind = "unix:/tmp/gunicorn.sock"
workers = multiprocessing.cpu_count() * 2 + 1
timeout = 60
相应的NGINX配置(部分,包含在主配置中):
upstream gunicorn {
server unix:/tmp/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
access_log /var/log/access.log combined;
error_log /var/log/error.log error;
keepalive_timeout 5;
# path for static files
root /path/to/your/static/files;
location @django {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_ignore_client_abort off;
proxy_buffering off;
proxy_redirect off;
proxy_pass http://gunicorn;
proxy_read_timeout 60;
}
location / {
try_files $uri @django;
}
}
然后你应该能够这样开始(当然在安装了Gunicorn之后 - pip install gunicorn
):
gunicorn_django -c /path/to/website_gunicorn.conf.py
和NGINX应连接到套接字并为网站提供服务(静态文件将由NGINX直接提供,为您节省一些内存)。
有关详细信息,请参阅deployment和configuration上的Gunicorn文档。
请注意,我在Gunicorn配置中有daemon=False
。这是因为我使用Supervisor来控制它。你可能想也可能不想摆脱那条线。
答案 2 :(得分:1)
尽量远离与发行版有关的声音,他们可以轻易地将你推向错误的方向。
点击此处的快速入门:
http://projects.unbit.it/uwsgi/wiki/Quickstart
(以下,我的意思是'理解'不要复制和粘贴;)
从一个简单的配置开始,其中nginx将所有请求转发给uWSGI。
提供静态文件是另一回事,它不依赖于应用程序服务器,因此您可以关注官方Django文档。
答案 3 :(得分:0)
步骤1。在系统中安装Nginx。
sudo apt-get install nginx
第2步。在Django项目中编辑您的setting.py文件
ALLOWED_HOSTS = []
到
ALLOWED_HOSTS = ['*']
第3步。安装gunicorn
pip3安装gunicorn
第4步。创建一个.service文件并编写一些自己的配置
sudo vi /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=<your project root directory>
ExecStart=<path of your project>/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:<path of your wsgi file>/restapi.sock rest_Api.wsgi:application
[Install]
WantedBy=multi-user.target
第5步。运行给定命令
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
第6步。在可用站点内创建文件
sudo vi /etc/nginx/sites-available/gunicorn
第7步。在上面的文件(即gunicorn)中写出Give配置
server {
listen <port on which you want to configure>;
server_name <ip address> or <name of the server>;
location = /favicon.ico { access_log off; log_not_found off; }
location <path of your static directory> {
root <path of your root project>;
}
location / {
include proxy_params;
proxy_pass http://unix:<path of your restapi.sock file>/restapi.sock;
}
}
第8步。现在注释默认文件中的所有行。
sudo vi /etc/nginx/sites-available/default
STEP 9。运行以下命令进行测试
sudo ln -s /etc/nginx/sites-available/gunicorn1 /etc/nginx/sites-enabled/
sudo nginx -t
步骤10 。重新启动Nginx服务器
sudo systemctl restart nginx