日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何配置nginx+uwsgi+django?(知乎上面的看着不错)

發(fā)布時(shí)間:2024/9/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何配置nginx+uwsgi+django?(知乎上面的看着不错) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:知乎用戶
鏈接:https://www.zhihu.com/question/27295854/answer/36365005
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

django簡易部署指南.md
----------------------------

首先 推薦使用virtualenv用于創(chuàng)建獨(dú)立的Python環(huán)境 使多個(gè)python多個(gè)Python相互獨(dú)立,互不影響 你比較高大上 用virtualenvwrapper 也沒關(guān)系。。。

?

virtualenv --no-site-packages testcd testsource bin/activatepip install gunicorn djangodjango-admin.py startproject hellocd hello# to test the base setup workspython manage.py runserver 0.0.0.0:8000

Gunicorn

Gunicorn“綠色獨(dú)角獸”是一個(gè)被廣泛使用的高性能的Python WSGI UNIX HTTP服務(wù)器 與django搭配 效果拔群

Testing Django with Gunicorn is as simple as:

我們先來個(gè)simple Example來運(yùn)行django

?

gunicorn_django -b 0.0.0.0:8000

當(dāng)然 正常的合理的運(yùn)行方法是寫個(gè)sh腳本來運(yùn)行 like it

?

#!/bin/bashset -eLOGFILE=/var/log/gunicorn/hello.logLOGDIR=$(dirname $LOGFILE)NUM_WORKERS=3# user/group to run asUSER=your_unix_userGROUP=your_unix_groupcd /path/to/test/hellosource ../bin/activatetest -d $LOGDIR || mkdir -p $LOGDIRexec ../bin/gunicorn_django -w $NUM_WORKERS --user=$USER --group=$GROUP --log-level=debug --log-file=$LOGFILE 2>>$LOGFILE

看起來很麻煩? 這里在舉一個(gè)實(shí)際中使用的腳本供參考

?

#!/bin/bash set -e LOGFILE=/var/log/blog.log # log路徑 LOGDIR=$(dirname $LOGFILE) NUM_WORKERS=1 #下面有解釋 # user/group to run as USER=root GROUP=root cd /home/www/blog/ #web的路徑 test -d $LOGDIR || mkdir -p $LOGDIR exec gunicorn -w $NUM_WORKERS -b 0.0.0.0:8000 lintcode.wsgi:application --user=$USER --group=$GROUP #8000是端口 可隨意修改

ps 1.這里要解釋下NUM_WORKERS參數(shù)的設(shè)置 gunicorn只需要啟用4–12個(gè)workers,就足以每秒鐘處理幾百甚至上千個(gè)請求了。 如果你的網(wǎng)站訪問量較大,

我推薦的合理的worker數(shù)量是:

(2 x $num_cores)

2.可能你要提升下腳本權(quán)限 like

?

chmod ug+x script.sh

?

這里有兩種選擇來維護(hù)上面的腳本持續(xù)運(yùn)行 一種是 利用 Supervisor

另一種是 Upstart

Upstart

Upstart是替換 /sbin/init 守護(hù)進(jìn)程 這是一個(gè)例子 新建/etc/init/hello.conf

?

description "Test Django instance"start on runlevel [2345]stop on runlevel [06]respawnrespawn limit 10 5exec /test/hello/script.sh#腳本路徑為/test/hello/script.sh

運(yùn)行下面指令 來試試吧

?

---ubuntu service hello {start,status,stop} #(as root). ---centos start Hello stop Hello

ps.(ubuntu)

如果上面指令沒效果 可能是鏈接沒做好 執(zhí)行下面的指令

sudo ln -s /lib/init/upstart-job /etc/init.d/hello

么么噠 django就這樣安全的部署好嘍

編輯于 2015-01-10

?贊同 22??2 條評論

?分享

?收藏?喜歡收起?

小松鼠

死磕Python http://www.chenxm.cc/

9 人贊同了該回答

