1. 在本地能夠運行的django項目html
2. 一臺雲服務器,這裏選用Centos系統python
首先在本地導出項目須要的第三方庫:在根目錄(或虛擬環境中) 命令行使用 nginx
pip freeze >requirements.txt
web
利用ssh鏈接你的服務器 我這裏用的是Xshellshell
下載安裝以前須要確認服務器上已經安裝了:GNU編譯器套件、zlib依賴包(python3.7以上版本須要)django
具體安裝命令以下(路徑任意):vim
yum install gcc
安裝GNU編譯器套件瀏覽器
yum install -y zlib zlib-devel
安裝zlib依賴包bash
cd /tmp/
進入tmp文件夾(在這裏只是存儲臨時文件)服務器
在官網下載安裝所需的Python3(服務器通常自帶Python2)
wget www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
進行解壓 tar -xzvf Python-3.7.0.tgz
進入解壓出來的Python-3.7.0文件夾 cd Python-3.7.0/
安裝到/usr/local/python3目錄下 ./configure --prefix=/usr/local/python3
編譯安裝 make && make install
使用軟連接便於在任意目錄使用python3和pip3
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
到這裏能夠在終端輸入 python3
測試python3是否安裝成功
在requirement.txt所在路徑下安裝所需模塊 pip3 install -r requirement.txt
可使用 pip3 list
查看相應模塊是否安裝
pip3 install uwsgi
建立一個test.py測試文件(路徑任意) vim test.py
鍵盤按i進入編輯模式,輸入如下內容
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
運行uwsgi: uwsgi --http :8000 --wsgi-file test.py
解釋: --http :8000 使用http協議 端口8000 --wsgi-file test.py 加載指定文件
在本地瀏覽器進行訪問 輸入服務器ip地址或域名(已進行域名解析)+:8000 例如 *.*.*.*:8000 或 *.com:8000
若是沒問題。你將在瀏覽器中看到 Hello World,這證實 web客戶端--uwsgi--python 的鏈接是正常的
進入的項目文件夾(與manage.py同一級) 我把項目文件放在了 /home/ 項目名字爲mysite
因此 cd /home/mysite
鍵入 python3 manage.py runserver 0.0.0.0:8000
若是發現django模塊不能導入,則是由於沒有添加環境變量,具體命令以下:
vim ~/.bash_profile
添加django的路徑
export PATH=$HOME 在此部分添加,用冒號隔開,具體格式請搜索 $PATH
若是在本地瀏覽器鍵入ip地址(*.*.*.*:8000)或域名(*.com:8000)不能訪問,須要更改django項目的settings.py設置
vim /home/mysite/mysite/settings.py
進入編輯模式 把 ALLOWED_HOSTS = []
改成 ALLOWED_HOSTS = ['*']
返回manage.py所在文件夾 鍵入 python3 manage.py runserver 0.0.0.0:8000
打開本地瀏覽器進行訪問,確保你的項目能夠工做。
在終端輸入 uwsgi --http :8000 --module mysite.wsgi
用本地瀏覽器進行訪問,若是訪問正常,證實 web客戶端-uwsgi-django 的鏈接是正常的
下載 wget http://nginx.org/download/nginx-1.14.1.tar.gz
解壓 tar -xzvf nginx-1.14.1.tar.gz
進入解壓所得文件夾
cd nginx-1.14.1/
配置 ./configure
編譯安裝 make && make install
啓動nginx,/usr/local/nginx/sbin/./nginx
若是出現 welcome to nginx! 則證實安裝成功
將/usr/local/nginx/conf目錄下的uwsgi_params文件複製到你的項目目錄
cp /usr/local/nginx/conf/uwsgi_params /home/mysite/
建立mysettings文件夾 mkdir /home/mysettings
建立一個名爲mysite_nginx.conf的文件(能夠在任意路徑,只要你能找到,這裏我把它放在 /home/mysettings/)
vim /home/mysettings/mysite_nginx.conf
具體配置以下:
upstream django { # server unix:///path/to/your/mysite/mysite.sock; # for a file socket server 127.0.0.1:8001; # for a web port socket (we'll use this first) } # configuration of the server server { # 你的網站監聽的端口,此處先用8000端口測試,正式部署能夠改成80 listen 8000; # 你的網站的域名 server_name *.com; # substitute your machine's IP address or FQDN charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # Django media location /media { alias /home/mysite/media; # 你的media的文件目錄 } location /static { alias /home/mysite/collected_static; # 你的項目收集的靜態文件目錄(後邊會將收集靜態文件) } # Finally, send all non-media requests to the Django server. location / { uwsgi_pass django; include /home/mysite/uwsgi_params; # uwsgi_params 文件所在目錄 } }
這個配置文件告訴nginx提供來自文件系統的媒體和靜態文件,以及處理那些須要Django干預的請求。對於一個大型部署,讓一臺服務器處理靜態/媒體文件,讓另外一臺處理Django應用,被認爲是一種很好的作法,如今這樣就行了。
如今,讓nginx的根文件載入你的mysite_nginx.conf配置的信息
vim /usr/local/nginx/conf/nginx.conf
加入 include /home/mysettings/*.conf;
如今基本配置已經ok
在運行nginx以前,你必須收集全部的Django靜態文件到靜態文件夾裏
編輯項目的settings vim /home/mysite/mysite/settings.py
添加 STATIC_ROOT = os.path.join(BASE_DIR, "collected_static/")
而後運行 python3 manage.py collectstatic
重啓nginx /usr/local/nginx/sbin/./nginx -s reload
要檢查是否正確的提供了媒體文件服務,上傳一張圖片(這裏我上傳的文件爲 1.jpg)到 /home/sysite/media文件夾中
而後訪問http://example.com:8000/media/1.jpg - 若是這能正常工做,那麼至少你知道nginx正在正確的提供文件服務。
最好將你的nginx先中止, 再開啓,而不是重載。
到剛纔test.py的文件夾 uwsgi --socket :8001 --wsgi-file test.py
這幾乎與以前相同,除了此次有一個選項不一樣:socket :8001 使用uwsgi協議,端口爲8001
同時,已經配置了的nginx在8000端口與uWSGI通訊,而對外使用8000端口,訪問:
在本地瀏覽器 *.*.*.*:8000 *.com:8000
若是正常顯示內容,則說明 web客戶端--web服務器--the socket--uwsgi--python的鏈接是正常的
(此部分我部署時出現問題,因此我跳過這部分的說明,具體能夠看官方文檔)
進入項目文件夾後運行 uwsgi --socket :8001 --module mysite.wsgi
這時候應該能完整地看到你的網站
咱們能夠將用在uWSGI上的相同的選項放到一個文件中,而後告訴 uWSGI使用該文件運行。這使得管理配置更容易。
建立一個名爲mysite_uwsgi.ini的文件:
[uwsgi] # Django-related settings # the base directory (full path) chdir = /home/mysite # Django's wsgi file module = mysite.wsgi:application # the virtualenv (full path) home = /path/to/virtualenv #到你虛擬環境的路徑,沒有虛擬環境能夠註釋掉 # 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:8001 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true
而後使用這個文件運行uswgi:
uwsgi -d --ini mysite_uwsgi.ini
參數 -d 爲後臺運行。
此時你的django項目已經部署成功。Congratulations!