django+uwsgi+nginx 部署前后端分离项目的各种坑

使用虚拟环境部署,Python3,django==1.11.11 ,  uwsgi ,nginx 

部署时使用的是宝塔平台   (公司用这个平台  ),服务器是 阿里云

先放上配置文件  uwsgi

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
;socket=120.0.0.1:8069
#直接做web服务器使用,Django程序所在服务器地址
http=127.0.0.1:8069
#项目目录
chdir=/www/server/kolapi/kolsite
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=kolsite/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/root/.virtualenvs/kolsite_py3

nginx 配置文件   (宝塔平台  )

server
{
    listen 80;
    server_name aaa.kol.xyz;
    #index index.php index.html index.htm default.php default.htm default.html;
    root /www/server/kolapi/kolsite/;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改

	#PROXY-START
    location ~ /purge(/.*) { 
        proxy_cache_purge cache_one $host$request_uri$is_args$args;
        #access_log  /www/wwwlogs/api.kol.xyz_purge_cache.log;
    }
    
    location / 
    {
        proxy_pass http://127.0.0.1:8069;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
                
        #持久化连接相关配置
        #proxy_connect_timeout 30s;
        #proxy_read_timeout 86400s;
        #proxy_send_timeout 30s;
        #proxy_http_version 1.1;
        #proxy_set_header Upgrade $http_upgrade;
        #proxy_set_header Connection "upgrade";
        
        add_header X-Cache $upstream_cache_status;
        
        expires 12h;
    }
    
    location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_pass http://127.0.0.1:8069;
        
    }
 
     # 静态文件
      location  ~/static/
    {
		root  /www/server/kolapi/kolsite/;
        break;
    }
    
   # 静态文件
   
   
 
    location ~ .*\.(html|htm|png|gif|jpeg|jpg|bmp|js|css)?$
    {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_pass http://127.0.0.1:8069;
        
        #缓存相关配置
        #proxy_cache cache_one;
        #proxy_cache_key $host$request_uri$is_args$args;
        #proxy_cache_valid 200 304 301 302 1h;
        
        expires 24h;
    }
    #PROXY-END

	include enable-php-00.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/api.kol.xyz.conf;
    #REWRITE-END
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    access_log  /www/wwwlogs/api.kol.xyz.log;
    error_log  /www/wwwlogs/api.kol.xyz.error.log;
}

首先  django 部署前需要收集静态文件 (前后端分离 项目)

设置 静态文件收集后存放的目录  js css  图片

STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(BASE_DIR)),static')

终端输入收集静态文件命令

python manage.py collectstatic

将项目文件通过 ftp 软件传到 服务器中  (然后第一个坑来了:拿到root账号的我将项目文件传到了root 目录下 ,)通过教程 一顿操作,将项目部署到了root 目录下,然后项目运行ok 但是 js css 等静态文件 访问 403 ,意思是没有权限,what? 又百度 了一番,网站不能部署在root 目录下 nginx 进到 root 中 但是 是没有权限读取文件的  ,可以将静态文件部署到非root目录, 也可以在nginx 配置文件中 写user root  表示 当前用户是root  但是考虑到 部署在root下不安全 。于是  将项目部署在 另一个文件中,此时 第二个坑来了 。作为小白的我 nginx 配置文件不会写。部署上去的项目 静态文件  找不到。404;

以下为 正确的静态文件配置   nginx 反向代理 

 # 静态文件
      location  ~/static/
    {
		root  /www/server/kolapi/kolsite/;
        break;
    }
    
   # 静态文件
   

在写静态文件 路由规则时有查看过教程,知道有  root和 alias 但是 不知道是我看的教程有误还是 我没搞清楚 这个坑搞得我头皮发麻。

后续要好好 研究下 nginx了

猜你喜欢

转载自blog.csdn.net/p571912102/article/details/82025497