自己也是沒有經(jīng)驗(yàn),根據(jù)網(wǎng)上的文章 折騰了好幾天時(shí)間,終于折騰出結(jié)果。你可以點(diǎn)擊下面網(wǎng)址看 也可以直接往下看,不過可能排版這么好

Liunx之Ubuntu下Django+gunicorn+nginx部署_Linux_陳新明

?

?

一、uWSGI

1. 安裝

pip install uwsgi

2. 測試uWSGI是否安裝成功

在終端中輸入以下命令查看uwsgi的版本號,如果輸出正常,說明uswgi已安裝成功

$ uwsgi --version 2.0.15

3. 編寫一個(gè)簡單的wsgi應(yīng)用測試uwsgi是否能正常使用

首先創(chuàng)建一個(gè)test.py文件(命令:vim test.py)

# test.py def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"] # python3#return ["Hello World"] # python2

4.運(yùn)行uwsgi:

uwsgi --http :8000 --wsgi-file test.py

參數(shù)解釋:

http :8000表示使用http協(xié)議,端口號為8000,

wigi-file則表示要運(yùn)行的wsgi應(yīng)用程序文件。

uwsgi運(yùn)行后打開瀏覽器,訪問http://127.0.0.1:8000/ ,或者是相應(yīng)服務(wù)器地址的8000端口,就可以看到hello world 頁面了。

運(yùn)行截圖:

?

?

如果想要運(yùn)行項(xiàng)目來測試

# uwsgi --http :8000 --chdir 項(xiàng)目路徑 -w 項(xiàng)目.wsg --static-map=/static=staticuwsgi --http :8000 --chdir /home/teacher/ -w teacher.wsgi --static-map=/static=static

uWSGI常用命令:

uwsgi --chdir=/path/to/your/project \--module=mysite.wsgi:application \--env DJANGO_SETTINGS_MODULE=mysite.settings \--master --pidfile=/tmp/project-master.pid \--socket=127.0.0.1:49152 \ # 可以ip地址,也可以是文件 --processes=5 \ # 進(jìn)程數(shù)量--uid=1000 --gid=2000 \ # 如果是root用戶,uwsgi可以有刪除權(quán)限--harakiri=20 \ # 一個(gè)請求超時(shí)時(shí)間--max-requests=5000 \ # 一個(gè)工作進(jìn)程最大請求數(shù)--vacuum \ # 退出時(shí)清楚環(huán)境--home=/path/to/virtual/env \ # virtualenv的路徑-- static # 做一個(gè)映射,指定靜態(tài)文件--http # 這個(gè)就和runserver一樣指定IP 端口--daemonize=/var/log/uwsgi/yourproject.log # 日志 

5. 創(chuàng)建uwsgi配置文件

在項(xiàng)目統(tǒng)計(jì)目錄下創(chuàng)建文件夾script,(比如項(xiàng)目目錄路徑/home/project_teacher/teacher,那么scrip文件存放在/home/project/teacher/script)

$ pwd /home/project_teacher$ mkdir script $ vim uwsgi.ini

配置信息如下:

[uwsgi] # 項(xiàng)目目錄 chdir=/opt/project_teacher/teacher/ # 指定項(xiàng)目的application module=teacher.wsgi:application # 進(jìn)程個(gè)數(shù) workers=5 pidfile=/opt/project_teacher/script/uwsgi.pid # 指定IP端口 http=192.168.31.123:8080 # 指定靜態(tài)文件 static-map=/static=/opt/test_project/teacher/static # 啟動uwsgi的用戶名和用戶組 uid=root gid=root # 啟用主進(jìn)程 master=true # 自動移除unix Socket和pid文件當(dāng)服務(wù)停止的時(shí)候 vacuum=true # 序列化接受的內(nèi)容,如果可能的話 thunder-lock=true # 啟用線程 enable-threads=true # 設(shè)置自中斷時(shí)間 harakiri=30 # 設(shè)置緩沖 post-buffering=4096 # 設(shè)置日志目錄 daemonize=/opt/project_teacher/script/uwsgi.log # 指定sock的文件路徑 socket=/opt/project_teacher/script/uwsgi.sock

