nginx + uwsgi + debian + django部署

准备工作

  1. 我使用的不是本机系统,而是运行docker镜像库中的debian系统,因为后面还想研究一下,docker自动化部署相关内容,如果你想直接部署,可以跳过准备工作。
  2. 下载docker替换镜像源,因为如果用docker自己的镜像源下载速度会很慢。根据操作系统的不同,大家可以自行百度,mac系统docker桌面版可以在prefrence daemon 的registry mirrors:
  3. docker images 查看本地镜像
  4. docker search debian 查找debian网络镜像
  5. docker pull debian从第三步的结果中拉取想要的镜像
  6. docker run --name mytest -p 0.0.0.0:8000:8081/tcp -it debian /bin/bash
    • --name 为容器取名字
    • -p 本机端口:容器端口
    • -it 交互
  7. docker ps 查看容器
    • -a 查看所有容器
  8. docker stop container_id 停止容器
  9. Docker rm -v containerid 删除容器
  10. 将宿主机的项目拷贝到容器中:docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径

系统镜像

  1. 在容器中,同样要先更新一下debian的下载源

  2. sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    
  3. 安装nginx,python,pip

uWSGI运行

  • 安装 pip3 install uwsgi

  • 整理好自己的目录:到目前为止,你可以不需要顾忌django自己生成之外的文件目录结构,比如uwsgi_param应该放在哪里,uwsgi.ini应该放在哪里。只要你理解绝对路径和相对路径,能够找到配置文件里你的文件就可以。我自己是放在和manage.py同级目录里。

  • 确保你的django项目在 python manage.py runserver时不会报错。

  • 以下两个文件是运行uwsgi必须的文件

  1. uwsgi_param

    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;
    
    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;
    uwsgi_param  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;
    
  2. uwsgi.ini

    [uwsgi]
    socket = 127.0.0.1:50000
    chdir = /home/httpServer/  # 可以理解为此文件的绝对路径
    wsgi-file = httpServer/wsgi.py  # wsgi与chdir的相对路径
    processes = 4
    daemonize = /home/log/httpServer.log  // 日志
    pidfile = /tmp/uwsgi.pid
    master = True
    
  3. 用uwsgi代替wsgi运行django

    uwsgi --ini uwsgi.ini // 写uwsgi.ini相对路径即可

    出现:[uWSGI] getting INI configuration from uwsgi.ini 说明运行成功

    停止uwsgi服务命令:uwsgi --stop uwsgi.pid

nginx

  1. apt-get nginx, 下载nginx ,输入nginx即可启动

  2. 关于nginx不能启动 ==》 在bash栏里输入nginx 根据提示修改配置文件

  3. 大家可以查看一下 /etc/nginx/nginx.conf 相关信息,第61,62行有两个include,分别是引入配置和生效文件的,我们等会自己配置的文件就要软连接(相当于快捷方式引入)到62行的位置里。所以

    /etc/nginx/sites-enabled/ 里的所有文件都是你编辑后生效的,尽量不要有重复的,可能会覆盖不起作用

  4. 编写自己项目的nginx转发:

    
    upstream django { // 配置好被转发到哪个端口
        # server unix:///home/abc/uwsgi-tutorial/mysite/mysite.sock; # for a file socket
        server 0.0.0.0:3032; # for a web port socket (we'll use this first)
    }
    
    server {
        # the port your site will be served on
        listen      8002;  // nginx负责监听的端口
        # the domain name it will serve for
        server_name localhost; # substitute your machine's IP address or FQDN
        charset     utf-8;
    
        # max upload size
        client_max_body_size 75M;   # adjust to taste
    
    
    
        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass django;  // 转发的路由
            include     /root/sxx_system/uwsgi_params; 
        }
    }
    
    
    • /etc/init.d/nginx start (restart stop)
  5. 注意:nginx转发,先要启动uwsgi,在uwsgi_pass中传入uwsgi填入的接口网址

可以完善的点:

  1. 利用docker实现自动化部署,利用dockerfile和sh脚本,docker_compose.yaml,完成环境的安装。使你的包可以直接安装,不需要自己安装相关依赖环境。
  2. nginx其他的一些功能,以及有media和static文件如何处理;按权重分发路由实现负载均衡等。
  3. docker和nginx都是很大的点,在可以完成基本配置后,可以深入研究一下里面的一些其他实现功能。
posted @ 2019-10-22 16:19  Jimmyhe  阅读(453)  评论(0编辑  收藏  举报