一文教會你用nginx+uwsgi部署自己的django項目
第一步:換源
輸入命令換掉Ubuntu的下載源
sudo nano /etc/apt/sources.list
將以下全部替換掉原文件,我這裡用的是阿裡的源,你也可以換其他的。
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic universe deb http://mirrors.aliyun.com/ubuntu/ bionic-updates universe deb http://mirrors.aliyun.com/ubuntu/ bionic multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted deb http://mirrors.aliyun.com/ubuntu/ bionic-security universe deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic stable
分別輸入以下命令,更新源 sudo apt update sudo apt upgrade
第二步:安裝相關包
1.安裝python3
# 安裝python3 sudo apt install python3 # 查看python安裝路徑: which python # 查看python版本:建議使用3.6之後的版本,因為其他的筆者沒試過,筆者用的是3.6.9版本 python
2.安裝openssh-server和net-tools
# 安裝 openssh-server sudo apt install openssh-server #開啟: sudo service ssh start # 安裝net-tools sudo apt install net-tools # 查看虛擬機ip: ifconfig
如下圖所示,就是我們的虛擬機IP
安裝django的運行環境
#安裝django運行環境: sudo apt install virtualenv # 創建環境 virtualenv --python=/usr/bin/python3 myblog # 進入環境: cd myblog # 激活環境: source bin/activate
安裝django:pip3 install Django
創建項目:django-admin.py startproject blog
激活並且創建好項目之後就基本和下圖所示差不多瞭
# 進入到blog中安裝 uwsgi: pip3 install uwsgi
第三步:寫入測試文件並測試運行
1.寫入測試文件
安裝好之後我們再寫一個測試文件,用來測試我們項目的運行方式,實際項目也是一樣的。這裡我用的是nano編輯寫入方式,你也可以使用vim,方式不限,能創建寫入即可寫入命令為:
sudo nano test.py
需要寫入的文件內容為:
def application(env,start_response): start_response('200 ok',[('Content-Type','text/html')]) return [b"Hello World"]
2.測試運行
測試命令為:uwsgi --http :8000 --wsgi-file test.py
回車之後,我們在瀏覽器輸入ip加port端口號,我的是192.168.217.133:8000。在瀏覽器打開發現報瞭以下錯誤。
對於這個錯誤,我們隻需要打開項目文件的settings.py文件,在ALLOWED_HOSTS裡面添加自己虛擬機的地址,就ok瞭,然後我們再測試運行,發現正常,網頁輸出hello world。這裡說明uwsgi能夠正常運行測試文件。
但是我們並不是為瞭運行test.py文件,我們是為瞭運行自己的django項目,這裡我們需要對上一個命令進行修改,改為:uwsgi –http :8000 –module blog.wsgi
第四步:引入nginx
1、安裝啟動nginx
為瞭避免在輸入ip時,不輸入端口號也能正常使用,我們引入輕量級的nginx,這裡我們用命令行安裝並且啟動nginx
安裝:sudo apt install nginx
啟動:sudo service nginx start
2、寫入conf配置文件
輸入命令:sudo nano /etc/nginx/sites-available/blog_nginx.conf
新建一個conf文件,並且寫入以下內容,將裡面涉及路徑的地方全部改為你自己項目的路徑:
upstream django { # server unix:///home/python/myblog/blog/blog.sock; # 這裡的路徑改為你自己項目路徑 server 127.0.0.1:8001; # for a web port socket (we'll use this first) } server { listen 8000; server_name 192.168.217.133; # 將這裡的ip地址改為你自己的虛擬機或者服務器地址 charset utf-8; client_max_body_size 75M; # adjust to taste location /media { alias /home/python/myblog/blog/media; # your Django project's media files - amend as required } location /static { alias /home/python/myblog/blog/static; # your Django project's static files - amend as required } location / { uwsgi_pass django; include /home/python/myblog/blog/uwsgi_params; # the uwsgi_params file you installed } }
創建好文件之後,我們需要對該文件創建一個軟鏈接,需要輸入以下命令:
sudo ln -s /etc/nginx/sites-available/blog_nginx.conf /etc/nginx/sites-enabled
完成之後我們可以通過ll /etc/nginx/sites-enabled/這個命令來查看一下,是否設置正確,參考下圖
3、創建uwsgi_params文件和靜態文件夾配置
1)、uwsgi_params
這裡我們需要創建一個uwsgi_params文件,創建命令為:sudo nano uwsgi_params
並且將下面內容一字不差的寫入到uwsgi_params文件中保存並退出
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;
文件保存之後重啟一下nginx即可
2)、創建靜態文件夾
打開django項目的settings.py文件,添加靜態文件的路徑,如下圖:
然後保存退出並復制映射靜態文件,命令為:python manage.py collectstatic
創建media文件夾:mkdir media
最後輸入命令查看靜態文件夾是否配置正確:
第五步:建立uwsgi和nginx的管道通信
在uwsgi 中將http通信改為socket通信,修改命令為:uwsgi –socket :8001 –wsgi-file test.py
此時進入阻塞,在瀏覽器中輸入IP地址:192.168.217.133:8000,發現可以打開,顯示hello world成功。說明uesgi和nginx通信正常
進入nginx配置文件中:sudo nano /etc/nginx/sites-available/blog_nginx.conf
將文件中下面兩行中的第二行註釋掉,開啟第一行,但是路徑一定要正確,改使用管道通信
server unix:///home/python/myblog/blog.sock; # for a file socket
# server 127.0.0.1:8001; # for a web port socket (we'll use this first)
保存退出,重啟nginx:sudo service nginx restart
將uwsgi參數套節字改為blog.sock
uwsgi –socket blog.sock –wsgi-file test.py
回到瀏覽器輸入:192.168.217.133:8000得到502:如圖
我們查看一下錯誤日志,發現是因為權限問題,解決辦法,在命令行後面加入–chmod=666
uwsgi –socket blog.sock –wsgi-file test.py –chmod=666
運行之後發現沒有問題,並且正常顯示Hello World界面。
現在我們運行django項目,命令為:uwsgi --socket blog.sock --module blog.wsgi --chmod=666
刷新192.168.217.133:8000得到django的基礎頁面。
目前可以說明nginx和uwsgi管道通信正常。
第六步:將項目改為後臺運行
創建一個uwsgi的配置文件:sudo nano blog_uwsgi.ini
寫入一下內容,將其中的路徑改為自己的項目路徑
# mysite_uwsgi.ini file [uwsgi] # Django-related settings # the base directory (full path) chdir = /home/python/myblog/blog # Django's wsgi file module = blog.wsgi # the virtualenv (full path) home = /home/python/myblog # process-related settings # master master = true # maximum number of worker processes processes = 10 # the socket (use the full path to be safe socket = /home/python/myblog/blog/mysite.sock # ... with appropriate permissions - may be needed chmod-socket = 664 # clear environment on exit vacuum = true # daemonize uwsgi and write messages into given log daemonize = /home/python/myblog/blog/uwsgi.log
保存退出並且啟動配置文件,命令為:uwsgi --ini blog_uwsgi.ini
我們可以查看一下後臺進程,是否正常啟動,輸入:ps aux
最後回到nginx配置文件中,將監聽端口改為80,重啟nginx即可。在瀏覽器中輸192.168.217.133得到django頁面結果,表示項目運行正常。
總結
到此這篇關於用nginx+uwsgi部署自己的django項目的文章就介紹到這瞭,更多相關nginx+uwsgi部署django項目內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- centos+nginx+uwsgi部署django項目上線
- uwsgi+nginx代理Django無法訪問靜態資源的解決
- 淺談Python項目的服務器部署
- Centos環境部署django項目的全過程(永久復用)
- Python安裝和配置uWSGI的詳細過程