6. 啟動配置

$ uwsgi --ini uwsgi.ini # 啟動uwsgi配置 [uwsgi-static] added mapping for /static => /home/trunk/static # 啟動成功$ uwsgi --stop uwsgi.pid # 關(guān)閉uwsgi signal_pidfile()/kill(): Operation not permitted [core/uwsgi.c line 1659]

?

二、Nginx

1. 安裝

$ sudo apt-get install nginx #安裝

2. 檢查nginx是否安裝成功

$ /etc/init.d/nginx start[ ok ] Starting nginx (via systemctl): nginx.service.

檢查nginx是否啟動成功

$ ps -ef |grep -i nginx root 6961 1 0 03:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; www-data 6962 6961 0 03:56 ? 00:00:00 nginx: worker process pala 6985 2090 0 03:57 pts/0 00:00:00 grep --color=auto -i nginx

然后打開瀏覽器,訪問ip地址,出現(xiàn)如下頁面即代表nginx安裝完成且可以正常啟動。

?

?

?

Nginx常用命令

$ /etc/init.d/nginx start #啟動 $ /etc/init.d/nginx stop #關(guān)閉 $ /etc/init.d/nginx restart #重啟

修改Nginx信息

nginx.conf文件

vim /etc/nginx/nginx.conf

三、Django + uWSGI +Nginx

1. 創(chuàng)建一個(gè)xxx.conf配置文件(nginx的默認(rèn)配置目錄為/etc/nginx/conf.d)

