uwsgi+Django 部署 前后端不分离web项目

前后端不分离部署方式:

没有静态文件服务器单独提供静态文件,只有后端接口服务器,通过设置路由访问静态文件

开发阶段: django提供的开发web服务器。python manage.py runserver ip:端口
部署: uwsgi-> 遵循wsgi协议web服务器。

Django项目中应用到模板继承,采用前后端分离的模式部署继承模式就不能继续使用了

目录结构

├── 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="/static/css/children.css" 访问url:http://127.0.0.1:8001/static/css/children.css   
href="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,uwsgi,web部署)