Diango + uwsgi + nginx 項目部署(可外網訪問)

本身經過nginx uwsgi 部署django項目,查詢了不少資料,遇到了不少問題,最終完成了部署,趁着心情愉悅,寫個隨筆,爲曾像我同樣苦尋解決方案的小夥伴們提供些思路。html

安裝Nginx:python

 1 #安裝nginx
 2 sudo apt-get install nginx
 3 
 4 #一些有用的命令
 5 #啓動nginx
 6 sudo /etc/init.d/nginx start 
 7 #重啓nginx
 8sudo /etc/init.d/nginx restart
 9 #中止nginx
10 sudo /etc/init.d/nginx stop
11 
12 #很暴力的方法,我喜歡
13 sudo killall nginx

安裝uwsgi:nginx

1 pip install uwsgi
2 
3 #注意uwsgi須要在虛擬環境中運行

配置uwsgi:django

#在項目目錄中創建個conf文件夾,將nginx和uwsgi文件都放進去,不是必須#可是個好習慣

#my_uwsgi.ini
ite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /to/your/project/#這個是項目的路徑
# Django's wsgi file
module          = project.wsgi#這個project要換成本身的項目名,也就是uwsgi.py所在的文件夾名
# the virtualenv (full path)
home            = /home/ubuntu/.virtualenvs/虛擬環境名#這個就是虛擬環境的路徑

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8080#這個用來和Nginx對接,端口號能夠改,本人項目將uwsgi做爲本地服務,外網不能直接訪問,用nginx做爲代理,因此用本地的地址。
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
~                          

配置nginxubuntu

 1 #如下內容在mysite_nginx.conf中,這個文件名也能夠隨意起
 2 # mysite_nginx.conf
 3 
 4 # the upstream component nginx needs to connect to
 5 upstream django {
 6     # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
 7     server 127.0.0.1:8080; #這個是用來跟uwsgi對接的,要和my_uwsgi.ini中寫一致
 8 }
 9 
10 # configuration of the server
11 server {
12     # the port your site will be served on
13     listen      8000;#這個端口是nginx用來監聽uwsgi的,默認的是80,總之項目是經過下面的server_name:8000來訪問的
14     # the domain name it will serve for
15     server_name xxx.xxx.xx.xx ; #這個ip就是服務器的ip
16     charset     utf-8;
17 
18     # max upload size
19     client_max_body_size 75M;   # adjust to taste
20 
21     # Django media
22     location /media  {
23         alias /your/project/media;  #這個目錄是項目的meda目錄
24     }
25    location /static {
26         alias /your/project/static; # 這個目錄是項目的static目錄
27     }
28 
29     # Finally, send all non-media requests to the Django server.
30     location / {
31         uwsgi_pass  django;#這個是對接uwsgi的
32         include     uwsgi_params; # 這個參數按我這樣寫nginx就能找到的
33     }
34 }
35   

將nginx配置文件連接到啓動配置目錄:服務器

#注意修改下面的路徑及文件名,哈哈不要只複製粘貼啊
sudo
ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/
修改django項目中的setting.py文件,添加
#要將STATICFILES_DIRS =[os.path.join(BASE_DIR, 'static')]註釋掉,Debug在生產模式也要改爲False

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

將靜態文件打包,讓nginx代理:app

python manage.py collectstatic

啓動nginx,uwsgidom

 sudo /etc/init.d/nginx restart
#進入conf文件夾,或者說配置的uwsgi.ini文件所在目錄
#uwsgi.ini改爲本身的名字
uwsgi -i uwsgi.ini

訪問:socket

ip:port(端口爲nginx.conf中配置的)學習

總結:

寫到這也差很少了,項目能夠跑起來了,nginx,uwsgi高級配置還在學習中,但願本文對你有所幫助,謝謝。

最後再提醒下,網上有不少配置文件的模板,將我寫註釋的地方對比修改下,別遺漏。

 

參考文檔:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

     http://uwsgi-docs.readthedocs.io/en/latest/Nginx.html

相關文章
相關標籤/搜索