環境:
django:1.8.16
python:2.7.13
pip:2.7
uwsgi:2.0.15
project路徑: /opt/cmdb/
Uwsgi的安裝配置
1、安裝python2.7 (省略安裝過程)
2、安裝pip2.7 (省略安裝過程)
3、安裝uwsgi(注意:要用pip2.7安裝)
1
2
3
<code>pip2.7 </code><code>install</code> <code>uwsgi</code>
<code>pip2.7 </code><code>install</code> <code>requests</code>
<code>ln</code> <code>-s </code><code>/usr/local/python2</code><code>.7</code><code>/bin/uwsgi</code> <code>/usr/bin/uwsgi</code>
4、配置uwsgi.ini
路徑: /opt/cmdb/uwsgi.ini
檔案内容:
[root@localhost cmdb]# cat uwsgi.ini
4
5
6
7
8
9
10
11
<code>[uwsgi]</code>
<code>socket = 127.0.0.1:8088</code>
<code>chdir=</code><code>/opt/cmdb</code>
<code>wsgi-</code><code>file</code> <code>= cmdb</code><code>/wsgi</code><code>.py</code>
<code>pidfile = </code><code>/var/run/uwsgi</code><code>.pid</code>
<code>daemonize = </code><code>/var/log/uwsgi</code><code>.log</code>
<code>perl-auto-reload = 2</code>
<code>#buffer-size = 102400</code>
<code>master = </code><code>true</code>
<code>processes = 2</code>
<code>threads = 4</code>
Uwsgi:常用參數和選項
chdir 項目目錄
home virtualenv目錄(如沒有運作virtualenv虛拟環境,則無需設定)
socket 套接字檔案或TCP套接字,例如:site1.uwsgi.sock 或 127.0.0.1:8000
uid 使用者id
gid 使用者組id
processes 工作程序數
harakiri 程序超過該時間未響應就重新開機該程序(預設機關為秒)
module 要啟動的wsgi子產品入口,如:mysite.wsgi:application
ini 指定ini配置檔案
xml 指定xml配置檔案(與ini類似)
file 指定要運作的wsgi程式檔案,如:test.py
emperor Emperor模式
so-keepalive 開啟TCP KEEPALIVE(unix套接字方式下無效)
uwsgi服務init腳本 /etc/init.d/cmdb
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<code>#!/bin/bash</code>
<code># Comments to support chkconfig on Linux</code>
<code># chkconfig: 35 85 15</code>
<code># description: uwsgi is an HTTP(S) server, HTTP(S) reverse</code>
<code>#</code>
<code># author [email protected]</code>
<code># chmod +x /etc/rc.d/init.d/uwsgi</code>
<code># chkconfig --add uwsgi</code>
<code># chkconfig --level 2345 uwsgi on</code>
<code># Change History:</code>
<code># date author note</code>
<code># 2016/11/16 [email protected] create, refer to nginx, and http://uwsgi-docs.readthedocs.io/en/latest/Management.html</code>
<code> </code>
<code>set</code> <code>-e</code>
<code>PATH=</code><code>/usr/local/sbin</code><code>:</code><code>/usr/local/bin</code><code>:</code><code>/sbin</code><code>:</code><code>/bin</code><code>:</code><code>/usr/sbin</code><code>:</code><code>/usr/bin</code>
<code>DESC=</code><code>"uwsgi daemon"</code>
<code>NAME=uwsgi </code>
<code>DAEMON=</code><code>/usr/bin/</code><code>$NAME </code><code>##指向uwsgi的指令路徑</code>
<code>SCRIPTNAME=</code><code>/etc/init</code><code>.d/$NAME </code><code>##啟動腳本路徑</code>
<code>CONFFILE=</code><code>/opt/cmdb/uwsgi</code><code>.ini </code><code>##uwsgi.ini配置檔案路徑</code>
<code>PIDFILE=</code><code>/var/run/uwsgi</code><code>.pid </code><code>##pid檔案路徑</code>
<code>test</code> <code>-x $DAEMON || </code><code>exit</code> <code>0</code>
<code>d_start(){</code>
<code> </code><code>$DAEMON --ini $CONFFILE || </code><code>echo</code> <code>-n </code><code>" already running"</code>
<code>}</code>
<code>d_stop() {</code>
<code> </code><code>$DAEMON --stop $PIDFILE || </code><code>echo</code> <code>-n </code><code>" not running"</code>
<code>d_reload() {</code>
<code> </code><code>$DAEMON --reload $PIDFILE || </code><code>echo</code> <code>-n </code><code>" counld not reload"</code>
<code>d_freload() {</code>
<code> </code><code>$DAEMON --die-on-term $PIDFILE || </code><code>echo</code> <code>-n </code><code>" counld not force reload"</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code>start)</code>
<code> </code><code>echo</code> <code>-n </code><code>"Starting $DESC:$NAME"</code>
<code> </code><code>d_start</code>
<code> </code><code>echo</code> <code>"."</code>
<code>;;</code>
<code>stop)</code>
<code> </code><code>echo</code> <code>-n </code><code>"Stopping $DESC:$NAME"</code>
<code> </code><code>d_stop</code>
<code>reload)</code>
<code> </code><code>echo</code> <code>-n </code><code>"Reloading $DESC configuration..."</code>
<code> </code><code>d_reload</code>
<code> </code><code>echo</code> <code>"reloaded."</code>
<code>force_reload)</code>
<code> </code><code>echo</code> <code>-n </code><code>"The official provision of the parameters, tested and found not to support..."</code>
<code> </code><code># d_freload</code>
<code> </code><code># echo "force reloaded."</code>
<code>restart)</code>
<code> </code><code>echo</code> <code>-n </code><code>"Restarting $DESC: $NAME"</code>
<code> </code><code>sleep</code> <code>2</code>
<code>*)</code>
<code> </code><code>echo</code> <code>"Usage: $SCRIPTNAME {start|stop|restart|reload|force_reload}"</code> <code>>&2</code>
<code> </code><code>exit</code> <code>3</code>
<code>esac</code>
<code>exit</code> <code>0</code>
Nginx安裝配置
1、安裝nginx
<code>yum -y </code><code>install</code> <code>nginx</code>
2、配置nginx
[root@localhost cmdb]# cat /etc/nginx/conf.d/cmdb.conf
<code>upstream django {</code>
<code> </code><code>server 127.0.0.1:8088;</code>
<code> </code><code>}</code>
<code>server {</code>
<code> </code><code>listen 80;</code>
<code> </code><code>server_name 172.16.42.128;</code>
<code> </code><code>charset utf-8;</code>
<code> </code><code>client_max_body_size 10M;</code>
<code> </code><code>location </code><code>/static</code> <code>{</code>
<code> </code><code>alias</code> <code>/opt/cmdb/static</code><code>;</code>
<code> </code><code>location / {</code>
<code> </code><code>uwsgi_send_timeout 300;</code>
<code> </code><code>uwsgi_connect_timeout 300;</code>
<code> </code><code>uwsgi_read_timeout 300;</code>
<code> </code><code>uwsgi_pass django;</code>
<code> </code><code>include </code><code>/etc/nginx/uwsgi_params</code><code>;</code>
啟動站點
1、啟動nginx服務
/etc/init.d/nginx start (删除預設的default.conf配置)
2、啟動uwsgi
/etc/init.d/cmdb start
排錯:
1、在實際操作中發現,啟動uwsgi服務後,通路站點出現“502 Bad Gateway”的報錯,後來發現是在settings中設定了不允許通路站點
<code>ALLOWED_HOSTS = []</code>
改成
<code>ALLOWED_HOSTS = [‘*’]</code>
後問題解決。
2、由于python2.6 不支援django1.8 ,是以需要在伺服器上安裝python2.7,并且在安裝之前,最好輸入以下指令,将可能用到的包都裝上,否則出現問題時,需要重新編譯安裝python2.7
<code>yum -y </code><code>install</code> <code>zlib-devel </code><code>bzip2</code><code>-devel openssl-devel </code>
<code>yum -y </code><code>install</code> <code>ncurses-devel sqlite-devel readline-devel </code>
<code>yum -y </code><code>install</code> <code>tk-devel gdbm-devel db4-devel libpcap-devel</code>
<code>yum -y </code><code>install</code> <code>xz-devel libffi-devel</code>
3、用pip安裝uwsgi時,一定要用pip2.7(用python2.7安裝的pip) 進行安裝
4、invalid request block size: 4161 (max 4096)...skip報錯解決
在通路站點時,出現了invalid request block size: 4161 (max 4096)...skip報錯解決的報錯。
解決辦法是在uwsgi.ini配置檔案中增加一條配置:buffer-size = 102400
将buffer-size設定大一些
本文轉自 曾哥最愛 51CTO部落格,原文連結:http://blog.51cto.com/zengestudy/1930346,如需轉載請自行聯系原作者