【Django学习】uWSGI命令学习与使用

10. 完成uWSGI命令学习与使用

10.2 使用pip安装uwsgi模块

pip3 install uwsgi

10.3 uwsgi的hello world测试

参照博客https://www.cnblogs.com/tiger666/articles/10313069.html里面的安装uwsgi版块

创建一个测试文件testuwsgi.py, 运行简单的uWSGI站点

10.3.1 创建文件vim /opt/testuwsgi.py 写入以下内容
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]
10.3.2 使用uwsgi命令启动此文件
uwsgi --http :9000 --file testuwsgi.py
10.3.3 在浏览器通过IP加端口进行访问
http://10.0.0.5:9000

10.4 配置uwsgi.ini文件

在django项目根目录下(manage.py同级别目录)创建这个文件

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
# socket=0.0.0.0:9000
#直接做web服务器使用,Django程序所在服务器地址
http=0.0.0.0:9000
#项目目录
chdir=/opt/book_manage
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=LIB/wsgi.py
# 进程数
processes=1
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
# 如果启用了supervisor工具,就将此行注释
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/root/Envs/book_manage_env
注意: 目前暂时先用http,如果使用nginx的话,就需要注释掉http,启用socket

10.5 使用uwsgi命令启动django程序

uwsgi --ini /opt/book_manage/uwsgi.ini

10.6 uwsgi启动后无法访问的问题解决

修改项目里面的wsgi.py文件,将settings的配置指向dev.py

vim /opt/book_manage/book_manage/wsgi.py

修改配置文件

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'book_manage.settings')

10.7 uwsgi不能处理静态文件

uwsgi本身是支持高并发,多进程的功能,这是它的优点

缺点: 不能处理静态文件

11 收集django的静态文件

由于uwsgi对静态文件的处理很差,然而nginx处理静态文件是一把手,所以我们的项目部署还需要结合nginx来使用

11.1 设置django的静态文件目录并收集, 打开mysite/settings.py, 加入这一项配置:

STATIC_ROOT='/opt/book_manage/static'  # 在STATIC_URL = '/static/'配置上面加这一行
STATIC_URL = '/static/'
STATICFILES_DIRS=[
  os.path.join(BASE_DIR,"static"),
]

那么,上述的参数STATIC_ROOT用在哪?看下面

11.2 通过python3 manage.py collectstatic 收集所有你使用的静态文件保存到STATIC_ROOT

python3 manage.py collectstatic

# STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来
# 把这些文件放到一起是为了用nginx等部署的时候更方便

11.3 查看django的静态文件收集目录

ls /opt/book_manage/static

 

12.完成nginx的安装并配置nginx

完成nginx处理图书管理系统项目的静态文件, 与后端的接口配置

12.1 nginx.conf配置文件详情

server {
  listen       80;
  server_name 10.0.0.5;
  #charset koi8-r;
  #access_log logs/host.access.log main;

  location / {
      include uwsgi_params;
      uwsgi_pass 0.0.0.0:9000;
  }
  location /static {
      root   /opt/book_manage;
  }
  error_page   500 502 503 504 /50x.html;
  location = /50x.html {
      root   html;
  }
}

虚拟主机: 用于接受用户发起的80端口的请求,反向代理转发给9000的uwsgi应用, 同时处理后端的静态文件static

12.2 nginx配置并启动好之后,再启用uwsgi.ini配置文件里面的socket并禁用http配置

[uwsgi]
#使用nginx连接时使用,Django程序所在服务器地址
socket=0.0.0.0:9000
#直接做web服务器使用,Django程序所在服务器地址
# http=0.0.0.0:9000
#项目目录
chdir=/opt/book_manage
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=book_manage/wsgi.py
# 进程数
processes=2
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的
# 如果启用了supervisor工具,就将此行注释
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/root/Envs/book_manage

13. 测试uwsgi与nginx

测试手动启动uwsgi与nginx,能够保证正常访问即可

13.1 启动uwsgi

/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini

13.2 平滑重启nginx

/opt/nginx116/sbin/nginx -s reload

13.3 项目访问不了的解决思路(重要指数****************)

1 先关闭nginx, 再关闭uwsgi,直接使用python manage.py runserver命令启动django项目
2 关闭刚才启动的django,使用uwsgi将项目跑起来, 使用9000端口访问,确认是否正常
3 注释掉uwsgi配置文件中的http,启用socket,再启动uwsgi,再启动nginx,再进行访问
http://10.0.3.156

14 supervisor工具的安装与使用

14.1 supervisor的概念

supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。

14.2 安装

由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

由于supervisor在python3下无法使用,因此只能用python2去下载!!!!!!

easy_install supervisor   # 这个是python2下面的安装模块命令,等同于python3下面的pip

如果easy_install命令无法使用的话,就安装一下python-setuptools工具即可
yum install python-setuptools

14.3. 使用命令生成supervisor配置文件

echo_supervisord_conf > /etc/supervisord.conf

14.4. 修改配置文件/etc/supervisord.conf

在文件末尾添加如下配置:

[program:book_manage]
command=/root/Envs/book_manage/bin/uwsgi /opt/book_manage/uwsgi.ini
stopasgroup=true
killasgroup=true
# 如果发现关闭supervisor进程后,结束uwsgi进程无效,就需要加上这两个参数

14.5. 启动supervisor工具

supervisord -c /etc/supervisord.conf

14.6 查看supervisor的状态

supervisorctl

supervisor交互模式中基本操作命令

start 进程名   # 启动进程
stop 进程名   # 停止进程
start all     # 启动所有进程
stop all     # 启动所有进程

14.7 supervisor启动命令参数

# 任务管理命令如下:有两种,一个是参数形式, 一个是交互式
# 参数形式  
supervisord -c /etc/supervisor.conf stop/start/restart   all
supervisord -c /etc/supervisor.conf start qishi8

# 交互式形式
supervisord -c /etc/supervisor.conf

14.8 重新加载supervisor(了解即可)

一、添加好配置文件后

二、更新新的配置到supervisord    

supervisorctl update
三、重新启动配置中的所有程序

supervisorctl reload
四、启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name
五、查看正在守候的进程

supervisorctl
六、停止某一进程 (program_name=你配置中写的程序名称)

supervisorctl stop program_name
七、重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name
八、停止全部进程

supervisorctl stop all
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
作者:gtea 博客地址:https://www.cnblogs.com/gtea
原文地址:https://www.cnblogs.com/gtea/p/15614506.html