部署crmxiang
一相关知识介绍
1.1WSGI、uWSGI
python web服务器开发使用WSGI协议(Web Server Gateway Interface)
python web项目默认会生成一个wsgi.py文件,确定好应用模块。
生产环境中使用的是uWSGI,实现了WSGI所有接口,C语言编写,效率很高的web服务器。
uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
1.2Nginx
使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署。
1.3CentOS
1.打包项目CRM文件夹,压缩文件
2.通过xftp、scp、lrzsz等上传文件至Centos服务器
1.4Linux使用技巧
1.通过xshell或者iTerm等软件,多终端操作你的linxu,这样对uwsgi、nginx、项目代码调试的时候,避免来回切换目录,提供工作效率。
2.注意修改了linux软件的配置文件,都要重启服务才能生效。
1.5Virtualenv
构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。也可以使用它的升级版本
1.5Supervisor
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
二 crm项目部署
2.1准备crm项目
2.2激活虚拟环境python虚拟环境
方法一: workon nbcrm 方法二: #创建基于python3的虚拟解释器环境venv virtualenv --no-site-packages --python=python3 venv #激活python3虚拟环境 [root@yugo /data 11:11:30]#source venv/bin/activate (venv) [root@yugo /data 11:11:35]#
2.3 在虚拟环境下,安装uwsgi安装uwsgi
pip3 install -i https://pypi.douban.com/simple uwsgi
2.4 使用uwsgi.ini配置文件方式,启动NBcrm项目
1、手动创建uwsgi.ini,放在NBcrm项目下,便于管理 touch uwsgi.ini 2、配置文件uwsgi.ini的内容如下,这就是一个普通文本,里面定义了功能参数 [uwsgi] # Django-related settings # the base directory (full path) #项目的绝对路径,定位到nbcrm的第一层 chdir = /opt/py_crm # Django's wsgi file # 找到项目第二层的wsgi文件 module = py_crm.wsgi # the virtualenv (full path) # 找到虚拟环境的绝对路径 home = /root/Envs/crm # process-related settings # master # 主进程 master = true # maximum number of worker processes # 开启uwsgi的多进程数,根据cpu核数来定义 processes = 16 # the socket (use the full path to be safe # 基于socket链接运行crm,只有与nginx结合的时候,才使用socket形式 socket = 0.0.0.0:8000 # 当你没用nginx,调试项目的时候,使用http形式 #http = 0.0.0.0:8000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true #如果你使用了supervisor,请注释掉这个参数 #守护进程在后台运行,且将日志信息,输出到uwsgi.log日志中 #使用supervisor时,不能写下面的语句,不然会报错退出太快 #daemonize = uwsgi.log 3、启动配置文件 #通过uwsgi.ini配置文件,启动NBcrm,使用绝对 /root/Envs/crm/bin/uwsgi --ini uwsgi.ini
2.5静态文件的及nginx.conf 的配置
此时后端项目uwsgi已经启动,但是由于uwsgi默认不解析django的静态文件,需要收集django所有静态文件,然后让nginx去处理静态文件并且使用nginx的反向代理特性.
请求流程:
用户发起请求, >>>>>>>>>访问192.168.16.142(或者访问域名www.s20crm.com) ,请求走到nginx这一层代理,>>>>>>>>>nginx直接转发(uwsgi_pass)给后端django的地址django处理完毕 >>>>>>>响应给nginx >>>>>> nginx返回结果给浏览器界面
1.修改django的settings.py静态文件 添加如下参数 # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ #自定义的文件夹,统一管理django所有的静态文件 STATIC_ROOT='/opt/s20static' STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'statics'), ] 2.执行命令,收集crm的静态文件 python3 /opt/NBcrm/manage.py collectstatic 3.配置nginx的location路径匹配,找到crm这些静态文件 在nginx.conf中找到server{}标签,添加如下参数 #当我的请求url是 192.168.16.142:80/static/xxxxxxxx location /static { alias /opt/s20static/; } 4. 修改nginx.conf配置如下 server { listen 80; server_name localhost; #最低级路径匹配,当请求url是 www.s20crm.com(192.168.16.142/) location / { #include翻译就是包含的意思,将外部一个文件的内容,包含进来 include uwsgi_params; # uwsgi_pass 127.0.0.1:8000; } #当请求是 192.168.16.142/static/xxxxx #解析NBcrm静态文件内容,处理css js location /static { alias /opt/s20static/; } }