使用runserver可使咱們的django項目很便捷的在本地運行起來,但這隻能在局域網內訪問,若是在生產環境部署django,就要多考慮一些問題了。好比靜態文件處理,安全,效率等等,本篇文章總結概括了一下基於uwsgi+Nginx下django項目生產環境的部署html
默認ubuntu已經有了python3,可是pip沒有安裝。python
apt-get install -y python3-pip
pip3 install virtualenv
建立虛擬環境nginx
sudo mkdir /virtualenvs cd /virtualenvs sudo /usr/local/bin/virtualenv -p /usr/bin/python3 --no-site-packages venv
/virtualenvs/venv/bin/pip3 install django
root@ubuntu:~# mkdir /www root@ubuntu:~# cd /www/ root@ubuntu:/www# /virtualenvs/venv/bin/django-admin startproject mysite1 root@ubuntu:/www# cd mysite1/ root@ubuntu:/www/mysite1# /virtualenvs/venv/bin/python manage.py startapp blog root@ubuntu:/www/mysite1# mkdir static
編輯配置文件sql
root@ubuntu:/www/mysite1# vim mysite1/settings.py
容許監聽全部IP,注意:'*'必須用引號包起來django
ALLOWED_HOSTS = ['*']
原生啓動方式ubuntu
/virtualenvs/venv/bin/python manage.py runserver 0.0.0.0:8000
訪問頁面vim
效果以下:服務器
/virtualenvs/venv/bin/pip3 install uwsgi
先關閉上面啓動的Django項目,使用Ctrl+c,就能夠取消。網絡
第一步:進入django項目
cd /www/mysite1/
第二步:命令測試啓動
/virtualenvs/venv/bin/uwsgi --http 0.0.0.0:8000 --file mysite1/wsgi.py --static-map=/static=static
參數說明:
--http 這個就和runserver同樣指定IP 端口
--file 這個文件就裏有一個反射,若是你在調用他的時候沒有指定Web Server就使用默認的
注意:mysite1是一個相對路徑。--file它的絕對路徑是/www/mysite1/mysite1/wsgi.py
--static 作一個映射,指定靜態文件。
此時,訪問http://192.168.10.104:8000/
若是訪問正常,表示項目啓動成功
使用Ctrl+c,取消uwsgi啓動。
第一步:在django項目同級目錄建立uwsgi目錄,用於存放相關文件
cd /www/mysite1 mkdir uwsgi
項目結構以下:
mysite1/
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── mysite1
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── uwsgi
└── static
第二步:進入script目錄,建立一個uwsgi.ini文件
cd /www/mysite1/uwsgi
vim uwsgi.ini
編輯uwsgi.ini文件內容以下:
[uwsgi] # Django-related settings # the base directory (full path) chdir = /www/mysite1 # Django's wsgi file module = mysite1.wsgi # the virtualenv (full path) home = /virtualenvs/venv # process-related settings # master master = true # maximum number of worker processes processes = 1 # pid file pidfile = /www/mysite1/uwsgi/uwsgi.pid # The address and port of the monitor http = :8000 # clear environment on exit vacuum = true #The process runs in the background and types the log to the specified log file daemonize = /www/mysite1/uwsgi/uwsgi.log
注意幾個很重要的參數
chdir 項目目錄,寫絕對路徑
module Django的 wsgi 文件,表示mysite1/wsgi.py
home 虛擬環境目錄,寫絕對路徑
daemonize 進程在後臺運行,並將日誌打到指定的日誌文件
root@ubuntu:~# cd /www/mysite1/ root@ubuntu:/www/mysite1# /virtualenvs/venv/bin/uwsgi --ini uwsgi/uwsgi.ini [uWSGI] getting INI configuration from uwsgi/uwsgi.ini
查看文件
root@ubuntu:/www/mysite1# ll uwsgi/ 總用量 20 drwxr-xr-x 2 root root 4096 8月 10 11:47 ./ drwxr-xr-x 6 root root 4096 8月 10 11:27 ../ -rw-r--r-- 1 root root 717 8月 10 11:41 uwsgi.ini -rw-r----- 1 root root 2021 8月 10 11:47 uwsgi.log -rw-rw-rw- 1 root root 6 8月 10 11:47 uwsgi.pid
刷新頁面,查看訪問是否正常。
uwsgi 經常使用的啓動命令
uwsgi --ini uwsgi.ini # 啓動 uwsgi --reload uwsgi.pid # 重啓 uwsgi --stop uwsgi.pid # 關閉
apt-get install -y nginx
cd /etc/nginx/sites-enabled
vim mysite1.conf
內容以下:
server { listen 8000; server_name localhost; # 指定項目路徑uwsgi location / { include uwsgi_params; # 導入一個Nginx模塊他是用來和uWSGI進行通信的 uwsgi_connect_timeout 30; # 設置鏈接uWSGI超時時間 uwsgi_pass unix:/www/mysite1/uwsgi/mysite1.sock; # 指定uwsgi的sock文件全部動態請求就會直接丟給他 } # 指定靜態文件路徑 location /static/ { alias /www/mysite1/static/; } }
改成socket方式
cd /www/mysite1/uwsgi
vim uwsgi.ini
內容以下:
[uwsgi] # Django-related settings # the base directory (full path) chdir = /www/mysite1 # Django's wsgi file module = mysite1.wsgi # the virtualenv (full path) home = /virtualenvs/venv # process-related settings # master master = true # maximum number of worker processes processes = 1 # pid file pidfile = /www/mysite1/uwsgi/uwsgi.pid # socket file path (full path) socket = /www/mysite1/uwsgi/mysite1.sock # clear environment on exit vacuum = true #The process runs in the background and types the log to the specified log file daemonize = /www/mysite1/uwsgi/uwsgi.log
從新加載uwsgi
/virtualenvs/venv/bin/uwsgi --reload uwsgi.pid
加載nginx配置文件
nginx -s reload
查看端口,8000已經爲nginx接管了
root@ubuntu:/etc/nginx/sites-enabled# netstat -anpt|grep 8000 tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 18895/nginx -g daem tcp 0 0 192.168.10.102:8000 192.168.10.105:52556 ESTABLISHED 19135/nginx: worker tcp 0 0 192.168.10.102:8000 192.168.10.105:52557 ESTABLISHED 19135/nginx: worker
刷新頁面,效果同上!
進入目錄 /www/mysite1/static ,放一張圖片 girl.jpg
訪問圖片
http://192.168.10.102:8000/static/girl.jpg
效果以下:
本文參考連接: