django|uwsgi+Django 部署 前后端不分离web项目
前后端不分离部署方式:
没有静态文件服务器单独提供静态文件,只有后端接口服务器,通过设置路由访问静态文件Django项目中应用到模板继承,采用前后端分离的模式部署继承模式就不能继续使用了
开发阶段: django提供的开发web服务器。python manage.py runserver ip:端口
部署: uwsgi-> 遵循wsgi协议web服务器。
【django|uwsgi+Django 部署 前后端不分离web项目】目录结构
├── demo
│ ├── db.sqlite3
│ ├── demo
│ │ ├── init.py
│ │ ├── pycache
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── ftest
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── init.py
│ │ ├── migrations
│ │ ├── models.py
│ │ ├── pycache
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── manage.py
│ ├── uwsgi.ini
│ ├── uwsgi.log
│ └── uwsgi.pid
└── front
├── children.html
├── css
│ └── children.css
├── ftest.html
├── js
│ ├── children.js
│ └── jQuery2.0.js
└── static
├── admin
├── css
└── js
1. 安装uwsgi
pip install uwsgi
2. 在项目目录/demo 下创建uwsgi配置文件 uwsgi.ini
[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
;
socket=127.0.0.1:8001
#直接做web服务器使用,Django程序所在服务器地址
http=127.0.0.1:8001
#项目目录(manage.py所在目录)
chdir=/home/python/Desktop/django/demo
# 如果修改/碰了指定的文件,那么重载uWSGI
touch-reload = DJANGO_DIR
#项目中wsgi.py文件的目录,相对于项目目录(写项目目录chdir之后的目录)
wsgi-file=demo/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的(会生成在与uwsgi.ini平级目录中)
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/home/python/.virtualenvs/ETL
3. 修改django配置文件
# debug 生产环境修改为False
DEBUG = False# Django通过django.contrib.staticfiles来管理静态文件,首先确保django.contrib.staticfiles已经添加到INSTALLED_APPS。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',# 确保有
'ftest.apps.FtestConfig',
]# 增加静态文件配置
STATIC_URL = '/static/'# 对外提供WEB访问时static的URL地址# 静态文件收集之后存放的目录
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'front/static')# 设置绝对路径, 用来保存收集到的静态文件,服务器最终也将从该路径中获取文件进行转发。在collectstatic运行的时候会把STATICFILES_DIRS中的静态文件拷贝到这个目录中,达到从开发环境到生产环节过程中移植静态文件的作用。# 用来配置一些开发环境下生成的静态文件的地址,即front/css, front/js
STATICFILES_DIRS = (
('css',os.path.join(os.path.dirname(STATIC_ROOT),'css').replace('\\','/') ),
('css',os.path.join(os.path.dirname(STATIC_ROOT),'js').replace('\\','/') ),
)# 将静态文件中需要需要修改的生产环境的配置一一修改,包括数据库配置等
4. 添加路由 demo/urls.py urls.py文件内容为:
from django.views import static
from demo import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^ftest/', include('ftest.urls')),
url(r'^static/(?P.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='static'),# 添加
]
可能存在的bug:
from demo import settings 时,最初写做from demo.demo import settings(从BASE_DIR开始写), 运行报错,找不到demo.demo, 改为from demo import settings后,settings单词有红色划线提示,于是将最外层demo文件设置为Sources Root(pyCharm中操作),无法设置资源文件的情况不详
5. 模板文件.html中引用css/js路径修改 访问路径 http://127.0.0.1:8001/ftest/ch/
# 非调用路由的引用方式,调用已经编译好的静态文件front/css, front/js中文件
# 调用路由的引用方式
'''
注意/static 与 static 区别
href="https://www.it610.com/static/css/children.css" 访问url:http://127.0.0.1:8001/static/css/children.css
href="https://www.it610.com/article/static/css/children.css" 访问url:http://127.0.0.1:8001/ftest/ch/static/css/children.css 无法正确通过路由访问到静态文件
'''
6. 收集静态文件 django在生产环境下不直接对外提供静态文件(这里通过设置路由的方法进行访问),但是还有django自身的一些静态文件,比如admin, rest_franework的css,js和其他等,所以通过执行静态文件收集命令来收集
python manage.py collectstatic
7. uwsgi服务器的启用与停用
# 启动
uwsgi --ini uwsgi.ini
(配置文件路径)
# 启动后生成文件
uwsgi.log日志文件
uwsgi.pid进程号
# 查看日志文件
tail -f uwsgi.log
(查看的内容始终为最新)
# 停用
uwsgi --stop uwsgi.pid
(uwsgi.pid文件路径)
推荐阅读
- django-前后端交互
- Beego打包部署到Linux
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- Spring|Spring Boot部署到Resin遇到的问题
- django2.2|django2.2 一般项目步骤(初步)
- 如何在阿里云linux上部署java项目
- 部署专题集合
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- django|django 自定义.save()方法
- 一键编译部署Mysql