本文是在centos7下的一次部署试验,简要记录 Django + uwsgi + Nginx 部署过程,主要思路是各个服务能独立运行,再层层递进、逐步加码完善。首先在服务器环境下启动Django进行开发测试,然后集成在uwsig环境下测试,最后配置在nginx服务中。
本文假定已安装python3,nginx和mysql等,在pycharm开发时已使用虚拟环境venv。
开发环境下固化依赖包
在pycharm的Terminal窗口,即:项目的虚拟环境下,可以很方便的执行pip freeze命令,生成安装包清单
pip freeze > requirements.txt
freeze: Output installed packages in requirements format.
生产服务器
以下步骤均是在生产服务器或生产模拟环境下进行
激活虚拟环境
如果开发时没有使用虚拟环境,建议使用virtualenv创建,激活虚拟环境。
由于在windows下开发,将代码上传centos7后,激活虚拟环境失败,需要使用dos2unix命令将activate文件转换为unix格式。
代码上传路径:/home/centos/modules/mysite
激活命令,如下:
source activate
安装依赖包
pip或者pip3命令,使用依赖清单安装
pip install -r requirements.txt
创建数据库表
除了django自带命令外,也可以使用SQL脚本直接创建,或者导入等。
python3 manage.py migrate
创建静态文件
把所有STATICFILES_DIRS目录下的文件,都复制到STATIC_ROOT中
# 收集、复制相关静态文件
python3 manage.py collectstatic
启动开发模式部署
开发模式带有debug,可以快速查找问题原因,减少其他不必要因素造成干扰
python manage.py runserver 0.0.0.0:8000 --insecure
如果浏览器访问一切正常,继续下一步。
集成uwsgi部署
使用pip3 install uwsgi可安装
# 通过uwsgi访问django需要配置成http
uwsgi --http :8000 --chdir /home/centos/modules/mysite/ --wsgi mysite.wsgi --static-map /static=/home/centos/modules/mysite/static/
如果浏览器访问一切正常,继续下一步。
集成nginx部署
通过nginx请求uwsgi访问django时,uwsgi启动需要配置成socket协议,而上一步中直接访问时,则需要使用http协议。
1、使用socket协议重启django服务:
uwsgi --socket :8000 --chdir /home/centos/modules/mysite/ --wsgi mysite.wsgi --static-map /static=/home/centos/modules/mysite/static/
2、在nginx.conf文件配置uwsgi服务
3、重启nginx服务
/usr/local/webserver/nginx/sbin/nginx -s reload
4、打开浏览器访问,程序运行正常