网站项目在本地开发完成后需要部署到服务器端以实现公网访问,本文主要介绍Django项目几种常见的部署方式。
准备工作
① 将项目所用到的第三方库放在requirements.txt中,方便服务器端安装相关环境。例:django==2.2
,按行分隔。
② 进入服务器中的相关环境,安装所需库pip install -r requirements.txt
③ 本文所部署的服务器为centos7,项目根目录为/opt/Python_Project/Django/AboutMyself
一、简单部署
Django端自带的服务,无性能可言,仅供临时部署。
启动服务
将项目打包到服务器,在主目录下运行:
nohup python3 manage.py runserver 0.0.0.0:80 |
nohup表示不挂断的运行命令
80端口为网页服务器访问的默认端口,也可以设置为其他端口,不被占用即可
停止服务
输入 netstat -ntlp
,查询项目服务对应的进程号,再输入kill -9 进程号
结束该进程
二、nginx+uwsgi+Django部署
生产环境常规部署方法之一,nginx 负责处理静态资源的请求,uwsgi 负责处理动态路由的请求,两者各司其职,提高服务性能
安装nginx
配置官方镜像源,baseurl里面有$basearch变量,用来检索yum命令安装所需要的包
vi /etc/yum.repos.d/nginx.repo |
[nginx] |
yum -y install nginx |
systemctl enable nginx |
安装uwsgi
pip install uwsgi |
配置uwsgi
项目主目录下编写wsgi.py代码:
import os |
在项目主目录下新建目录uwsgi_conf,进入该目录新建uwsgi.ini文件,配置如下:
[uwsgi] |
之所以要新建一个uwsgi_conf目录,是为了集中放置uWSGI配置以及日志、进程等文件,方便管理,配置语法可参考官方配置文档说明
启动uwsgi
uwsgi --ini uwsgi.ini |
启动后打印的信息,可以看到static静态文件和media媒体资源目录被uWSGI索引
[uWSGI] getting INI configuration from uwsgi.ini |
配置ngnix
在项目主目录下新建nginx.conf文件,配置如下:
server { |
将该文件链接到/etc/nginx/conf.d/下
ln -s /opt/Python_Project/Django/AboutMyself/nginx.conf /etc/nginx/conf.d/AboutMyself.conf |
修改nginx主配置文件,vi /etc/nginx/nginx.conf
# For more information on configuration, see: |
其实nginx配置文件很灵活,可以从其他模块include根配置文件里面,查看主配置nginx.conf内容里面的http 模块,它可以是可以把/etc/nginx/conf.d/目录下所有的配置文件内容包含到主配置文件里面,注意如果使用这种方式,请把主配置文件server模块注释,其实就是关闭多余其他服务端口而已。
启动nginx
systemctl start nginx.service |
若启动失败,可参照错误信息排查问题所在。
启动成功后即可访问到部署成功的Django项目了!
三、版本迭代
项目开发总是一个不断迭代的过程,以网站开发来说,本人习惯使用GitHub作为版本管理工具,实现开发环境与服务器环境的版本传递。
本地提交修改:git push
服务器同步修改:git pull origin master
总结
本博主历经n个夜晚,踩了不少坑,刚才第一次用nginx+uwsgi部署成功,目前还处于摸索阶段,因此本文没有涉及http请求等原理,只是简单的记录了部署的流程,若有不正之处望大佬指出,后续会学得更深入一点。对了,docker容器化管理也是不错的选择,等有时间学习了再更新…