server { # 這個(gè)server標(biāo)識我要配置了listen 80; # 我要監(jiān)聽那個(gè)端口server_name 10.129.205.183 ; # 你訪問的路徑前面的url名稱access_log /var/log/nginx/access.log main; # Nginx日志配置charset utf-8; # Nginx編碼gzip on; # 啟用壓縮,這個(gè)的作用就是給用戶一個(gè)網(wǎng)頁,比如3M壓縮后1M這樣傳輸速度就會提高很多gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持壓縮的類型error_page 404 /404.html; # 錯(cuò)誤頁面error_page 500 502 503 504 /50x.html; # 錯(cuò)誤頁面# 指定項(xiàng)目路徑uwsgilocation / { # 這個(gè)location就和咱們Django的url(r'^admin/', admin.site.urls),include uwsgi_params; # 導(dǎo)入一個(gè)Nginx模塊他是用來和uWSGI進(jìn)行通訊的uwsgi_connect_timeout 30; # 設(shè)置連接uWSGI超時(shí)時(shí)間uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock; # 指定uwsgi的sock文件所有動態(tài)請求就會直接丟給他}# 指定靜態(tài)文件路徑location /static/ {alias /opt/project_teacher/teacher/static/;index index.html index.htm;}

2. 重啟nginx

$ /etc/init.d/nginx restart #重啟

編輯于 2017-10-13

?贊同 9??3 條評論

?分享

?收藏?喜歡收起?

廖子謙

26 人贊同了該回答

  • 創(chuàng)建一個(gè)django項(xiàng)目
    ? django-admin.py startproject hello 然后你的目錄是這樣的 hello/ ├── hello │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py
  • 配置uwsgi.ini,不清楚的配置自行搜索 [uwsgi] chdir=/home/liaoziqian/hello uid=nobody gid=nobody module=hello.wsgi:application socket=/home/liaoziqian/hello/uwsgi.sock master=true workers=5 pidfile=/home/liaoziqian/hello/uwsgi.pid vacuum=true thunder-lock=true enable-threads=true harakiri=30 post-buffering=4096 daemonize=/home/liaoziqian/hello/uwsgi.log
  • uwsgi相關(guān)命令 啟動uwsgi:uwsgi --ini uwsgi.ini 停止uwsgi:uwsgi --stop uwsgi.pid 重新加載配置:uwsgi --reload uwsgi.pid
  • nginx配置 server {listen 8080;location / {include uwsgi_params;uwsgi_connect_timeout 30;uwsgi_pass unix:/home/liaoziqian/hello/uwsgi.sock;} }
  • 啟動uwsgi,啟動nginx,一個(gè)簡單的nginx + uwsgi + django示例就完成了

  • 編輯于 2015-01-14

    ?贊同 26??6 條評論

    ?分享

    ?收藏?喜歡收起?

    優(yōu)酷App

    廣告?

    不感興趣知乎廣告介紹

    毫不夸張地說,今天優(yōu)酷視頻VIP這個(gè)活動,很有點(diǎn)“喪心病狂”!

    原價(jià)198的優(yōu)酷會員,現(xiàn)在只需要99元,低至8.25元/月,海量片庫隨意看,廣告再見,福利來!查看詳情

    kan tmac

    1 人贊同了該回答

    Python Web部署篇 -- 簡明現(xiàn)代魔法
    我看到的一個(gè)簡易的教程
    目前我們公司是是采用命令行啟動xml配置文件的方式啟動uwsgi服務(wù)

    發(fā)布于 2016-07-14

    ?贊同 1??添加評論

    ?分享

    ?收藏?喜歡

    知乎用戶

    6 人贊同了該回答

    我的系統(tǒng)是ubuntu server,nginx+uwsgi+django/flask都成功部署。

    建議使用virtualenv。

    我的部署方案可以做到各個(gè)項(xiàng)目獨(dú)立配置,互不影響(nginx,當(dāng)然是從部署上的)。

    以下是我寫的文檔:Ubuntu-Server-14.04-Nginx-uWSGI-Python-Django-Flask 雖然系統(tǒng)不一樣,但是除了配置文件path,其他區(qū)別不大。僅供參考。

    ?

    建議使用docker。。。

    編輯于 2017-07-12

    ?贊同 6??3 條評論

    ?分享

    ?收藏?喜歡

    人間各種胸器

    不會修電腦,再問弄死你信不信

    2 人贊同了該回答

    可以參考:

    Nginx + uwsgi + django + websocket(dwebsocket)環(huán)境部署

    發(fā)布于 2017-03-17

    ?贊同 2??添加評論

    ?分享

    ?收藏?喜歡

    路強(qiáng)

    航天遙感/python/私有云/美食/羽毛球愛好者/投資

    2 人贊同了該回答

    最簡單的方式,安裝docker,直接去docker hub上去下載一個(gè)別人配置好的鏡像,然后在本地以docker鏡像的方式啟動,一切都o(jì)k了。

    docker pull dockerfiles/django-uwsgi-nginx

    發(fā)布于 2015-03-19

    ?贊同 2??2 條評論

    ?分享

    ?收藏?喜歡

    liujt

    IT 大叔

    bitnami 的集成安裝包

    Install Django, Download Django

    或虛擬機(jī)鏡像

    ?

    https://bitnami.com/stack/django/virtual-machine

    編輯于 2018-02-27

    ?贊同??添加評論

    ?分享

    ?收藏?喜歡

    Coral

    看戲的

    1、升級Python以及安裝PIP
    使用腳本安裝和升級pip,會自動安裝setuptools ,前提是需要下載get-pip.py

    2、安裝Django、uwsgi
    pip install django==1.8.15
    pip install uwsgi

    3、安裝MySQL以及安裝mysql-python
    選擇免安裝版本
    pip install mysql-python

    Django同步數(shù)據(jù)庫模型(注意Django版本,syncdb為<Django==1.7)
    [root@db1 demosite]# python manage.py syncdb

    >Django==1.7
    [root@db1 demosite]# python manage.py makemigrations
    Migrations for 'west':
    0001_initial.py:
    - Create model Character
    [root@db1 demosite]# python manage.py migrate
    Operations to perform:
    Synchronize unmigrated apps: staticfiles, messages
    Apply all migrations: admin, west, contenttypes, auth, sessions
    Synchronizing apps without migrations:
    Creating tables...
    Running deferred SQL...
    Installing custom SQL...
    Running migrations:
    Rendering model states... DONE
    Applying contenttypes.0001_initial... OK
    Applying auth.0001_initial... OK
    Applying admin.0001_initial... OK
    Applying contenttypes.0002_remove_content_type_name... OK
    Applying auth.0002_alter_permission_name_max_length... OK
    Applying auth.0003_alter_user_email_max_length... OK
    Applying auth.0004_alter_user_username_opts... OK
    Applying auth.0005_alter_user_last_login_null... OK
    Applying auth.0006_require_contenttypes_0002... OK
    Applying sessions.0001_initial... OK
    Applying west.0001_initial... OK
    [root@db1 demosite]#

    4、安裝Nginx以及配置uwsgi
    uwsgi支持ini、xml等多種配置方式,下述以ini為例,在/etc目錄下創(chuàng)建uwsgi8090.ini,配置內(nèi)容如下
    [root@db1 ~]# cat /etc/uwsgi8090.ini
    [uwsgi]
    socket=127.0.0.1:8090
    master=true
    vhost=true
    no-size=true
    workers=2
    reload-mercy=10
    vacuum=true
    max-requests=1000
    limit-as=512
    buffer-size=30000
    pidfile=/var/run/uwsgi8090.pid
    daemonize=/website/uwsgi8090.log
    [root@db1 ~]#

    Nginx配置,默認(rèn)配置文件nginx.conf,修改并添加內(nèi)容如下
    location / {
    #root html;
    #index index.html index.htm;
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8090;
    uwsgi_param UWSGI_SCRIPT demosite.wsgi;
    uwsgi_param UWSGI_CHDIR /django/demosite;
    index index.html index.htm;
    client_max_body_size 35m;
    }
    location /static {
    #alias /django/demosite/static;
    alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/; #注意是alias,而非root
    }

    ?

    5、Django admin頁面缺少css樣式

    參考:解決Django Admin管理界面樣式表(CSS Style)丟失問題
    Nginx+Django Admin界面無樣式問題
    解決步驟:(網(wǎng)絡(luò)上說有兩種解決方式,我只是成功了一種)
    1、進(jìn)入Python找到django靜態(tài)文件的目錄
    [root@db1 demosite]# python
    Python 2.7.9 (default, Oct 9 2016, 23:39:53)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import django
    >>> django.__file__
    '/usr/local/lib/python2.7/site-packages/django/__init__.pyc'
    >>>

    2、找出django靜態(tài)文件的絕對路徑,并修改項(xiàng)目工程下的settings.py
    /usr/local/lib/python2.7/site-packages/django/contrib/admin/static

    在settings.py增加如下內(nèi)容
    STATIC_ROOT='/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/'

    3、修改nginx配置文件,重啟uwsgi以及nginx
    location /static {
    #alias /django/demosite/static;
    alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/;
    }

    root@db1 demosite]# /usr/local/nginx/sbin/nginx -s reload
    [root@db1 demosite]# uwsgi --reload /var/run/uwsgi8090.pid


    6、在服務(wù)器重啟過后,因?yàn)槭菍懭?etc/rc.local,Uwsgi以及Nginx進(jìn)程不正常,需要完善開機(jī)自啟動

    編輯于 2016-10-09

    ?贊同??添加評論

    ?分享

    ?收藏?喜歡收起?

    吳明志

    炒股大老板,秒入30億

    建議你換mez吧。。。一個(gè)fab就搞定了

    發(fā)布于 2015-11-19

    ?贊同??添加評論

    ?分享

    ?收藏?喜歡

    leehark

    我的方法是:nginx+apache(wsgi)+django+數(shù)據(jù)庫(mongodb,memcached,redis,pg等)

    發(fā)布于 2015-08-07

    ?贊同??添加評論

    ?分享

    ?收藏?喜歡

    Dreamcoin

    ?

    我的網(wǎng)站部署?www.gaoblog.cn

    我在我的網(wǎng)站上面寫了部署的具體流程。

    來源:https://www.zhihu.com/question/27295854?sort=created

    總結(jié)

    以上是生活随笔為你收集整理的如何配置nginx+uwsgi+django?(知乎上面的看着不错)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。