将前端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 &