系統:
centos 7.2 (能夠先更新yum源,yum -y install epel-release)
前提:
一、Django包在本地能正常運行
二、安裝在安裝完以後能訪問首頁
安裝調試
一、上傳Django包至本身單首創建的目錄
mkdir /var/django
unzip django.zip
二、環境
2.1 centos7 以上如今都自帶Python 2.7和pip,這裏不在安裝
2.2 pip install uwsgi
這裏可能會報錯,有些Python的依賴包得安裝
yum install python-devel
yum install mysql-devel
yum install gcc
若是你的程序有用到mysql或者其餘的模塊在Linux你也得提早安裝
pip install pillow
pip install django==1.8.2
pip install django-ckeditor
數據庫mysql的驅動得本身下載版本手動安裝
2版本:MySQLdb 下載解壓 python setup.py install
3版本:pymysql
2.3 配置uwsgi文件加載Django項目啓動
2.3.1 直接帶參數啓動,這種不太方便
uwsgi --http 10.36.3.74:8020 --file xs_dj/wsgi.py --static-map=/static=./myarticle/static
2.3.2 以配置文件啓動,得先建立一個ini的配置文件
vim uwsigi.ini
#表示uwsgi模塊
[uwsgi]
#項目目錄
chdir=/var/django/xs_dj/
#指定項目的應用,固定寫法,承接上面的項目目錄
module=xs_dj.wsgi:application
#sock文件存放目錄,方便nginx進行sock鏈接交互
socket=/var/django/xs_dj/scripts/uwsgi.sock
#併發進程
workers=5
#進程id存放文件
pidfile=/var/django/xs_dj/scripts/uwsgi.pid
#啓動的ip及端口
http=10.36.3.74:8021
#靜態文件映射,第一個等於表明Django裏面的別名,第二個等於後面是Django裏面的真實路徑
static-map=/static=/var/django/xs_dj/myarticle/static
#啓動的用戶和組
uid=root
gid=root
#啓用主進程
master=true
#自動移除unix Socket和pid文件當服務中止的時候
vacuum=true
#序列化接受的內容,若是可能的話
thunder-lock=true
#啓用線程
enable-threads=true
#設置自中斷時間
harakiri=30
#設置緩存
post-buffering=4096
#日誌存放目錄,方便拍錯
daemonize=/var/django/xs_dj/scripts/myarticle.log
2.3.3 注意事項
這個文件等於後面加入引號的話,實際的效果中也是加入了引號的,就比如路徑多出了引號那確定是錯的
chdir、module、socket、http、static-map 這幾個必填且必須準確無誤
2.3.4 啓動調試
uwsgi --ini uwsigi.ini
10.36.3.74:8021;web瀏覽器測試是否能夠正常訪問
若不行的話能夠看日誌去分析,下面第一個圖是正確的,第二個的話進入本地tcp的鏈接了,根本就沒有開啓Unix sock的鏈接
javascript
uwsgi從新啓動
得安全狀況下強制殺死 pkill -INT uwsgi
3 nginx集成
3.1 nginx自己經過瀏覽器能正常訪問
3.2 vim /etc/nginx/nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;php
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;css
events {
worker_connections 1024;
}html
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';java
access_log /var/log/nginx/access.log main;node
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;python
include /etc/nginx/mime.types;
default_type application/octet-stream;mysql
#include /etc/nginx/conf.d/*.conf;linux
server {
listen 80 ;
server_name 10.36.3.74;
charset utf-8;
#include /etc/nginx/default.d/*.conf;
# 支持壓縮的類型
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif
image/png application/octet-stream;
# 指定項目路徑uwsgi 這個location就和我們Django的url(r'^admin/', admin.site.urls),默認匹配根的狀況下所有轉去sock
location / {
#導入一個Nginx模塊他是用來和uWSGI進行通信的
include uwsgi_params;
# 設置鏈接uWSGI超時時間
#uwsgi_connect_timeout 30;nginx
uwsgi_send_timeout 600; # 指定鏈接到後端uWSGI的超時時間。
uwsgi_connect_timeout 600; # 指定向uWSGI傳送請求的超時時間,完成握手後向uWSGI傳送請求的超時時間。
uwsgi_read_timeout 600; # 指定接收uWSGI應答的超時時間,完成握手後接收uWSGI應答的超時時間
# 指定uwsgi的sock文件全部動態請求就會直接丟給他
uwsgi_pass unix:/var/django/xs_dj/scripts/uwsgi.sock;
}
# 指定靜態文件路徑,就是一個映射
location /static {
alias /var/django/xs_dj/myarticle/static;
index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
3.3 nginx啓動及調試
/etc/init.d/nginx start
nginx -t #檢測配置文件的準確性
nginx -s relaod #在不影響業務的狀況下 從新加載
若是nginx error_log日誌報如下的東西,代表是uwsgi的問題,看下uwsgi是否啓動,以及配置文件必填的幾個參數是否正確;connect() to unix:/var/django/xs_dj/scripts/uwsgi.sock failed (111: Connection refused) while connecting to upstream, client: 10.200.0.68, server: 10.36.3.74, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/var/django/xs_dj/scripts/uwsgi.sock:", host: "10.36.3.74", referrer: "http://10.36.3.74/"
我的注意點:
一、由於我這裏用到了驗證碼,須要pillow模塊,生成的圖片的時候得選擇一種字體
Windows下的字體路徑和Linux是有區別的
windows C:\\Windows\\Fonts\\
linux /usr/share/fonts/liberation/LiberationMono-Italic.ttf
二、若是有用到django-ckeditor模塊,得加載media文件,那麼uwsgi配置文件和nginx都得添加配置
uwisgi.ini
static-map=/media=/var/django/xs_dj/myarticle/static/images
ngninx.conf
location /media { alias /var/django/xs_dj/myarticle/static/images; index index.html index.htm; } 重啓uwsgi和nginx服務 pkill -INT uwsgi uwsgi --ini uwisgi.ini nginx -s reload