nginx uwsgi django配置

参考地址: https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

一:uwsgi配置    

1),测试uwsgi

项目名称:script
下载uwsgi sudo pip install uwsgi

查看是否uwsgi是否有用
1,进入项目里面.先运行
Python manager.py runserver 看是否报错
2,启用uwsgi启动项目
uwsgi --http :8000 --module script.wsgi

uwsgi --http :8000 --home /home/panyu/script --chdir /home/panyu/PycharmProjects/script -w  script.wsgi
/home/panyu/script 表示虚拟环境的位置,这里的虚拟环境名称就是script
/home/panyu/PycharmProjects/script  表示项目的名称script
PS:如果你项目跑在虚拟环境中,那么你跑的时候要先启动虚拟环境,不然会报错.

2)配置uwsgi

在uwsgi文件夹下,创建.ini文件,放项目的配置文件
cd /etc/uwsgi/
mkdir sites
vim script.ini
配置文件如下
官方版本
# mysite_uwsgi.ini file [uwsgi] # Django
-related settings # the base directory (full path) chdir = /path/to/your/project # Django's wsgi file module = project.wsgi # the virtualenv (full path) home = /path/to/virtualenv      #指定虚拟环境地址 # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = /path/to/your/project/mysite.sock # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true


实用版本

[uwsgi]
project = script
uid = panyu
path = PytharmProjects
base = /home/%(uid)

chdir = %(base)/%(path)/%(project)    #项目路径
module = %(project).wsgi:application    #

home = %(base)/%(projects)        #这里指定虚拟环境的地址, /home/panyu/script

master = true
processes = 5

socket = /run/uwsgi/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 660
vacuum = true

daemonize = %(base)/%(path)/%(project)/uwsgi.log


配置好uwsgi.ini时,就需要等待nginx配置好后,调用了.

 

3):为uWSGI创建systemd单元文件

 

sudo nano /etc/systemd/system/uwsgi.service    #创建uwsgi.server文件

[Unit]
Description=uWSGI Emperor service

[Service]
ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown panyu:www-data /run/uwsgi'           #这里的panyu是指用户
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites        ExecStart我们将指向uwsgi可执行文件 
Restart
=always
KillSignal
=SIGQUIT
Type
=notify
NotifyAccess
=all

[Install]              这允许我们指定何时应该自动启动服务
WantedBy=multi-user.target

此时我们无法成功启动服务,因为它依赖于www-data用户可用。在安装Nginx之前,我们必须等待启动uWSGI服务

 

二:nginx配置以及使用

 

 

1,安装
sudo apt-get install nginx
2,配置 sudo nano
/etc/nginx/sites-available/script #写nginx的配置文件


upstream django_data_center {
server unix:/run/uwsgi/data_center.sock; # for a file socket      #只想uwsgi的sock文件  
#server 127.0.0.1:8001; # for a web port socket (we'll use this first)  
}

server {
  

  listen 80;

  server_name testdatacenter.yimeijian.cn;                 #指定域名或者是ip地址,指定ip地址的时候加上listen 8000;
  location / {                                
    alias /home/ubuntu/data_center/data_center_web/dist/;    #直接指向静态文件地址  一般情况下是前段项目      访问:127.0.0.1:8000/  就会访问该路径
    index index.html;                          #前段的初始页面
        }
  location /assets/ {
    alias /home/ubuntu/data_center/data_center_web/dist/;    #前段的静态文件夹    图片等存放文件夹
            }
  location /public/ {
    alias /home/ubuntu/data_center/data_center_web/dist/;    #公共文件
            }
  location /static/ {
    alias /home/ubuntu/data_center/data_center/static/;      #后端的静态文件
            }

#后端接口 统一以v1开始
  location /v1/{                    #只要以   /v1/ 开始的借口访问走这里
    include uwsgi_params;                       #导入外面的uwsgi_params
    uwsgi_pass django_data_center;         #django_data_center 是指向最开始的upstream名称
    uwsgi_read_timeout 30;
          }
  location /docs/{
    include uwsgi_params;
    uwsgi_pass django_data_center;
    }
  location /admin_login/{
    include uwsgi_params;
    uwsgi_pass django_data_center;
              }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root html;
              }

  listen 443 ssl; # managed by Certbot                #这里给htpp请求时,加上ssl协议,也就是访问的时候要用httpls://,下面是他的参数
  ssl_certificate /etc/letsencrypt/live/testdatacenter.yimeijian.cn/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/testdatacenter.yimeijian.cn/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {                                  #这里重定向,如果访问testdatacenter.yimeijian.cn,就强制加上https
  if ($host = testdatacenter.yimeijian.cn) {
    return 301 https://$host$request_uri;
                            } # managed by Certbot

  listen 8080;
  server_name testdatacenter.yimeijian.cn;
  return 404; # managed by Certbot

}

server {
  if ($host = testdatacenter.yimeijian.cn) {
    return 301 https://$host$request_uri;
                          } # managed by Certbot

  listen 80;
  server_name testdatacenter.yimeijian.cn;
  return 404; # managed by Certbot


}

 3,善后

1):我们写的文件是在/etc/nginx/sites-available,复制一份到sites-enbaled

cp script /etc/nginx/sites-enbaled

2):测试是否有语法错误

sudo nginx -t    #报错会有提示

3)启动nginx

sudo systemctl start nginx

sudo systemctl restart nginx

 

 

 

 

三,uwsgi + nginx 联动

 

启动uwsgi
sudo systemctl start uwsgi

也可以自动启动
  • sudo systemctl enable nginx
  • sudo systemctl enable uwsgi

 

 

 

 

四:报错答疑

 

1, 如果页面报 502,表示nginx已经找到uwsgi.sock文件了
答:查看下后台,也就是uwsgi.log文件,看看是什么错误
错误: no python applicaton fund... 没有找到python,查看是否使用虚拟环境,有的话在uwsgi.ini中,配置home参数,指定虚拟环境的位置.

2,报unix:/run/uwsgi/firstsite.sock失败
这表明Nginx无法在给定位置找到套接字文件,
1,先查看是否有.sock文件
sudo ls /run/uwsgi

2,查看是否启动uwsgi
sudo systemctl status uwsgi

3,查看systemd文件夹下面的文件更改了没有重新reload
  • sudo systemctl daemon-reload
  • sudo systemctl restart uwsgi

 3,如果报404

表示nginx,没有找到ip或者路劲

1,检查nginx是否更新
2,查看nginx配置文件是否错误,
详细情况可以查看:https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

 

posted @ 2018-11-28 19:13  forjie  阅读(159)  评论(0编辑  收藏  举报