django8.4 项目部署——uwsgi

django 项目部署——uwsgi

  1. 概念:
      项目部署是指软件开发后,将开发机器上运行的软件实际安装到服务器上进行长期运行。

    1. 在安装机器上安装和配置同版本的环境【python,数据库等】
    2. django项目迁移:sudo scp /home/tarena/django/mysite1 [email protected]:/home/root/xxx
    3. 用uWSGI替代python manage.py runserver方法启动服务器
    4. 配置nginx反向代理服务器
    5. 用nginx配置静态文件路径,解决静态路径问题。
  2. WSGI(web server gateway interface):

      web服务器网关接口,是python应用程序或框架和web服务器之间的一种接口,被广泛使用。
      使用python manage.py runserver 通常只在开发和测试环境中使用。
      当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用WSGI。

  3. uWSGI:
      是WSGI的一种网络接口的服务,它实现了http协议、WSGI协议以及uwsgi协议。主要以学习配置为主。像runserver一样,学会如何使用就行。

    1. 安装uWSGI:sudo pip install uwsgi,可以使用国内的镜像sudo pip install uwsgi -i https://pypi.tuna.tsinghua.edu.cn/simple。使用sudo pip freeze|grep -i 'uwsgi'检查是否安装成功;

    2. 配置uWSGI:

      1. 添加配置文件:项目同名文件夹/uwsgi.ini】,例如mysite1/mysite1/uwsgi.ini :cd 到day08/mysite7/mysite7 (注意是在项目同名的目录下,不是直接在项目目录),touch uwsgi.ini

      2. 文件以[uwsgi]开头,有如下配置项:

        套接字方式的 IP地址:端口号,[此模式需要有nginx]:socket=127.0.0.1:8000
        Http通信方式的 IP地址:端口号:http=127.0.0.1:8000
        项目当前的工作目录:chdir=/home/tarena/.../my_project , 必须是个绝对路径,指明当前的项目在哪
        项目中wsgi.py文件的目录,相当于当前的工作目录:wsgi-file=my_project/wsgi.py , 是个相对路径
        进程个数:process=4
        每个进程的线程个数:threads=2
        服务的pid记录文件:pidfile=uwsgi.pid
        服务的日志文件位置(后台启动):daemonize=uwsgi.log
        开启主进程管理模式:master=true
        
      3. 买了公有云之后,Django的settings还需要做:(现在就不改了)

        修改settings.py 将DEBUG=True 改为DEBUG=False
        修改settings,py 将ALLOWED_HOSTS=[]改为ALLOWED_HOSTS=['网站域名']或者['服务监听的ip地址']
        
    3. 启动uwsgi:cd 到uWSGI配置文件所在的目录(ls之后能看到uwsgi.ini这个文件),执行uwsgi --ini uwsgi.ini

      1. 判断有没有启动起来:ps aux|grep 'uwsgi', 结果中有uwsgi.ini之类的进程就说明ok了。
      2. 启动成功之后ls就会发现,多了uwsgi.pig和uwsgi.log两个文件,启动以及报的错等日志都在uwsgi.log中。
      3. 现在就可以访问之前runserver之后访问的地址了。
    4. 停止uwsgi:cd 到uWSGI配置文件所在的目录,执行uwsgi --stop uwsgi.pid

      1. 确认停没停也可以使用ps aux|grep 'uwsgi'查看一下。
    5. 整个启动和停止的过程,都应该拿ps查看是否有相应的进程启动或者终止。Django中代码有任何修改,都需要重新启动uwsgi(先stop在ini)。

  4. 常见问题(可以去uwsgi.log中查看出错信息):

    1. 启动失败:端口占用,使用sudo lsof -i:端口号查询出占用8000端口的具体进程,kill -9 进程号干掉它,权限不够的话就加个sudo。再重新uwsgi --ini uwsgi.ini启动即可。
    2. 停止失败:stop无法关闭uWSGI,可能是因为重复启动uWSGI,导致pid文件中的进程号失准(可以cat uwsgi.pid查看该文件,里面是主进程ID,然后ps aux|grep 'uwsgi'看uwsgi的实际进程号,失准的话,二者估计是对不上的),可以使用ps aux|grep 'uwsgi'查出uWSGI进程,kill -9 进程号干掉。权限不够的话就加个sudo。

你可能感兴趣的:(django,django,nginx,python)