109 使用nginx+uWSGI+django+virtualenv+supervisor发布web服务器

主要内容:https://www.cnblogs.com/pyyu/p/9481344.html?tdsourcetag=s_pcqq_aiomsg

1 使用linux运行django项目

  a : 准备python环境, 准备虚拟环境, 激活虚拟环境:    mkvirtualenv nbcrm

  b : 安装django模块:  pip3 install django==1.11.11

  c : 安装pymysql连接mysql数据库 pip3 install pymysql

  d : 安装django的一个django-mutiselectfield : pip3 install django-mutiselectfield

  e : 解决项目的数据库连接问题, 修改settngs.py:

    1) 启动linux的数据库, 创建对应的数据库, 密码设置等: create  database nb_crm

    2) 更改settings.py

DATABASES = {
			'default': {
				'ENGINE': 'django.db.backends.mysql',
				'NAME': 'nb_crm', #数据库名
				'HOST': '127.0.0.1',  #这里服务器的ip地址
				'PORT': 3306,	#端口
				'USER': 'root',	#用户名 
				'PASSWORD': 'redhat123',   #用户密码
			}
		}

     3) 更改允许主机: ALLOWED_HOSTS = ['*']

2  使用uwsgi启动django

  1) 安装uwsgi:   pip3 install -i https://pypi.douban.com/simple uwsgi

  2)  通过uwsgi命令启动python项目(问题:  uwsgi不处理static静态文件)

      uwsgi --http :8888  --module Nb_crm.wsgi  

  3) uwsgi可以热加载项目

uwsgi --http :9999  --module mycrm.wsgi --py-autoreload=1 
--py-autoreload是告诉uwsgi自动重启加载django项目

  4) 通过uwsgi的配置文件启动项目

    a : 手动创建uwsgi.ini文件  touch  uwsgi.ini

    b : 写下如下配置:

[uwsgi]
		#项目的绝对路径,定位到项目的第一层
		chdir           = /opt/NB_crm
		#指明项目的wsgi文件路径
		module          = NB_crm.wsgi
		#指明你的虚拟解释器的第一层路径
		home            = /root/Envs/nbcrm
		#指明通过uwsgi,启动多少个进程
		processes       = 5

		#非常重要
		#非常重要
		#非常重要
		#如果你已经配置了nginx(启动了nginx服务,配置了uwsgi_pass),请用这个socket连接
		#socket          = 0.0.0.0:8000

		#如果你没用nginx,想通过uwsgi直接启动web服务,指明http协议
		http = 0.0.0.0:9999

		#在退出uwsgi环境后,清空环境变量
		vacuum          = true

  5) :通过配置文件, 启动nb_crm(注意uwsgi不会处理静态文件, 如果有,也是浏览器的缓存)

    uwsgi --ini  uwsgi.ini 

  6): 配置django的settings.py, 手机所有的nb_crm项目所需的静态文件

    1 通过命令, 收集整个项目的所有静态文件, 放入到/opt/static

    2 执行命令python  manage.py collectstatic

    3 此时nb_crm的所有静态文件, 都在opt/static下

  7) 配置nginx:

    1 配置一个网站入口,当用户访问192.168.12.96:80 这个web应用时,自动将请求转发给uwsgi,uwsgi处理后,返回给nginx,返回给用户当请求是192.168.12.96:80的时候,其实访问的是192.168.12.96:9999 这是动态请求,因为我是找到的uwsgi#匹配度最低的写法,因此就是任何的请求都访问到这里

    2通过nginx去处理静态文件

    3 nginx.conf的配置如下:

  upstream nbcrm {
		server 127.0.0.1:8000;
}

    server {
       listen 80;
       server_name  www.s14huoying.com;
	   #讲nginx入口的请求,直接反向代理给uwsgi
       location / {
         uwsgi_pass  nbcrm;
         include /opt/nginx1-12/conf/uwsgi_params;
}
	#通过nginx处理nbcrm的静态文件
	location /static {
		alias /opt/static/;
		}
	}

  8) 更改uwsgi.ini, 指明socket连接, 结合uwsgi和nginx:  如果你已经配置了nginx, 请用这个socket连接

  9) 启动uwsgi: uwsgi --ini uwsgi.ini 

  10) 启动nginx, 访问nginx的域名入口, 看能否访问到uwsg项目, 并且静态文件是否正常.

   11) 配置supervisor, 管理uwsgi进程(此时退出虚拟环境, 在宿主机环境下安装supervisor)

    1.安装easy_install ,python2的软件包管理工具 ,如果有了可以忽略

      yum install python-setuptools;   easy_install supervisor

    2 使用supervisor命令, 常用命令如下:   echo_supervisord_conf > /etc/supervisord.conf(生成配置文件)

    3 修改配置文件,添加任务,按照自己的机器环境修改此命令

[program:s14nbcrm]
#启动uwsgi的命令就是这个
command=/root/Envs/nbcrm/bin/uwsgi  --ini /opt/NB_crm/uwsgi.ini
#自动启动uwsgi,挂了之后自动加载
autorestart=true

    4启动supervisor服务, 启动uwsgi: supervisord -c  /etc/supervisord.conf

    5 通过命令管理uwsgi   supervisor直接回车, 进入到交互式管理状态

    

	[root@node1 ~ 11:53:32]#supervisorctl 
	s14nbcrm                         RUNNING   pid 2008, uptime 0:01:56

也可以通过命令交互式的管理uwsgi
	#服务端启动后,通过命令管理软件

	supervisorctl  start s14nbcrm
	supervisorctl  stop  s14nbcrm 
	supervisorctl status s14nbcrm

  

posted @ 2018-12-10 20:01  ...绿茵  阅读(187)  评论(0编辑  收藏  举报
1