Django 部署记录

作者: 一名普通用户 | 来源:发表于2017-07-24 23:14 被阅读0次

    前段时间弄了个 Django 的程序,为了在服务器上跑起来,花费了不少的时间搜索相关内容,现在记录下来。

    运行条件

    云主机 + Ubuntu server 16.04.2 LTS + Nginx 1.10 + Django 1.10 + uWSGI 2.0.14

    修改 Nginx 配置

    服务器上用了 https ,可以参照我之前的记录提前弄好。
    《Let's Encrypt 使用记录 - 简书》

    使用之前当然要先安装,简单地使用 apt 命令安装即可

     sudo apt install nginx
    

    安装后用终端切换到/etc/nginx/sites-enable/ 下,新建 project-https 文件(https用),输入以下内容:

    server {
        listen 443 ssl;
        server_name domain.com
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:6666;
        }
        location /static {
            root /var/www/project-html;
        }
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
        ssl_dhparam /etc/ssl/certs/dhparams.pem;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_prefer_server_ciphers on;
    

    127.0.0.1:6666 这个参数要在后面用到,在这里可以提前决定Django 使用哪一个端口号。
    uwsgi_params 的文件内容会在后面提及。
    location /static是在 Django admin 中用到的 html 和 js 文件,复制过去就好,剩下的带 ssl 的参数就请按照上面给出的链接做吧。

    然后在同样的目录下新建project-http2https文件(用于http 跳转到 https),输入以下内容:

    server {
        listen 80;
        server_name domain.com
        return 301 https://$server_name$request_uri;
    }
    

    http 状态码 中 301 代表 Moved Permanently,意为永久移动。
    最后的是 request_uri 并非 request_url,这算是之前在输入的时候没有仔细留意到的一点,多花了点时间。

    切换到 /etc/nginx/ ,补充在 https 用的文件中用到的uwsgi_params,内容如下:

    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;
    
    

    安装 uWSGI

    pip 即可。

    pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
    

    -i 后面表示从国内的镜像站下载,速度会快不少。这是个小窍门。

    修改 Django 设置

    在项目设置的目录中添加uwsgi_file.py文件,文件内容如下:

    import os,sys
    import django.core.handlers.wsgi
    import django
    
    sys.path.append(os.path.abspath(os.path.dirname(__file__)))
    sys.path.append('/home/ubuntu/project/')
    os.environ['DJANGO_SETTINGS_MODULE']='project.settings'
    django.setup()
    application = django.core.handlers.wsgi.WSGIHandler()
    

    第五行中的地址要根据自己的项目文件位置设置,例子中是放在/home/ubuntu/project/ 中的,同样要留意的是接下来的第六行的填写。

    为了方便,我弄了几个批处理文件run.shstop.sh,用chmod +x 给了执行权限。

    • run.sh
    echo 'begin'
    sudo uwsgi -s 127.0.0.1:6666 --chdir /home/ubuntu/project/project -p 10 -w uwsgi_file -d /home/ubuntu/status.log
    echo 'done'
    

    127.0.0.1:6666 ,留意到这一点了吗,这是由之前 Nginx 配置中所决定的。当然,不建议使用常见的端口,以免影响其他程序的使用。
    --chdir 后面跟着的是项目的文件。
    -p 后面所跟着的数字代表开多少个进程。
    -w 后面跟着的是我们上面新建的文件。
    -d 表示以后所有的程序状态都存到指定的文件中。

    • stop.sh
    sudo kill -9 $(ps aux | grep 'uwsgi' | awk '{print $2}' )
    

    stop.sh文件相比较之下就显得简单了,直接用kill杀死带 uwsgi 的进程。
    你也可以新建一个detect.sh ,查看是否正常启动。内容如下

    ps aux | grep 'uwsgi'
    

    启动

    • 首先是要先启动 Nginxsudo service nginx start
    • 之后运行上面写好的 run.sh

    完成!

    来自个人 Python 文集

    相关文章

      网友评论

        本文标题:Django 部署记录

        本文链接:https://www.haomeiwen.com/subject/qndikxtx.html