在部署項目前,你已有一個可以在你本機測試過,能正常啓動的Django項目(畢竟本文主要講解部署Django項目),以及掌握了Linux系統的一些基本命令。html
相關連接:node
Centos7安裝python3和pippython
virtualenv(虛擬環境)github
WSGI:(Web Server Gateway Interface)服務器網關接口,是一種協議。要實現WSGI協議,必須同時實現Web服務器和Web應用,由於它描述的是Web服務器(如nginx、uWSGI等服務器)如何與Web應用(如用Django框架寫的程序)進行通訊。django
uWSGI:是一個Web服務器,實現了WSGI協議、uwsgi協議、http協議等。它要作的就是把http協議轉化成語言支持的網絡協議。好比把http協議轉化成WSGI協議,讓Python能夠直接使用。 Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。flask
uwsgi:是一種線路協議,並不是是通訊協議,在此經常使用於在uWSGI服務器與其餘網絡服務器的數據通訊。uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型。它與WSGI相比是兩樣東西。瀏覽器
uwsgi官網安全
pip3 install uwsgi
新建一個test.py:
def application(env, start_response): start_response("200 OK", [("Content-Type", "text/html")]) return [b"Hello World"]
uwsgi熱加載python應用程序:
uwsgi --http :8000 --wsgi-file --py-autoreload=1 test.py
PS:若是執行了上面命令顯示 uwsgi: command not found
則配置軟連接,方便使用:
ln -s python安裝路徑/bin/uwsgi /usr/bin/uwsgi 例如個人: ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
啓動成功後,打開瀏覽器,訪問"服務器公網IP:8000″(或者在本機訪問""http://localhost:8000),就能夠看到"Hello World"字樣了。
PS:我使用的是阿里雲服務器,若是你也是;項目部署好了,在瀏覽器打不開的話,能夠登陸服務器控制檯,添加安全組規則便可,具體請自行百度。
# app.py from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "這是個人第一個flask程序!" if __name__ == "__main__": app.run()
PS:若是是flask程序,須要再加 --callable app
uwsgi --http :8000 --wsgi-file app.py --callable app
修改配置文件,將 ALLOWED_HOSTS 設置爲:當前服務器IP或*,如:
ALLOWED_HOSTS = ["*",]
啓動django:
uwsgi --http :8000 --chdir /usr/local/django/mysite/ --wsgi-file mysite/wsgi.py
根據配置文件啓動
一、建立配置文件 uwsgi.ini
[uwsgi] # 指定ip端口(直接運行設置爲http、用nginx則設置爲socket) http = 0.0.0.0:8000 # 執行項目的目錄 chdir = /usr/local/django/mysite/ # Django的wsgi.py文件 module = mysite.wsgi # 至關於mysite/wsgi.py # 容許主進程存在 master = true # 開啓的進程數量 processes = 4 # 後臺運行 daemonize2 = true # uwsgi.pid文件能夠用來重啓和中止uwsgi服務 pidfile = %(chdir)/uwsgi/uwsgi.pid # uwsgi.status能夠用來查看uwsgi的服務狀態 stats = %(chdir)/uwsgi/uwsgi.status # 當服務器退出的時候自動清理環境 vacuum = true # 將日誌打到指定的日誌文件 logto = /tmp/mysite.log # 虛擬環境 home=/root/envs/pdsite
二、根據配置文件啓動(注意路徑)
# 啓動 uwsgi --ini uwsgi.ini # 中止 uwsgi --stop uwsgi.pid # 重啓 uwsgi --reload uwsgi.pid # 查看uwsgi的服務狀態 uwsgi --connect-and-read uwsgi.status
此時訪問時,會出現找不到靜態文件的錯誤。
想要uwsgi處理靜態文件,須要先將django的靜態文件收集到制定目錄,而後再設置對應關係。
一、收集django靜態文件
二、設置uwsgi靜態文件對應關係
在上面的 mysite.ini 文件中加入如下配置:
# static-map(映射一個資源到靜態文件區) static-map = /static=/usr/local/django/mysite/allstatic
映射媒體文件(看你需不須要配置):
static-map = /media=/usr/local/django/mysite/media
再次使用配置文件方式啓動,全部靜態文件就能夠加載了。
Nginx是一款輕量級的高性能Web服務器/反向代理服務器。咱們能夠利用Nginx作反向代理、負載均衡以及處理靜態文件。
安裝:點擊這裏
uwsgi官網:使用uwsgi和Nginx設置Django和Web服務器
配置nginx
首先要確保你安裝的Nginx中有uwsgi_params文件哦,以下;沒有能夠從這裏獲取:點我
配置nginx.conf:
user root; worker_processes 4; error_log /opt/nginx/logs/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /opt/nginx/conf/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /opt/nginx/logs/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; # 定義負載均衡池,名字叫作django,池子中寫入uwsgi發佈django的socket地址 upstream django { server 127.0.0.1:8001; } server { listen 80; server_name www.zouxin.top; charset utf-8; client_max_body_size 75M; location / { # nginx自帶ngx_http_uwsgi_module模塊,起到nginx和uwsgi交互做用 # 經過uwsgi_pass設置服務器地址和協議,將動態請求轉發給uwsgi處理 uwsgi_pass django; include uwsgi_params; } # nginx處理靜態頁面資源 location /static { alias /usr/local/django/mysite/allstatic; } } }
這個nginx.conf文件告訴nginx從文件系統中提供媒體和靜態文件,以及處理須要django干預的請求。對於大型部署,讓一臺服務器處理靜態/媒體文件,另外一臺服務器處理django應用程序,被認爲是一種良好的作法,就目前而言,這樣作會很好。
部署靜態文件
在運行nginx以前,必須收集靜態文件夾中的全部Django靜態文件。這一步咱們已經在上面完成了。
配置uwsgi(ini文件)
[uwsgi] socket = 127.0.0.1:8001 chdir = /usr/local/django/mysite/ module = mysite.wsgi master = true processes = 4 daemonize2 = true pidfile = %(chdir)/uwsgi/uwsgi.pid stats = %(chdir)/uwsgi/uwsgi.status vacuum = true logto = /tmp/mysite.log static-map = /static=/usr/local/django/mysite/allstatic
啓動uwsgi和nginx(注意路徑)
# 啓動uwsgi uwsgi --ini mysite.ini # 啓動nginx cd /opt/nginx/sbin/ ./nginx
項目正式部署的時候,咱們一般會將其轉化爲系統的守護進程,將其放到後臺運行,可是其並不會爲咱們監控進程的運行狀態,一旦進程崩潰,咱們的項目就沒法繼續提供服務。因此咱們要藉助supervisor,幫助咱們啓動uwsgi並維護(uwsgi進程關閉時,自動將其啓動起來)。
一、安裝
yum install supervisor
二、在/etc/supervisord.conf末尾添加上以下代碼
[program:mysite] ; mysite是進程的名字(後面要用) command=/root/envs/pdsite/bin/uwsgi --ini /usr/local/django/mysite/uwsgi/uwsgi.ini ; 虛擬環境下的uwsgi,和項目uwsgi.ini文件 priority=999 ; 程序運行的優先級(越小越優先) autostart=true ; supervisord啓動時,該程序也啓動 autorestart=true ; 異常退出時,自動重啓 startsecs=10 ; 程序啓動後持續10s後未發生異常,才表示啓動成功 startretries=3 ; 異常後,自動重啓次數 exitcodes=0,2 ; exit異常拋出的是0.2時才認爲是異常 stopsignal=QUIT ; 用於殺死進程的信號 stopwaitsecs=10 ; 向進程發出stopsignal後等待OS向supervisord返回SIGCHILD的時間,若超時則supervisord將使用SIGKILL殺進程 user=root ; 設置啓動該程序的帳號爲chrism log_stdout=true ; 若是爲True,則記錄程序日誌 log_stderr=false ; 若是爲True,則記錄程序錯誤日誌 logfile=/var/log/cat.log ; 程序日誌路徑 logfile_maxbytes=1MB ; 日誌文件最大大小 logfile_backups=10 ; 日誌文件最大數量
三、啓動supervisor
supervisord -c /etc/supervisord.conf
...
http://www.javashuo.com/article/p-hqwwbbrz-gk.html
...
...