Django 部署记录

前段时间弄了个 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 文集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容