Django 部署記錄

前段時間弄了個 Django 的程序,為了在服務(wù)器上跑起來,花費(fèi)了不少的時間搜索相關(guān)內(nèi)容盖腕,現(xiàn)在記錄下來。

運(yùn)行條件

云主機(jī) + Ubuntu server 16.04.2 LTS + Nginx 1.10 + Django 1.10 + uWSGI 2.0.14

修改 Nginx 配置

服務(wù)器上用了 https 浓镜,可以參照我之前的記錄提前弄好溃列。
《Let's Encrypt 使用記錄 - 簡書》

使用之前當(dāng)然要先安裝,簡單地使用 apt 命令安裝即可

 sudo apt install nginx

安裝后用終端切換到/etc/nginx/sites-enable/ 下竖哩,新建 project-https 文件(https用)哭廉,輸入以下內(nèi)容:

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 這個參數(shù)要在后面用到,在這里可以提前決定Django 使用哪一個端口號相叁。
uwsgi_params 的文件內(nèi)容會在后面提及遵绰。
location /static是在 Django admin 中用到的 html 和 js 文件,復(fù)制過去就好增淹,剩下的帶 ssl 的參數(shù)就請按照上面給出的鏈接做吧椿访。

然后在同樣的目錄下新建project-http2https文件(用于http 跳轉(zhuǎn)到 https),輸入以下內(nèi)容:

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

http 狀態(tài)碼 中 301 代表 Moved Permanently虑润,意為永久移動成玫。
最后的是 request_uri 并非 request_url,這算是之前在輸入的時候沒有仔細(xì)留意到的一點(diǎn)拳喻,多花了點(diǎn)時間哭当。

切換到 /etc/nginx/ ,補(bǔ)充在 https 用的文件中用到的uwsgi_params冗澈,內(nèi)容如下:

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 后面表示從國內(nèi)的鏡像站下載,速度會快不少亚亲。這是個小竅門彻采。

修改 Django 設(shè)置

在項(xiàng)目設(shè)置的目錄中添加uwsgi_file.py文件腐缤,文件內(nèi)容如下:

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()

第五行中的地址要根據(jù)自己的項(xiàng)目文件位置設(shè)置,例子中是放在/home/ubuntu/project/ 中的肛响,同樣要留意的是接下來的第六行的填寫岭粤。

為了方便,我弄了幾個批處理文件run.shstop.sh特笋,用chmod +x 給了執(zhí)行權(quán)限剃浇。

  • 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 ,留意到這一點(diǎn)了嗎雹有,這是由之前 Nginx 配置中所決定的偿渡。當(dāng)然,不建議使用常見的端口霸奕,以免影響其他程序的使用。
--chdir 后面跟著的是項(xiàng)目的文件吉拳。
-p 后面所跟著的數(shù)字代表開多少個進(jìn)程质帅。
-w 后面跟著的是我們上面新建的文件。
-d 表示以后所有的程序狀態(tài)都存到指定的文件中留攒。

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

stop.sh文件相比較之下就顯得簡單了煤惩,直接用kill殺死帶 uwsgi 的進(jìn)程。
你也可以新建一個detect.sh 炼邀,查看是否正常啟動魄揉。內(nèi)容如下

ps aux | grep 'uwsgi'

啟動

  • 首先是要先啟動 Nginxsudo service nginx start
  • 之后運(yùn)行上面寫好的 run.sh

完成拭宁!

來自個人 Python 文集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洛退,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杰标,更是在濱河造成了極大的恐慌兵怯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腔剂,死亡現(xiàn)場離奇詭異媒区,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掸犬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門袜漩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湾碎,你說我怎么就攤上這事宙攻。” “怎么了胜茧?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵粘优,是天一觀的道長仇味。 經(jīng)常有香客問我,道長雹顺,這世上最難降的妖魔是什么丹墨? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮嬉愧,結(jié)果婚禮上贩挣,老公的妹妹穿的比我還像新娘。我一直安慰自己没酣,他們只是感情好王财,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著裕便,像睡著了一般绒净。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偿衰,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天挂疆,我揣著相機(jī)與錄音,去河邊找鬼下翎。 笑死缤言,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的视事。 我是一名探鬼主播胆萧,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俐东!你這毒婦竟也來了跌穗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤犬性,失蹤者是張志新(化名)和其女友劉穎瞻离,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乒裆,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套利,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹤耍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肉迫。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖稿黄,靈堂內(nèi)的尸體忽然破棺而出喊衫,到底是詐尸還是另有隱情,我是刑警寧澤杆怕,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布族购,位于F島的核電站壳贪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寝杖。R本人自食惡果不足惜违施,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瑟幕。 院中可真熱鬧磕蒲,春花似錦、人聲如沸只盹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殖卑。三九已至站削,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孵稽,已是汗流浹背钻哩。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肛冶,地道東北人。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓扯键,卻偏偏與公主長得像睦袖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荣刑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容