django的static配置和nginx+vue+uwsgi+django配置

将前端vue项目通过npm run build生产一个dist文件夹

/dist
    |-index.html
    |-/static
        |-/js
        ...

我们的Django项目目录原本为

/my_django_proj
    |-/app1
    ...
    |-/appn
    |-/xadmin (注:这里用的是第三方xadmin进行xadmin控制)
    |-/my_django_proj
    |-manage.py

这里提一下关于django的static文件夹配置,用于我开发时用的是本地win环境,django的DEBUG=TRUE,而上线时是云服务器LINUX环境,DEBUG=FALSE。为了做到在debug=true时,它用自己的内置的static文件(因为在debug=true时,并不需要我们自己去抽取static文件夹出来),而在debug=false时,用我们抽取出来的static文件夹。故做如下配置:

# /my_django_proj/my_django_proj/settings.py


# 每个app下的static文件对应于app下的static文件, 即在bebug=true时用到
STATIC_URL = '/static/'


# 将所有静态文件迁移(将django所有静态文件抽取自行百度)到所在目录,(这个放法是为了后面跟前端的静 
# 态文件放一起方便)
STATIC_ROOT = '/linux下你的目录/MY_PROJ/static' 
# /my_django_proj/my_django_proj/urls.py


from django.urls import path, include
from django.conf import settings

# xadmin
import xadmin
xadmin.autodiscover()

from xadmin.plugins import xversion
xversion.register_models()

# 以下为我某一个项目的路径配置,请忽略
urlpatterns = [
    path(settings.VERSION + 'xadmin/', xadmin.site.urls),
    path(settings.VERSION + 'app/', include('app.urls')),
    path(settings.VERSION + 'ip_query/', include('ip_query.urls')),
    path(settings.VERSION + 'aq_pred/', include('aq_pred.urls')),
]


# 注:以上为常规配置
# 注:以下是为了解决static在开发和上线环境下的配置
from django.conf import settings
from django.conf.urls import url
from django.views import static

# 当上线时,django要用到静态文件就去STATIC_ROOT路径下找
if settings.DEBUG is False:
    urlpatterns.append(url(r'^static/(?P.*)$', static.serve,
      {'document_root': settings.STATIC_ROOT}, name='static'))

 

这里我为了方便(也可以说是供自己使用吧),将前端的dist文件夹跟后端文件夹整合在一起了(为最后部署使用nginx),后来的大文件夹为/MY_PROJ

/linux下你的目录/MY_PROJ
    |-/my_django_proj
        |-/app1
        ...
        |-/appn
        |-/my_django_proj
        |-/xadmin    (我们这里使用第三方的xadmin进行admin控制)
        |-/uswgi    (由于我们要将django放置与uwsgi容器中运行,文件夹是其的配置文件)
            |-uswgi.ini    (uwsgi配置文件,需要重点配置)
        |-manage.py
        |-uwsgi_params    (我们这里将nginx下的uwsgi_params文件放到这里,也可以不放,这里我只是为  
                                    了将所有跟这个项目相关的文件都放/MY_PROJ下)
    |-/dist
        |-index.html    (原本的dist文件夹好友static文件夹,现在已经跟父级同级目录static整合)
    |-/static (这里我们将原本dist文件夹下的静态文件和django下要用到的静态文件放到这里)
        |-/admin
        |-/xadmin
        |-/rest_framework
        |-/css
        |-/js
        |-/img
        ...   (以上的静态文件夹只是举例)  
    |-/log
        |-/nginx_error.log    (记录nginx错误信息,建议先建一个空文件)
        |-/nginx_access.log   (记录访问信息,建议先建一个空文件)
        |-/uwsgi.log    (建议先建一个空文件)
        ...    (我们将所有要用到的log文件放这个目录下)

这里再给出uwsgi.ini的配置

# uwsgi 配置文件
[uwsgi]

# 仅仅供nginx连接是调用的端口
socket = 127.0.0.1:8000

# 直接做web服务器使用,为了在开发阶段,用vue热开发阶段可以直连django后端,不必经过nginx
# 在上线后,仅通过nginx,可以再将下一行注释掉。(纯个人偏好,仅供参考)
http-socket = 0.0.0.0:8080

# django项目绝对路径
chdir = /linux下你的目录/MY_PROJ/my_django_proj/

# 模块路径(项目名称/wsgi.py)可以理解为wsgi.py的位置, 即uwsgi容器的入口
wsgi-file = my_django_proj/wsgi.py

# 允许主进程
master = true

# 最多进程数
processes  = 4

# 退出时候回收pid文件
vacuum = true

# 日志大小配置50M
log-maxsize = 50000000

# 记录日志配置(我们已经将uwsgi的log文件放到特定目录下了)
logto = /linux下你的目录/MY_PROJ/log/uwsgi.log

stats = 127.0.0.1:9191
pidfile = %(chdir)uwsgi/uwsgi.pid 

接下来就是nginx的conf配置了


#user  nobody;
worker_processes  1;

# 记录nginx错误信息
error_log  /linux下你的路径/MY_PROJ/log/nginx_error.log;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        
        # 以下location为首页配置
        location / {
            root   /linux下你的路径/MY_PROJ/dist;
            # index  index.html index.htm;
            # 以下这行解决页面刷新404问题
	        try_files /index.html $uri $uri/;
        }

        # 以下几个location均为示例


        # 通过nginx访问uwsgi,将/api/xxx 定向到 /v1/xxx
	    location ^~ /api/  {
	        rewrite ^/api/(.*)$ /v1/$1 break;
       	    uwsgi_pass  127.0.0.1:8000;
            include /linux下你的路径/MY_PROJ/my_django_proj/uwsgi_params;
        }

        # 通过nginx访问uwsgi,将/xadmin/xxx 定向到 /v1/xadmin/xxx
	    location ^~ /xadmin/  {
            rewrite ^/xadmin/(.*)$ /v1/xadmin/$1 break;
            uwsgi_pass  127.0.0.1:8000;
            include /linux下你的路径/MY_PROJ/my_django_proj/uwsgi_params;
        }


        # 通过nginx访问静态文件,将/static/xxx 去linux下的/linux下你的路径/MY_PROJ/static下找
	    location ^~ /static/ {
	        rewrite ^/static/(.*)$ /$1 break;
	        root /linux下你的路径/MY_PROJ/static;
	    }
    }
}

到这里已经配置完了

再给出linux下启动uwsgi,nginx,关闭uwsgi,nginx命令

启动nginx:  /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
从容停止nginx:  /usr/local/nginx/sbin/nginx -s quit
后台启动uwsgi:    uwsgi --ini /linux下你的目录/MY_PROJ/my_django_proj/uwsgi/uwsgi.ini &
后台停止uwsgi:    uwsgi --stop /linux下你的目录/MY_PROJ/my_django_proj/uwsgi/uwsgi.pid &
后台重启uwsgi:    uwsgi --reload /linux下你的目录/MY_PROJ/my_django_proj/uwsgi/uwsgi.pid &

 

你可能感兴趣的:(web)