在python下載源碼包:css
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz # 解壓 tar -zxf Python-3.6.5.tgz cd Python-3.6.5 #編譯 ./configure --prefix=/appliocation/python3 --enable-optimizations make && make install # 配置環境變量 vim ~/.bash_prefile # 在這一行增長python的bin路徑,以下 export PATH=$HOME/bin:/usr/local/python3/bin:/usr/local/bin:$PATH source ~/.bash_profile
pip3 isntall django==1.11.8 # 建立django項目 django-admin startproject hello_django cd hello_django #建立應用 python3 manager.py startapp app01 #建立uwsgi配置文件 vim hello_django.ini #輸入這些內容 # myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8080 #真實服務的端口 # Django項目根目錄 (絕對路徑) chdir = /root/hello_django # wsgi.py文件在項目中的位置 module = hello_django.wsgi # process-related settings # master master = true # 運行的進程數 processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
啓動uwsgihtml
# 安裝基礎開發包 yum groupinstall "Development tools" yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel # 安裝uwsgi pip install uwsgi uwsgi --version # 查看 uwsgi 版本 uwsgi hello_django/hello_django.ini 在seething.py修改才能夠訪問,默認只是localhost,以下 ALLOWED_HOSTS = ['192.168.0.75', '127.0.0.1', 'localhost']
cd ~ wget http://nginx.org/download/nginx-1.5.6.tar.gz tar xf nginx-1.5.6.tar.gz cd nginx-1.5.6 ./configure --prefix=/usr/local/nginx-1.5.6 \ --with-http_stub_status_module \ --with-http_gzip_static_module make && make install
找到nginx.conf,寫入以下內容python
server { #這裏是訪問時用到的端口 listen 80; server_name localhost; charset UTF-8; client_max_body_size 75M; location / { include uwsgi_params; #同uwsgi內容 uwsgi_pass 127.0.0.1:8080; #連接超時時間 uwsgi_read_timeout 30; } }
如此一來,重啓你的nginx,訪問80端口,就能看到效果了。nginx
你可能發現了,你網頁上的靜態資源沒法訪問!!好比說admin頁面,會特別簡陋,這是由於nginx+uwsgi+Django時,Django對靜態資源的處理nginx不能代理(可能吧)。總之這種事不應讓Django作,由於nginx在處理靜態資源上能力更強,對於靜態資源,就讓nginx處理吧。
一般來講,你會有兩種靜態資源/media/
開頭的連接和/static/
開頭的。static用來處理一些網站原始圖片,視頻,js,css文件,Django是本身就支持這種連接的。那麼如何關閉讓Django處理/static/
開頭的文件呢,很簡單,在setting.py
中將DEBUG
值改成False
,這時,Django就不去處理/static/
文件了。
那麼/media/
呢?通常來講,用戶上傳的圖片,咱們會保存起來,在網頁上顯示時候就用/media/
,在setting.py
中設置web
MEDIA_URL = '/media/' #訪問的前綴連接 MEDIA_ROOT = os.path.join(BASE_DIR, '../media') #存放文件的具體位置
再在url.py
中添加sql
from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
這裏的意思是在DEBUG=True時,會解析/media/
文件,文件存放的位置是第二個參數。
如此一來立即在部署爲生產環境時,只須要吧DEBUG改成False,Django就不會去處理static
和media
了。django
Django有一個工具能夠將應用裏用到的全部靜態文件收集起來,方便nginx解析。具體:
在setting.py
中設置STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic')
這樣收集的靜態文件就都放進上面的目錄裏了。如何運行這個工具?python3 manager.py collectstatic
vim
一樣,nginx.conf
首先,在文件頂部加入 user root
聲明讓root用戶跑nginx,不然訪問靜態文件可能提示沒有權限
其次,在上面說的配置文件location /
前加入如下帶內容bash
location /static/ { autoindex on; alias /root/SchoolBuyWeb/collectedstatic/; } location /media/ { autoindex on; alias /root/SchoolBuyWeb/media/; }
注意alias
後對應好本身設定的目錄便可!
重啓nginx,如今已經ok了~~服務器
There are several ways to make uWSGI gracefully restart.
有幾種方法完美重啓uWSGI。
# using kill to send the signal
#使用kill發送信號
kill -HUP `cat /tmp/project-master.pid` (好用)
# or the convenience option --reload
#或者使用簡單選項 --reload
uwsgi --reload /tmp/project-master.pid
# or if uwsgi was started with touch-reload=/tmp/somefile
#或者,若是uwsgi是使用touch-reload=/tmp/somefile啓動
touch /tmp/somefile
Or from your application, in python:
或者在Python程序裏:
uwsgi.reload()
注意,若是要使用pid,須要在uwsgi啓動參數中指定 --pidfile,如:
#/etc/rc.local 修改自啓動
/usr/local/bin/uwsgi /var/www/html/mz_uwsgi.ini --pidfile /tmp/uwsgi.pid
或者須要在mz_uwsgi.ini配置
pidfile=/tmp/mz_uwsgi.pid
sudo killall -9 uwsgi 這個命令也能夠編輯殺死進程
比reboot服務器方便。
還有問題能夠參考 http://www.runoob.com/django/django-nginx-uwsgi.html