以前搭建過 Apache下的Django項目,存在的問題是admin讀寫數據庫無權限,一直沒解決?有了解的指導一下!!html
今天測試了一下nginx下的django安裝python
總的說來是比Apache下的配置簡單,是真簡單(Apache下的我忙活了一個星期,可是仍是有個尾巴沒搞定。這個一個下午,幾乎參考了蟲師的就能配置起來)linux
(個人用的阿里雲,直接root安裝的,因此沒有sudo)nginx
首先 安裝nginx:web
apt-get install nginx數據庫
..................django
遇到個問題,是沒有安裝成功,源找不到,因而 apt-get update後便可ubuntu
修改Nginx默認端口號,打開/etc/nginx/nginx.conf 文件(此爲主配置文件),修改/etc/nginx/sites-enabled/default 裏的端口號(原來默認80,若是沒有被佔用也不要緊)c#
並且 default -> /etc/nginx/sites-available/default (是個連接,因此若是想要本身建立個配置文件,就連接一下)
如下是我修改的default內容,把80改成8080瀏覽器
server {
listen 8080 default_server;
listen [::]:8080 default_server;
}
而後啓動nginx後訪問 ip:8080,就能訪問nginx歡迎頁面了。
第二步 安裝uwsgi
經過pip安裝uwsgi。
root@ubuntu:/etc# python -m pip install uwsgi #若是是py3,用 python3 。。。。。。。。。
編寫個測試腳本
# cat test.py def application(environ, start_response): status = '200 OK' output = 'Hello World! powerde by wsgi' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output]
運行
uwsgi --http :8001 --wsgi-file test.py
而後瀏覽器訪問 http://127.0.0.1:8001
就能夠訪問這個測試頁 顯示 Hello World! powerde by wsgi
測試訪問你的項目wsgi.py
uwsgi --http :8001 --chdir /app/mysit/ --wsgi-file mysit/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
此處蟲師的寫法有問題,chdir 爲project目錄 --wsgi-file 對應project下的同名目錄,再下面是wsgi.py,不然系統沒法import,以下
*** Operational MODE: single process *** failed to open python file mysit/wsgi.py unable to load app 0 (mountpoint='') (callable not found or import error) *** no app loaded. going in full dynamic mode *** *** uWSGI is running in multiple interpreter mode ***
經常使用選項:(照搬的)
經常使用選項: http : 協議類型和端口號 processes : 開啓的進程數量 workers : 開啓的進程數量,等同於processes(官網的說法是spawn the specified number ofworkers / processes) chdir : 指定運行目錄(chdir to specified directory before apps loading) wsgi-file : 載入wsgi-file(load .wsgi file) stats : 在指定的地址上,開啓狀態服務(enable the stats server on the specified address) threads : 運行線程。因爲GIL的存在,我以爲這個真心沒啥用。(run each worker in prethreaded mode with the specified number of threads) master : 容許主進程存在(enable master process) daemonize : 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器(daemonize uWSGI)。實際上最經常使用的,仍是把運行記錄輸出到一個本地文件上。(確定要啓用,要不刷屏!!) pidfile : 指定pid文件的位置,記錄主進程的pid號。 (生成pid文件,以便stop uwsgi) vacuum : 當服務器退出的時候自動清理環境,刪除unix socket文件和pid文件(try to remove all of the generated file/sockets)
第三步 配置Django
在django項目project目錄下(manage.py下)建立配置文件分兩種 ini 與xml
ini格式
# myweb_uwsgi.ini file [uwsgi] # Django-related settings socket = :8081
# the base directory (project full path) chdir = /app/mysit # Django s wsgi file module = mysit.wsgi # process-related settings # master master = true # maximum number of worker processes processes = 4 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true # pidfile for record run pid pidfile =pid.uwsgi # run process background and save log to daemonize daemonize = UWSGI.log
使用命令 uwsgi --ini myweb myweb_uwsgi.ini ###在目錄下會生成pid及log文件
xml格式(搬的)(再加入pid)
#mytest_scoket.xml
<uwsgi> <socket>127.0.0.1:8099</socket> <chdir>/app/test_project</chdir> <module>test_project.wsgi</module> <processes>4</processes> <daemonize>uwsgi.log</daemonize> </uwsgi>
執行:uwsgi -x mytest_scoket.xml
以上格式2選1。
配置nginx配置文件,我仍是修改的default文件!!! 以下
server { listen 8080; server_name www.wenxi.xin #這個是什麼都無所謂,只是一個名稱標記,蟲師說他的要寫成ip,這個應該不用,由於這個就至關於server ID,寫入log charset UTF-8; client_max_body_size 75M; location / { include uwsgi_params; #加載uwsgi uwsgi_pass 127.0.0.1:8081; #是uwsgi 啓動的socket端口, 即 myweb_uwsgi.ini 中的socket,應該也能夠生成個socket文件,而後訪問這個文件! uwsgi_read_timeout 5; # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. #try_files $uri $uri/ =404; #這個要屏蔽,要不會報502錯誤,此uri是什麼,還沒找到 } location /static { #指定靜態文件的別名,這個和Apache差很少 expires 30d; autoindex on; add_header Cache-Control private; alias /app/mysit/static/; } #若是有media,再加一項別名就洗 # location /media/ { # alias /home/yixiang/Practice/Python/nginx_django/test_project/media/; # } }
配置完成後重啓服務,步驟包括
進入 myweb_uwsgi.ini 目錄
執行 uwsgi --ini myweb_uwsgi.ini
而後 service nginx restart 或者 start
而後訪問你的nginx對外服務的ip:8080 就到了你看到了你的django項目了!!!
原理,uwsgi 提供django 服務, nginx訪問uwsgi提供的服務,並將靜態文件路徑轉換,提供給客戶端,
固然了,這也是很淺顯的東西,uwsgi官方文檔很全面,若是精學須要看看
參考文檔:
官方文檔 http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html#
參考了蟲師http://www.cnblogs.com/fnng/p/5268633.html
http://www.linuxidc.com/Linux/2016-07/133490.htm
歡迎訪問個人django(nginx)項目:http://60.205.221.253:8080/
----django(Apache)項目:http://60.205.221.253