nginx uwsgi django配置
一: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
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号